Skip to content

UI Deployment

The CBOM UI is an Angular 21 application styled with Tailwind CSS. In development it runs standalone; in production it’s embedded in the API JAR.


  • Node.js 20+
  • npm 9+
Terminal window
cd cbom/ui
npm install
npm start

The UI starts on http://localhost:4200 and proxies API calls to http://localhost:9090.

The dev server proxy is configured in proxy.conf.json:

{
"/api": {
"target": "http://localhost:9090",
"secure": false
}
}

This means all /api/* requests from the UI are forwarded to the API server during development.


The production build compiles the Angular app into static files that get embedded in the API JAR.

Terminal window
cd cbom/ui
npm run build

The output goes to dist/ and is copied into the API’s src/main/resources/static/ during the Maven build.

When the API runs with --spring.profiles.active=prod, it serves the Angular build from classpath resources. The AngularRoutingFilter handles client-side routing by forwarding non-API, non-static requests to index.html.

Terminal window
# Build everything
cd cbom
mvn package -Pprod -DskipTests
# Run — UI is served from the same port as the API
java -jar api/target/cbom-api-*.jar --spring.profiles.active=prod
# Access at http://localhost:9090

RoutePageDescription
/dashboardDashboardRisk overview and scan activity
/inventoryInventoryCrypto asset table with filters
/sensorsSensorsSensor management and scan runs
/alertsAlertsAlert rules and schedules
/relationshipsRelationshipsSVG relationship graph
/complianceCompliancePolicy evaluation
/import-exportImport/ExportCycloneDX import/export
/usersUsersUser management
/settingsSettingsPlatform configuration
/signinSign InAuthentication

The UI uses JWT-based authentication. On sign-in, the API returns a token that’s stored in the browser and sent with every subsequent request via an HTTP interceptor.

  • Token expiration: 24 hours (configurable via CBOM_JWT_EXPIRATION_HOURS)
  • Route guard: Unauthenticated users are redirected to /signin
  • Roles: admin (full access) and viewer (read-only)

LibraryPurpose
Angular 21Application framework
Tailwind CSSUtility-first styling
CodeMirrorYAML config editor in Settings