Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,13 @@ pnpm run check:external # outside links; weekly in CI, not

| What | Pin | Refresh |
|---|---|---|
| Product groups and EU acts from `dpp-core` | `site/dpp-landing/core-source.json` | `pnpm --filter dpp-landing run sync:core` |
| Product groups and EU acts from `dpp-core`, with a copy of the acts in `site/dpp-docs/src/data/instruments` for the docs | `site/dpp-landing/core-source.json` | `pnpm --filter dpp-landing run sync:core` |
| API spec from `dpp-engine` | `site/dpp-docs/openapi-source.json` | `pnpm run sync:openapi`, or the nightly workflow |

Never edit the vendored files by hand; bump the pin and sync.

Never type a passport date into a page either. The docs write `<PassportDate act="<id>" />`, landing pages call `passportDateOf("<id>")`, and copy in `site/dpp-landing/src/data` writes `{passport:<id>}`. All three read the vendored acts and fail the build when an act records no date. Other regulatory dates are written beside the article that sets them.

## Releasing

`main` is what Cloudflare publishes. Its ruleset matches `dpp-core` and `dpp-engine`: pull request required, squash only, `build` must pass on an up-to-date branch, no force-push, no deletion, no bypass.
Expand Down
14 changes: 14 additions & 0 deletions site/dpp-docs/src/components/PassportDate.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
// PassportDate.astro — the date an act's passport becomes mandatory, from the
// vendored dpp-core instrument records. See src/lib/acts.ts.
import { passportDate } from '../lib/acts';

interface Props {
act: string;
short?: boolean;
}

const { act, short = false } = Astro.props;
---

{passportDate(act, short ? 'short' : 'long')}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ description: Every EU act and standard the Odal Node code relies on, the article
---

import { Aside } from "@astrojs/starlight/components";
import PassportDate from "../../../components/PassportDate.astro";

This is the reference behind the website's [regulations page](https://odal-node.io/regulations): every EU act and standard the code cites, grouped by what the software does with it, with the articles it relies on, and then the acts it does not apply yet but is preparing for.

Expand All @@ -17,12 +18,12 @@ These are records in the core library's instrument catalog, and the website's re

| Act | Passport provision the catalog rests on |
|---|---|
| Batteries Regulation (EU) 2023/1542 | Art. 77(1), from 18 February 2027; access by Art. 77(2) and Annex XIII |
| Batteries Regulation (EU) 2023/1542 | Art. 77(1), from <PassportDate act="battery-reg-2023-1542" />; access by Art. 77(2) and Annex XIII |
| Ecodesign for Sustainable Products Regulation (EU) 2024/1781 | Art. 9(1), dated act by act through delegated acts; access by Art. 11(b) |
| Construction Products Regulation (EU) 2024/3110 | Art. 22(7): 18 months after the Art. 75(1) delegated act, not yet adopted |
| Detergents Regulation (EU) 2026/405 | Art. 21(1), applying from 23 September 2029 (Art. 37); transition in Art. 36(2) |
| Toy Safety Regulation (EU) 2025/2509 | Art. 19(1), applying from 1 August 2030 (Art. 59) |
| End-of-Life Vehicles Regulation (EU) 2026/1738 | Art. 13(1): a vehicle passport from 1 September 2032 |
| Detergents Regulation (EU) 2026/405 | Art. 21(1), applying from <PassportDate act="detergents-2026-405" /> (Art. 37); transition in Art. 36(2) |
| Toy Safety Regulation (EU) 2025/2509 | Art. 19(1), applying from <PassportDate act="toy-safety-2025-2509" /> (Art. 59) |
| End-of-Life Vehicles Regulation (EU) 2026/1738 | Art. 13(1): a vehicle passport from <PassportDate act="elv-2026-1738" /> |
| Delegated Regulation (EU) 2026/296 and Implementing Regulation (EU) 2026/2 | No passport: the unsold-goods destruction derogations and disclosure format |
| Regulations (EU) 2023/1670 and 2023/1669 | No passport: product information goes to EPREL |
| Packaging and Packaging Waste Regulation (EU) 2025/40 | No passport: a shared data carrier only |
Expand Down
6 changes: 4 additions & 2 deletions site/dpp-docs/src/content/docs/regulatory/battery.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ title: Battery DPP
description: The EU Battery Regulation (EU 2023/1542), what a battery passport carries under Annex XIII, the supply-chain due-diligence record, and which checks are binding today.
---

import PassportDate from "../../../components/PassportDate.astro";

