11# About changes in v5
22
3- Dependency-Track v5 extensively refactors the platform. It does not rewrite
3+ Dependency-Track v5 extensively refactors the platform. It doesn't rewrite
44it. Much of the underlying technology and many subsystems carry over from
5- v4 untouched. The changes concentrate on three areas where v4's pain
6- points lived: the runtime, the policy engine, and the operational model.
5+ v4 untouched. Most changes address where v4's design showed its limits:
6+ scalability and reliability, the policy engine, and operational
7+ complexity. A few sections cover new capabilities v4 lacked entirely.
78
8- This page summarises * what changed and why* . For step-by-step upgrade
9+ This page summarizes * what changed and why* . For step-by-step upgrade
910instructions, see the [ upgrade guides] ( ../guides/upgrading/index.md ) .
1011To move data from an existing v4 deployment into v5, see
1112[ Migrating from v4 to v5] ( ../guides/administration/migrating-from-v4.md ) .
@@ -28,15 +29,15 @@ engine. Smaller deployments still work, and gain the same guarantees.
2829v5 removes v4's in-process single point of failure (the in-memory queue
2930and local index). Web and worker nodes now scale independently, and
3031background work distributes through PostgreSQL-backed queues instead of an
31- in-memory pool. PostgreSQL itself stays a tier you must operate in HA if
32- you need full availability. See
32+ in-memory pool. PostgreSQL high availability remains your responsibility. See
3333[ Scaling Dependency-Track] ( ../guides/administration/scaling.md ) .
3434
3535Long-running work (BOM processing, vulnerability analysis, notification
3636delivery) runs on a
3737[ durable execution engine] ( architecture/design/durable-execution.md ) .
3838Tasks resume after a restart or crash from where they stopped, instead of
39- vanishing with the JVM.
39+ vanishing with the JVM. Failed steps retry automatically with exponential
40+ backoff, rather than requiring manual re-triggering.
4041
4142Notifications follow the same model. The runtime writes each notification
4243to a [ transactional outbox] ( architecture/design/notifications.md ) in the
@@ -48,54 +49,53 @@ See [About notifications](notifications.md) for the user-facing model.
4849### A single data plane on PostgreSQL
4950
5051v5 commits to PostgreSQL and drops H2, MySQL, and Microsoft SQL Server.
51- Concentrating on one engine lets the project use Postgres-specific
52- features that the v4 multi-database abstraction could not. Schema changes
53- now flow through an explicit, versioned changelog rather than runtime ORM
54- diffing, so upgrades stay predictable and roll back cleanly.
52+ Concentrating on one engine lets the project use PostgreSQL-specific
53+ features that the v4 multi-database abstraction couldn't. Schema changes
54+ now flow through an explicit, versioned changelog rather than runtime
55+ object-relational mapper (ORM) diffing, so upgrades stay predictable and
56+ roll back cleanly.
5557
56- Two subsystems v4 ran out-of-process now live inside the database:
58+ Two subsystems that v4 ran as separate processes now live inside the database:
5759
5860* ** Search** runs directly against PostgreSQL. The on-disk
5961 ` ~/.dependency-track/index ` directory disappears, along with the
6062 index-corruption and disk-space failure modes that came with it.
61- Lucene's fuzzy matching disappears with it. See * What this breaks* .
63+ Lucene's fuzzy matching disappears with it. See [ What this breaks] ( #what-this-breaks ) .
6264* ** Cache** still lives in PostgreSQL, but in ` UNLOGGED ` tables: no
63- write-ahead log overhead, non-durable by design, which suits a cache .
65+ write-ahead log overhead, non-durable by design.
6466 v4 stored cache rows in normal tables and bounded them only through
65- recurring cleanup tasks. v5 enforces per-cache TTLs and size limits .
67+ recurring cleanup tasks. v5 enforces per-cache TTLs.
6668
6769Metrics also move into the database. v4 recomputed point-in-time counters
6870row-by-row in Java tasks. v5 turns metrics into a proper time series,
6971computed in PostgreSQL. See
7072[ About time-series metrics] ( time-series-metrics.md ) .
7173
74+ The schema tightens constraints that v4 deferred to app code under the
75+ multi-database abstraction. Stricter constraints catch bad data at the
76+ persistence layer rather than letting it propagate silently.
77+
78+ The PostgreSQL commitment also unlocks targeted performance work:
79+ partial indexes on common query shapes, table partitioning for high-volume time-series data,
80+ and batched reads and writes to cut network and I/O overhead.
81+
7282### Policies and notification filtering in CEL
7383
74- A policy in v4 lived in the UI as a tree of click-built clauses, capped by
75- what the editor could express. v5 evaluates policies in
76- [ Common Expression Language] [ CEL ] , so a complex rule collapses to a single
77- readable expression. The same engine drives
84+ v4's policy editor provided a list of conditions with a fixed set of
85+ operators. v5 backs the same editor with a new engine that is more
86+ efficient than v4's and uses [ Common Expression Language] [ CEL ] for
87+ evaluation. An Expression condition lets operators write CEL directly
88+ when the structured conditions are not enough. The same engine drives
7889[ vulnerability policies] ( vulnerability-policies.md ) , letting operators
79- audit or suppress findings before they reach the UI or trigger a
90+ audit or suppress findings before they reach the frontend or trigger a
8091notification.
8192
8293CEL also reaches [ notifications] ( notifications.md ) . A v4 alert filtered
8394on project, tag, level, and group. A v5 alert can match on any field of
8495the notification payload through a
8596[ filter expression] ( ../reference/notifications/filter-expressions.md ) the
86- alert carries.
87-
88- ### A provider model for replaceable subsystems
89-
90- Subsystems an operator might reasonably want to swap now sit behind
91- provider interfaces. File storage ships with local and S3 backends, secret
92- managers with database and environment-variable backends, and cache with
93- in-memory and database backends. Vulnerability data sources (NVD, GitHub
94- Advisories, OSV) and analyzers (internal, OSS Index, Snyk, Trivy, VulnDB)
95- load through the same model. Choosing a provider becomes a configuration
96- decision, not a fork. See the
97- [ file storage reference] ( ../reference/configuration/file-storage.md ) for
98- the storage end of the model.
97+ alert carries. For example, an alert can fire only for vulnerabilities at
98+ or exceeding a given severity.
9999
100100### Component integrity verification
101101
@@ -111,19 +111,12 @@ shipped as a beta feature in v4 with known gaps and noticeable overhead on
111111larger portfolios. v5 closes those gaps and reworks the implementation so
112112the cost stays bounded as the project count grows.
113113
114- ### Centralised secrets
114+ ### Centralized secrets
115115
116116Credentials for integrations live in one place instead of spreading across
117117per-feature settings, behind whichever secret-manager provider the
118- deployment selects. See [ Managing secrets] ( ../guides/user/managing-secrets.md ) .
119-
120- ### A spec-first REST API v2
121-
122- v4 generated its OpenAPI specification from server-side annotations. v5
123- inverts that for a new [ v2 API] ( ../reference/api/v2.md ) : the spec becomes
124- the contract, and handlers plug into the interfaces it generates. The
125- [ legacy v1 surface] ( ../reference/api/v1.md ) stays in place for backward
126- compatibility.
118+ deployment selects. A single store simplifies auditing and rotation: you rotate a compromised
119+ credential in one place, not across scattered configuration screens. See [ Managing secrets] ( ../guides/user/managing-secrets.md ) .
127120
128121### A separate management surface
129122
@@ -152,18 +145,18 @@ remediation steps, lives in the
152145 List fields gain a ` List ` suffix, enum-like values gain a type prefix
153146 (` INFORMATIONAL ` → ` LEVEL_INFORMATIONAL ` , ` SYSTEM ` → ` SCOPE_SYSTEM ` ,
154147 ` NEW_VULNERABILITY ` → ` GROUP_NEW_VULNERABILITY ` ), and timestamps
155- normalise to a single millisecond-precision format. Templates that
148+ normalize to a single millisecond-precision format. Templates that
156149 consumed v4's ad-hoc subject objects need a rewrite.
157- * ** Search.** Endpoints under ` /api/v1/search ` go away, and fuzzy matching
158- goes with them .
150+ * ** Search.** Dependency-Track removes the endpoints under ` /api/v1/search ` ,
151+ along with fuzzy matching .
159152* ** Fuzzy vulnerability analysis.** v4's internal analyzer optionally fell back to
160153 Lucene-based fuzzy matching against the internal vulnerability database
161154 when a component lacked a CPE. Dropping Lucene removes this capability.
162- * ** Findings and SARIF.** Findings and SARIF responses change shape, and
163- the per-project findings endpoint now paginates by default. See the
164- upgrade guide.
165- * ** Removed deprecated endpoints.** Three v4-deprecated paths under
166- ` /api/v1/policy ` and ` /api/v1/tag ` go away .
155+ * ** Findings and SARIF.** Findings and SARIF responses change shape, and the per-project findings
156+ endpoint now paginates by default. See the
157+ [ upgrade guide] ( ../guides/upgrading/index.md ) .
158+ * ** Removed deprecated endpoints.** Dependency-Track removes three
159+ v4-deprecated paths under ` /api/v1/policy ` and ` /api/v1/tag ` .
167160* ** Distribution formats.** v4 shipped separate API server and frontend
168161 container images, a "bundled" container image combining both, and an
169162 executable WAR. v5 ships container images only, and drops the bundled
@@ -173,9 +166,8 @@ remediation steps, lives in the
173166 ` /mirror/nvd/* ` so other tools could use Dependency-Track as a local
174167 NVD mirror. v5 no longer persists the feed files (it has no internal
175168 use for them), and its file storage abstracts over backends like S3
176- rather than assuming a local filesystem to serve from. The endpoint is
177- removed. Consumers should fetch feeds directly from NIST or run a
178- dedicated mirror.
169+ rather than assuming a local filesystem to serve from. Dependency-Track
170+ no longer serves this endpoint. Fetch feeds directly from NIST or run a dedicated mirror.
179171
180172[ CEL ] : https://cel.dev/
181173[ Protobuf ] : https://protobuf.dev/
0 commit comments