{"id":35758946,"url":"https://github.com/device-management-toolkit/console","last_synced_at":"2026-04-28T03:06:20.548Z","repository":{"id":221204502,"uuid":"750070199","full_name":"device-management-toolkit/console","owner":"device-management-toolkit","description":"Console is an application that provides a 1:1, direct connection for AMT devices for use in an enterprise environment. Users can add activated AMT devices to access device information and device management functionality such as power control, remote keyboard-video-mouse (KVM) control, and more.","archived":false,"fork":false,"pushed_at":"2026-04-03T03:41:44.000Z","size":27291,"stargazers_count":30,"open_issues_count":45,"forks_count":12,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T09:13:39.231Z","etag":null,"topics":["active-management-technology","intel","manageability","out-of-band","remote-management","vpro","wsman"],"latest_commit_sha":null,"homepage":"https://device-management-toolkit.github.io/docs/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/device-management-toolkit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-01-29T23:29:45.000Z","updated_at":"2026-03-31T15:06:26.000Z","dependencies_parsed_at":"2026-03-24T17:01:56.279Z","dependency_job_id":null,"html_url":"https://github.com/device-management-toolkit/console","commit_stats":null,"previous_names":["open-amt-cloud-toolkit/console","device-management-toolkit/console"],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/device-management-toolkit/console","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/device-management-toolkit%2Fconsole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/device-management-toolkit%2Fconsole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/device-management-toolkit%2Fconsole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/device-management-toolkit%2Fconsole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/device-management-toolkit","download_url":"https://codeload.github.com/device-management-toolkit/console/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/device-management-toolkit%2Fconsole/sbom","scorecard":{"id":503000,"data":{"date":"2025-08-19T21:18:08Z","repo":{"name":"github.com/device-management-toolkit/console","commit":"9679302db27256134f0deb83c30a3e04d1c477c7"},"scorecard":{"version":"v5.0.0","commit":"ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4"},"score":8.4,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":8,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is required - but no codeowners file found in repo","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"30 out of 30 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#code-review"}},{"name":"Contributors","score":10,"reason":"project has 3 contributing companies or organizations -- score normalized to 10","details":["Info: intel contributor org/company found, edgexfoundry contributor org/company found, device-management-toolkit contributor org/company found, "],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"22 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#maintained"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/docker-build.yml:13"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Warn: goCommand not pinned by hash: .github/workflows/ci.yml:120","Warn: npmCommand not pinned by hash: .github/workflows/release.yml:34","Warn: npmCommand not pinned by hash: .github/workflows/semantic.yml:26","Info:  38 out of  38 GitHub-owned GitHubAction dependencies pinned","Info:  29 out of  29 third-party GitHubAction dependencies pinned","Info:   2 out of   2 containerImage dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned","Info:   1 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.7.1 not signed: https://api.github.com/repos/device-management-toolkit/console/releases/239465626","Warn: release artifact v1.7.0 not signed: https://api.github.com/repos/device-management-toolkit/console/releases/229500875","Warn: release artifact v1.6.1 not signed: https://api.github.com/repos/device-management-toolkit/console/releases/228958153","Warn: release artifact v1.6.0 not signed: https://api.github.com/repos/device-management-toolkit/console/releases/216599583","Warn: release artifact v1.5.0 not signed: https://api.github.com/repos/device-management-toolkit/console/releases/214605529","Warn: release artifact v1.7.1 does not have provenance: https://api.github.com/repos/device-management-toolkit/console/releases/239465626","Warn: release artifact v1.7.0 does not have provenance: https://api.github.com/repos/device-management-toolkit/console/releases/229500875","Warn: release artifact v1.6.1 does not have provenance: https://api.github.com/repos/device-management-toolkit/console/releases/228958153","Warn: release artifact v1.6.0 does not have provenance: https://api.github.com/repos/device-management-toolkit/console/releases/216599583","Warn: release artifact v1.5.0 does not have provenance: https://api.github.com/repos/device-management-toolkit/console/releases/214605529"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:31","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:32","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:30","Info: topLevel 'contents' permission set to 'read': .github/workflows/api-test.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:24","Info: topLevel 'contents' permission set to 'read': .github/workflows/docker-build.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/projectsSync.yaml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:15","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/semantic.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/trivy-scan.yml:10","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T22:28:35.562Z","repository_id":221204502,"created_at":"2025-08-19T22:28:35.562Z","updated_at":"2025-08-19T22:28:35.562Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31533824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["active-management-technology","intel","manageability","out-of-band","remote-management","vpro","wsman"],"created_at":"2026-01-06T22:23:51.115Z","updated_at":"2026-04-28T03:06:20.541Z","avatar_url":"https://github.com/device-management-toolkit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build](https://img.shields.io/github/actions/workflow/status/device-management-toolkit/console/ci.yml?style=for-the-badge\u0026label=Build\u0026logo=github)\r\n![Codecov](https://img.shields.io/codecov/c/github/device-management-toolkit/console?style=for-the-badge\u0026logo=codecov)\r\n[![OSSF-Scorecard Score](https://img.shields.io/ossf-scorecard/github.com/device-management-toolkit/console?style=for-the-badge\u0026label=OSSF%20Score)](https://api.securityscorecards.dev/projects/github.com/device-management-toolkit/console)\r\n[![Discord](https://img.shields.io/discord/1063200098680582154?style=for-the-badge\u0026label=Discord\u0026logo=discord\u0026logoColor=white\u0026labelColor=%235865F2\u0026link=https%3A%2F%2Fdiscord.gg%2FDKHeUNEWVH)](https://discord.gg/DKHeUNEWVH)\r\n\r\n# Console\r\n\r\n\u003e Disclaimer: Production viable releases are tagged and listed under 'Releases'. Console is under development. **The current available tags for download are Alpha version code and should not be used in production.** For these Alpha tags, certain features may not function yet, visual look and feel may change, or bugs/errors may occur. Follow along our [Feature Backlog for future releases and feature updates](https://github.com/orgs/device-management-toolkit/projects/10).\r\n\r\n## Overview\r\n\r\nConsole is an application that provides a 1:1, direct connection for AMT devices for use in an enterprise environment. Users can add activated AMT devices to access device information and device management functionality such as power control, remote keyboard-video-mouse (KVM) control, and more.\r\n\r\n## Quick Start for Users\r\n\r\n### 1. Download Console\r\n\r\n1. Visit the [latest release page](https://github.com/device-management-toolkit/console/releases/latest)\r\n2. Download the appropriate binary for your operating system and architecture from the **Assets** section\r\n\r\n### 2. Run Console\r\n\r\n#### Linux/macOS\r\n```sh\r\n# Navigate to your download directory\r\ncd \u003cpath-to-your-download\u003e\r\n\r\n# Extract the archive (example for Linux x64)\r\ntar -xzf console_linux_x64.tar.gz\r\n\r\n# Make the binary executable\r\nchmod +x console_linux_x64\r\n\r\n# Run Console\r\n./console_linux_x64\r\n```\r\n\r\n#### Windows\r\n```cmd\r\n# Simply double-click the downloaded executable to run\r\nconsole_windows_x64.exe\r\n```\r\n\r\nOr run from Command Prompt:\r\n```cmd\r\nconsole_windows_x64.exe\r\n```\r\n\r\n\r\n### 3. First Run Setup\r\n\r\nOn first startup, you'll see:\r\n```\r\nWarning: Key Not Found, Generate new key? Y/N\r\n```\r\n\r\n**Simply type `Y` and press Enter** - this generates the necessary encryption keys for secure operation.\r\n\r\n\r\n\u003e **Linux Users**: If you encounter `\"Object does not exist at path '/'\"` after answering 'Y', this indicates your system lacks a keychain service. Install a keychain manager (like `seahorse`) and restart Console binary.\r\n\r\n---\r\n\r\n## For Developers\r\n\r\n### Development Environment\r\n\r\nYou’ll run two components during development:\r\n\r\n- **Console** – the backend service (Go Service)  \r\n- **Web UI** – the frontend (for the Angular Web UI)\r\n\r\nLocal development can be done on **Linux**, **macOS**, and **Windows**. On Windows, WSL is recommended if you plan to use `make`, but it’s not required for running Console directly.\r\n\r\n### Prerequisites\r\n\r\nBefore you begin, ensure you have:\r\n- [Go 1.24+](https://go.dev/dl/)\r\n- [Git](https://git-scm.com/downloads)\r\n- [Node.js \u0026 npm](https://nodejs.org/) (for the Web UI)\r\n- [Docker \u0026 Docker Compose](https://docs.docker.com/get-docker/) (optional, for PostgreSQL)\r\n\r\n### 1. Clone and Configure Console\r\n\r\n```sh\r\n# Clone Console\r\ngit clone https://github.com/device-management-toolkit/console.git\r\ncd console\r\n\r\n# Copy env template\r\ncp .env.example .env\r\n```\r\n\r\nEdit `.env` as needed. For local dev, set:\r\n\r\n```sh\r\nGIN_MODE=debug\r\n# DB_URL=postgres://postgresadmin:admin123@localhost:5432/rpsdb  # uncomment for Postgres\r\n```\r\n\r\n### 2. Configure Backend for Development\r\n\r\nFor local development with a separate UI, configure `config/config.yml` to point to your frontend:\r\n\r\n```yaml\r\nui:\r\n  externalUrl: \"http://localhost:4200\"\r\n```\r\n\r\nThis tells the backend to redirect UI requests to the separately running frontend application.\r\n\r\n### 3. Running the Backend\r\n\r\n\u003e **Important**: For development, use the `console-noui` binary or build with the `noui` tag. This allows the backend to work with a separately running frontend without embedding UI files.\r\n\r\n#### Option A: SQLite (default, easiest)\r\n\r\n```sh\r\n# Install dependencies\r\ngo mod tidy \u0026\u0026 go mod download\r\n\r\n# Run Console with noui tag\r\ngo run -tags=noui ./cmd/app/main.go\r\n\r\n# OR use the pre-built noui binary\r\n./bin/console-noui -config ./config/config.yml\r\n```\r\n\r\n**First run**: When prompted with `Warning: Key Not Found, Generate new key? Y/N`, type `Y` and press Enter.\r\n\r\n\u003e **Custom Config**: You can specify a custom configuration file:\r\n\u003e ```sh\r\n\u003e go run -tags=noui ./cmd/app/main.go --config \"/absolute/path/to/config.yml\"\r\n\u003e ```\r\n\r\n\u003e **Database Location**: SQLite database is automatically created at:\r\n\u003e - Linux/macOS: `~/.config/device-management-toolkit/console.db`\r\n\u003e - Windows: `%APPDATA%\\device-management-toolkit\\console.db`\r\n\r\n#### Option B: PostgreSQL\r\n\r\n```sh\r\n# Start Postgres via Docker\r\nmake compose-up\r\n\r\n# Run Console with database migrations (noui)\r\nmake run-noui\r\n```\r\n\r\nThis will use the `DB_URL` you configured in `.env`.\r\n\r\n### 4. Build Options\r\n\r\nConsole supports multiple build configurations optimized for different use cases:\r\n\r\n#### Default Build\r\n- Full build with embedded web UI\r\n- Ideal for development and single-instance deployments\r\n\r\n#### `noui` Build (Headless/API-only)\r\n- Excludes embedded web UI from binary\r\n- **Reduces binary size** by ~30MB\r\n- All API endpoints remain fully functional\r\n- Health checks, metrics, and API docs still available\r\n- Optional: Configure `ui.externalUrl` in `config.yml` to redirect UI requests to separately hosted frontend\r\n- Ideal for microservice architectures or when using a separate UI deployment\r\n\r\n**Configuration for headless builds:**\r\n\r\nEdit `config.yml`:\r\n```yaml\r\nui:\r\n  # Redirect UI requests to external frontend (optional)\r\n  # If empty: UI requests return 404\r\n  # If set: UI requests redirect to this URL\r\n  externalUrl: \"https://your-ui-domain.com\"\r\n```\r\n\r\nOr use environment variable:\r\n```sh\r\nUI_EXTERNAL_URL=https://your-ui-domain.com ./console-noui\r\n```\r\n\r\n**Build commands:**\r\n```sh\r\n# Default build (with UI) for current platform\r\nmake build\r\n\r\n# Headless build (no UI) for current platform\r\nmake build-noui\r\n\r\n# Cross-compile for all platforms (Linux, Windows, macOS)\r\n# Produces binaries in dist/ directory for distribution\r\nmake build-all-platforms\r\n```\r\n\r\n**Manual build examples:**\r\n```sh\r\n# Build for current platform\r\ngo build -o console ./cmd/app\r\ngo build -tags=noui -o console-noui ./cmd/app\r\n\r\n# Cross-compilation examples (CGO_ENABLED=0 produces static binaries)\r\n# Linux\r\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o console-linux ./cmd/app\r\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags=noui -o console-linux-headless ./cmd/app\r\n\r\n# Windows\r\nCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o console.exe ./cmd/app\r\nCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -tags=noui -o console-headless.exe ./cmd/app\r\n\r\n# macOS\r\nCGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o console-macos ./cmd/app\r\nCGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -tags=noui -o console-macos-headless ./cmd/app\r\n```\r\n\r\n\u003e **Note**: With `CGO_ENABLED=0`, Go produces statically-linked binaries that are cross-platform compatible. You can build binaries for any target platform from any development machine.\r\n\r\n### 5. Running the Frontend\r\n\r\n```sh\r\n# Clone Sample Web UI\r\ngit clone https://github.com/device-management-toolkit/sample-web-ui\r\ncd sample-web-ui\r\n\r\n# Install dependencies\r\nnpm install\r\n\r\n# Build and run\r\nnpm run enterprise\r\n```\r\n\r\nCheck the output of `npm run enterprise` to verify the port (default is 4200), then open the UI in your browser at:\r\n\r\n```\r\nhttp://localhost:4200\r\n```\r\n\r\n## Architecture and Documentation\r\n\r\nBefore contributing code changes, familiarize yourself with:\r\n\r\n- [Console Architecture Overview](https://github.com/device-management-toolkit/console/wiki/Architecture-Overview)\r\n- [Console Data Storage Documentation](https://github.com/device-management-toolkit/console/wiki/Console-Data-Storage)\r\n\r\n### OpenAPI Documentation\r\n\r\nConsole exposes the OpenAPI specification two ways:\r\n\r\n1. **Live HTTP endpoint** (always available when the server runs):\r\n   - `http://localhost:8181/api/openapi.json`\r\n2. **Regenerate `doc/openapi.json` on disk** (used by CI to publish to SwaggerHub):\r\n   ```sh\r\n   make openapi\r\n   ```\r\n   Equivalent to `go run ./cmd/openapi-gen` — a standalone binary that writes `doc/openapi.json` and exits without starting the server.\r\n3. **To add API Documentation**: Check wiki `https://github.com/device-management-toolkit/console/wiki/API-Documentation-to-Console`\r\n\r\n## Dev tips for passing CI Checks\r\n\r\n- Install gofumpt `go install mvdan.cc/gofumpt@latest` (replaces gofmt)\r\n- Install gci `go install github.com/daixiang0/gci@latest` (organizes imports)\r\n- Ensure code is formatted correctly with `gofumpt -l -w -extra ./`\r\n- Ensure all unit tests pass with `go test ./...`\r\n- Ensure code has been linted with:\r\n  - Windows: `docker run --rm -v ${pwd}:/app -w /app golangci/golangci-lint:latest golangci-lint run --config=./.golangci.yml -v`\r\n  - Unix: `docker run --rm -v .:/app -w /app golangci/golangci-lint:latest golangci-lint run --config=./.golangci.yml -v`\r\n\r\n## Fuzz Testing\r\n\r\nConsole includes Go fuzz tests across multiple packages and targets. For full coverage details, seed corpus strategy, and CI guidance, see wiki: [Fuzz Testing](https://github.com/device-management-toolkit/console/wiki/Fuzz-Testing)\r\n\r\n### Prerequisite\r\n\r\nThe Makefile includes `.env`, so ensure it exists before running make commands:\r\n\r\n```sh\r\ncp .env.example .env\r\n```\r\n\r\n### List all fuzz targets\r\n\r\n```sh\r\nmake fuzz-list\r\n```\r\n\r\nOutput format:\r\n\r\n```text\r\n./internal/usecase/devices FuzzParseInterval\r\n./internal/entity/dto/v1 FuzzDeviceJSONProcessing\r\n...\r\n```\r\n\r\n### Run a single fuzz target (recommended local workflow)\r\n\r\nGo fuzzing runs one fuzz target at a time. Use `fuzz-one` for focused debugging and development:\r\n\r\n```sh\r\nmake fuzz-one PKG=./internal/usecase/devices TARGET=FuzzParseInterval FUZZTIME=30s\r\n```\r\n\r\n### Run a quick all-target smoke pass\r\n\r\nRuns each fuzz target once (`-fuzztime=1x`):\r\n\r\n```sh\r\nmake fuzz-smoke\r\n```\r\n\r\n### Run all fuzz targets with time budget per target\r\n\r\n```sh\r\nmake fuzz-all FUZZTIME=2m\r\n```\r\n\r\nThis executes all discovered fuzz targets sequentially and is suitable for scheduled CI jobs.\r\n\r\n\r\n## Additional Resources\r\n\r\n- For detailed documentation and Getting Started, [visit the docs site](https://device-management-toolkit.github.io/docs).\r\n\r\n\u003c!-- - Looking to contribute? [Find more information here about contribution guidelines and practices](.\\CONTRIBUTING.md). --\u003e\r\n\r\n- Find a bug? Or have ideas for new features? [Open a new Issue](https://github.com/device-management-toolkit/console/issues).\r\n\r\n- Need additional support or want to get the latest news and events about Device Management Toolkit? Connect with the team directly through Discord.\r\n\r\n    [![Discord Banner 1](https://discordapp.com/api/guilds/1063200098680582154/widget.png?style=banner2)](https://discord.gg/DKHeUNEWVH)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevice-management-toolkit%2Fconsole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevice-management-toolkit%2Fconsole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevice-management-toolkit%2Fconsole/lists"}