The Battery Regulation (EU 2023/1542) is the first product-group regulation to require a Digital Product Passport in production. Article 1(3) applies it to five categories of battery, and only five: portable, starting-lighting-ignition (SLI), light means of transport (LMT), electric vehicle (EV) and industrial. The list is closed on purpose: where a battery could fall under more than one category, the strictest requirements apply, and that rule only works over a closed list. Stationary energy-storage systems are not a sixth category; the Regulation places them under industrial. The regulation is already in force, and some of its staged dates have already passed.

## Which batteries need a passport

Not all five. **Art. 77(1)**: from 18 February 2027, each LMT battery, each industrial battery with a capacity greater than 2 kWh and each electric-vehicle battery placed on the market or put into service must have a battery passport. Portable and SLI batteries, and industrial batteries of 2 kWh or less, do not. Under **Art. 77(8)** the passport ceases to exist once the battery has been recycled.
Not all five. **Art. 77(1)**: from <PassportDate act="battery-reg-2023-1542" />, each LMT battery, each industrial battery with a capacity greater than 2 kWh and each electric-vehicle battery placed on the market or put into service must have a battery passport. Portable and SLI batteries, and industrial batteries of 2 kWh or less, do not. Under **Art. 77(8)** the passport ceases to exist once the battery has been recycled.

## What the regulation requires

Expand All @@ -31,7 +33,7 @@ The Battery Regulation is in force, but its requirements start in stages, and Od
- **Declared now, binding later**: the minimum recycled-content shares for cobalt, lithium, nickel and lead, set by Art. 8(2) and 8(3) and cross-referenced to Annex VIII. (Annex X is the due-diligence raw-materials list and has nothing to do with recycled content.) These are final law but only take effect in 2031, rising again in 2036, so today they are shown as advisory rather than as a pass or fail.
- **Waiting for a delegated act**: minimum electrochemical performance and durability values, empowered by Art. 10(5), and the carbon-footprint performance class under Art. 7(2). Art. 7(2) requires the label to declare a class but leaves the classes themselves to an act that has not been adopted, and requires the scale to be revised every three years. Neither the classes nor how many there will be is settled, and we do not guess.

The passport itself becomes mandatory on **18 February 2027**. As each later requirement takes effect, the battery checks are extended to cover it, and passports already issued stay valid. Every product group follows the same approach of giving a binding verdict only where the law applies; see [ESPR Overview](/regulatory/espr).
The passport itself becomes mandatory on **<PassportDate act="battery-reg-2023-1542" />**. As each later requirement takes effect, the battery checks are extended to cover it, and passports already issued stay valid. Every product group follows the same approach of giving a binding verdict only where the law applies; see [ESPR Overview](/regulatory/espr).

## Who may read which part

Expand Down
3 changes: 2 additions & 1 deletion site/dpp-docs/src/content/docs/regulatory/detergents.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ description: What the Detergents Regulation (EU) 2026/405 requires of a detergen
---

import { Aside } from "@astrojs/starlight/components";
import PassportDate from "../../../components/PassportDate.astro";

The Detergents Regulation (EU) 2026/405 creates a passport for detergents and end-user surfactants. It replaces Regulation (EC) No 648/2004 and is built on the same passport regime as the [toy passport](/regulatory/toys).

## When

- **The passport applies from 23 September 2029**, when the Regulation applies (Art. 37; only Art. 4(3) and (4) apply earlier).
- **The passport applies from <PassportDate act="detergents-2026-405" />**, when the Regulation applies (Art. 37; only Art. 4(3) and (4) apply earlier).
- **Transition** (Art. 36):
- Products that meet the old Regulation and are placed on the market **before** 23 September 2029 may continue to be made available indefinitely.
- Products that meet the old Regulation and are placed on the market **between 23 September 2029 and 22 September 2030** may be made available until 23 September 2030. For that year, a detergent can be placed on the market without a passport.
Expand Down
9 changes: 5 additions & 4 deletions site/dpp-docs/src/content/docs/regulatory/espr.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ description: The Ecodesign for Sustainable Products Regulation, what it requires
---

import { Aside } from "@astrojs/starlight/components";
import PassportDate from "../../../components/PassportDate.astro";

