Project Structure
June 13, 2026 ยท View on GitHub
Dependency-Track is a multi-module Maven project. The codebase started as a single Maven module and is being broken up into smaller modules over time.
Note
Modularization is not only an architectural choice, it also drives the effectiveness of build parallelization and build caching.
Top-level layout
Every top-level directory with a pom.xml is a Maven module.
Documentation, development tooling, and CI configuration live next to the modules at the repository root.
Modules
Core application
These modules carry product features.
api: OpenAPI specification for REST API v2. Spec-first. New endpoints go here.apiserver: main application. Descended from the original single-module codebase. Hosts REST API v1 undersrc/main/java/org/dependencytrack/resources/v1and REST API v2 implementations undersrc/main/java/org/dependencytrack/resources/v2.notification: notification API, publishers, and templating. Parts of the notification infrastructure still live underapiserver/src/main/java/org/dependencytrack/notificationbecause they are coupled to internal models.package-metadata: resolves package metadata from package repositories.vuln-analysis: vulnerability analyzers (OSS Index, Snyk, Trivy, internal database).vuln-data-source: adapters for vulnerability feeds (NVD, GitHub, OSV).
Shared building blocks
Small libraries reused across modules.
common: focused shared libraries (e.g.config,datasource,health,init,pagination).migration: Flyway database migrations.proto: Protocol Buffer message definitions.
Shared infrastructure
Cross-cutting services with a clear API and one or more providers behind it.
alpine: forked framework thatapiserveris built on. Being dissolved over time by moving code into other modules.cache: cache API and providers (e.g.memory,database).dex: durable execution engine.file-storage: file storage API and providers (e.g.local,memory,s3).plugin: plugin API and runtime used by other modules to load providers (e.g. notification publishers or vulnerability analyzers).secret-management: secret storage.
Support libraries
Live under support/. Each one fills a small, well-scoped gap.
cyclonedx-proto: CycloneDX Protocol Buffer definitions.datanucleus-plugin: custom DataNucleus ORM extensions.flyway: Support code for working with Flyway.jdbi: Support code for working with JDBI.os-distro-metadata: Linux distribution metadata.smallrye-config-*: SmallRye Config extensions.swagger-model-converters: Swagger and OpenAPI model converters.v4-migrator: tooling to migrate from Dependency-Track v4.
Testing
coverage-report: aggregator project for generating JaCoCo code coverage reports. Modules for which test coverage is to be captured are added as dependencies here.e2e: end-to-end tests.
Top-level directories that are not modules
.github/: GitHub workflows and issue templates..mvn/: Maven configuration.dev/: local development tooling (Docker Compose stack, monitoring stack).docs/: contributor-facing documentation, including Architecture Decision Records underdocs/adr/. User-facing documentation lives in a separate repository.
Extending this document
- Keep one short paragraph per module.
- Place new modules into the group that best matches their role.
- Add a new group only if no existing one fits.