The Ecodesign for Sustainable Products Regulation (ESPR, EU 2024/1781) is the framework regulation that sets up the Digital Product Passport requirement across the European Union. It entered into force in 2024. **No delegated act under Article 4 has yet been adopted for any product group**, so ESPR itself obliges nobody to issue a passport today: the framework is in force, but the obligations that depend on it are not. The passport obligations that do have dates come from other acts: the Battery Regulation from 18 February 2027, the Detergents Regulation from 23 September 2029 and the Toy Safety Regulation from 1 August 2030. The Construction Products Regulation requires a passport too, but Art. 22(7) dates it 18 months after the Commission's delegated act setting up the construction passport system (Art. 75(1)), and that act has not been adopted.
The Ecodesign for Sustainable Products Regulation (ESPR, EU 2024/1781) is the framework regulation that sets up the Digital Product Passport requirement across the European Union. It entered into force in 2024. **No delegated act under Article 4 has yet been adopted for any product group**, so ESPR itself obliges nobody to issue a passport today: the framework is in force, but the obligations that depend on it are not. The passport obligations that do have dates come from other acts: the Battery Regulation from <PassportDate act="battery-reg-2023-1542" />, the Detergents Regulation from <PassportDate act="detergents-2026-405" /> and the Toy Safety Regulation from <PassportDate act="toy-safety-2025-2509" />. The Construction Products Regulation requires a passport too, but Art. 22(7) dates it 18 months after the Commission's delegated act setting up the construction passport system (Art. 75(1)), and that act has not been adopted.

## What ESPR requires

Expand Down Expand Up @@ -45,15 +46,15 @@ ESPR is a framework. The binding detail comes in delegated acts for each product

| Product group | Regulatory basis | Status today |
|---|---|---|
| [**Batteries**](/regulatory/battery) | Regulation (EU) 2023/1542 | Passport required from 18 Feb 2027 for EV, LMT and industrial batteries over 2 kWh; substance limits enforced now |
| [**Batteries**](/regulatory/battery) | Regulation (EU) 2023/1542 | Passport required from <PassportDate act="battery-reg-2023-1542" short /> for EV, LMT and industrial batteries over 2 kWh; substance limits enforced now |
| [**Textiles**](/regulatory/textile) | ESPR | No delegated act; indicative adoption 2027. Structural validation only |
| **Iron and steel** | ESPR | No delegated act; first in the working plan, indicative adoption 2026 |
| **Aluminium** | ESPR | No delegated act; indicative adoption 2027. Carbon checks use reference values as warnings only |
| **Tyres** | ESPR; Tyre Labelling Regulation (EU) 2020/740 | No delegated act; indicative adoption 2027. Label classes in force |
| **Furniture** · **Mattresses** | ESPR | No delegated act; indicative adoption 2028 and 2029 |
| [**Phones and tablets**](/regulatory/phones) | Regulations (EU) 2023/1670 and 2023/1669 (ecodesign and energy labelling, not ESPR) | In force since 20 Jun 2025; no passport, product information goes to EPREL |
| [**Toys**](/regulatory/toys) | Regulation (EU) 2025/2509 | Passport required from 1 Aug 2030, a date set by the Toy Safety Regulation itself |
| [**Detergents**](/regulatory/detergents) | Regulation (EU) 2026/405 | Passport required from 23 Sep 2029, with a one-year transition for products meeting the old rules |
| [**Toys**](/regulatory/toys) | Regulation (EU) 2025/2509 | Passport required from <PassportDate act="toy-safety-2025-2509" short />, a date set by the Toy Safety Regulation itself |
| [**Detergents**](/regulatory/detergents) | Regulation (EU) 2026/405 | Passport required from <PassportDate act="detergents-2026-405" short />, with a one-year transition for products meeting the old rules |
| [**Construction products**](/regulatory/construction) | Regulation (EU) 2024/3110 | Passport owed 18 months after the Commission's delegated act setting up the construction passport system (Art. 22(7), Art. 75(1)), not yet adopted. Operator owes 10 years of availability, the passport *system* 25 |

Each linked group has its own page, [Vehicle passport](/regulatory/vehicles) covers the separate regime for vehicles, and [Acts and standards](/regulatory/acts-and-standards) lists every act the code relies on.
Expand Down
3 changes: 2 additions & 1 deletion site/dpp-docs/src/content/docs/regulatory/toys.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ description: What the Toy Safety Regulation (EU) 2025/2509 requires of a toy pas
---

import { Aside } from "@astrojs/starlight/components";
import PassportDate from "../../../components/PassportDate.astro";

The Toy Safety Regulation (EU) 2025/2509 creates a passport for every toy placed on the EU market. Its date is set by the Regulation itself, not by a later act.

## When

- **In force** since 1 January 2026. Articles 28 to 44 and 49 to 55 already apply, including the Commission's power to set the passport's technical requirements (Art. 49).
- **The passport applies from 1 August 2030**, when the rest of the Regulation applies (Art. 59).
- **The passport applies from <PassportDate act="toy-safety-2025-2509" />**, when the rest of the Regulation applies (Art. 59).
- Toys placed on the market under the Toy Safety Directive 2009/48/EC before that date may still be made available afterwards (Art. 57(1)).

## What it requires
Expand Down
27 changes: 27 additions & 0 deletions site/dpp-docs/src/data/instruments/battery-reg-2023-1542.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"id": "battery-reg-2023-1542",
"title": "Batteries Regulation (EU) 2023/1542",
"celex": "32023R1542",
"kind": "direct",
"status": "adopted",
"currency": { "state": "consolidated", "asOf": "02023R1542-20260813", "checkedOn": "2026-09-11" },
"passport": {
"obligation": "required",
"from": { "date": "2027-02-18", "basis": "sourced" }
},
"retentionYears": 10,
"retentionYearsBasis": "assumed",
"productGroups": [
{
"productGroup": "battery",
"status": "in_force",
"legalBasis": [
"Regulation (EU) 2023/1542 Art. 77(1)",
"Regulation (EU) 2023/1542 Art. 9",
"Regulation (EU) 2025/1561"
],
"notes": "In force and determinable today even though the passport is future-dated: the Art. 9 mercury and cadmium prohibitions have applied since 2008, carried forward from Directive 2006/66/EC. Scope of the passport obligation is EV, LMT and industrial batteries over 2 kWh. Reg. (EU) 2025/1561 moved the Art. 48(1) due-diligence trigger to 2027-08-18 and the Art. 48(5) Commission guidelines deadline to 2026-07-26. Major obligations remain future-dated: Art. 10(2) minimum performance values from 2027-08-18, Art. 8(1) recycled-content declaration from 2028-08-18, Art. 8(2) minimum shares from 2031-08-18. retentionYears is assumed, not sourced: the Regulation's 10-year figures are documentation retention — technical documentation, EU declaration of conformity, audit reports — not passport availability, which sits with Art. 77 and the unadopted Art. 77(9) implementing act."
}
],
"notes": "The clearest case for separating instrument status from binding status, and passport date from determinability: the act is adopted, its obligations bind now, and its passport is owed from 2027-02-18. retentionYears is assumed, not sourced — the Regulation's 10-year figures are documentation retention (technical documentation, EU declaration of conformity, audit reports), not passport availability, which sits with Art. 77 and the unadopted Art. 77(9) implementing act. Granularity is deliberately unset: the EU registry treats batteries as item-level, but that is the registry's operational position from its user guide, not a level fixed by an adopted act."
}
20 changes: 20 additions & 0 deletions site/dpp-docs/src/data/instruments/cpr-2024-3110.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"id": "cpr-2024-3110",
"title": "Construction Products Regulation (EU) 2024/3110",
"celex": "32024R3110",
"kind": "direct",
"status": "adopted",
"currency": { "state": "inForce", "checkedOn": "2026-09-11" },
"passport": { "obligation": "required" },
"productGroups": [
{
"productGroup": "construction",
"status": "provisional",
"legalBasis": ["Regulation (EU) 2024/3110 Art. 75"],
"retentionYears": 10,
"retentionYearsBasis": "sourced",
"notes": "retentionYears is sourced: the Regulation imposes 10 years on the economic operator. In force since 2025-01-07 and applicable in stages from 2026-01-08, but the per-product duty depends on harmonised technical specifications plus delegated and implementing acts, so nothing is determinable. The 18 months is Art. 22(7), counted from the delegated act that sets up the passport system; the expectation that the system is in place in principle by end 2027 is secondary-sourced, and no delegated act exists, which is why the instrument carries no passport date. WRONG AXIS, to be re-homed: the CPR uses 'product group' zero times and defines product family, then product category, then product type, with its own Annex VII family list. This binding keeps the existing catalog key so nothing breaks; re-homing it is a later step and needs CPR Annex VII read first."
}
],
"notes": "A real passport instrument, unlike the electronics pair — Art. 75 creates a construction DPP outright. Its first expected product families are rebar, cement, doors and windows with their hardware, and thermal insulation, of which our existing product-category list carries only cement. The passport is undated because the text dates it against an act that does not exist yet. Art. 22(7): 'By 18 months after the entry into force of the delegated act referred to in Article 75(1) the manufacturer shall make available a digital product passport referred to in Article 76'. Art. 75(1) leaves that delegated act, which sets up the construction DPP system, to the Commission, and none has been adopted. Once it is, the date is its entry into force plus 18 months, sourced from both articles. Two dates that are not the passport date. 8 January 2026 is Art. 96's general application date: Arts. 75 and 76 apply from that day, but Art. 22(7) is what says when a manufacturer owes a passport, and it points past Art. 96; this record carried 2026-01-08 as a sourced passport date until that was found. And 8 January 2027 is Art. 96's date for Art. 92, which is Penalties."
}
Loading
Loading