A comprehensive, standards-harmonizing framework for implementing Digital Product Passports aligned with EU ESPR 2024/1781, schema.org, GS1, EU SEMICeu Core Vocabularies, and UN Transparency Protocol (UNTP).
Browse the live ontology at ref.openepcis.io — every class, property, and JSON-LD context shipped from this repository is published there with stable, dereferenceable URIs. The TTL files in
extensions/*/ontology/are the source of truth; the browser renders the deployed JSON.
TL;DR for decision-makers: OpenEPCIS DPP-Ready is an open-source platform that harmonises GS1, ESPR, UNTP, and CEN/CENELEC JTC 24 standards in a single codebase. Preview at v0.9.6, six regulations covered (battery, textile, EUDR, electronics, detergent, plus the cross-cutting ESPR core), with US FSMA §204 as a v0.1.0 preview. No vendor lock-in, no proprietary tooling, no translation layers. Built on GS1 Digital Link, EPCIS 2.0, and GS1 Web Vocabulary.
We believe in building in the open. The DPP standardization landscape is rapidly evolving—CEN/CENELEC JTC 24 published six of eight European standards (EN 18216, 18219, 18220, 18221, 18222, 18223) in 2026, with prEN 18239 and prEN 18246 still in development. CIRPASS2 is defining pilot requirements, and industry needs to start building now.
Rather than waiting for all standards to finalize, OpenEPCIS provides:
- Early implementation of emerging requirements from ESPR, CIRPASS2, and JTC 24
- Open-source vocabulary that evolves alongside the standards
- Practical examples that help the community understand how DPP data works
- Bridge contexts for interoperability with other initiatives
The EU Battery Regulation requires DPPs starting February 2027. Industry can't wait—we're here to help you start today.
| Count | |
|---|---|
| Modules | 10 — common/{core,interop}, eu/{battery,textile,eudr,electronics,detergent,ppwr,cpr}, us/{fsma204} |
| Classes | 120+ |
| Properties | 430+ |
| EPCIS Event Examples | 37+ |
| Bridge Contexts | 5 (UNTP, CIRPASS2, JTC 24, BatteryPass, SEMICeu Core Vocabularies) |
| Regulations Covered | 8 (ESPR, Battery Reg, EUDR, Sustainable Textiles, Electronics DAs, Detergents Reg, PPWR 2025/40, CPR 2024/3110) — plus dpp: enrichments for Right-to-Repair 2024/1799, CSDDD 2024/1760, Forced Labour 2024/3015, CRMA 2024/1252 |
OpenEPCIS DPP-Ready is organised as four stacked layers, each delegating
cross-cutting concepts downward. A new EU regulation typically adds only a
handful of truly regulation-specific terms; everything else reuses the
common-core (dpp:) vocabulary, which itself anchors upward to a
peer triumvirate of foundational vocabularies — schema.org, GS1, and
EU SEMICeu Core Vocabularies — and to upstream community profiles
(UNTP, CIRPASS-2, JTC 24).
Layer 4 ─ Regulation modules (eu/battery, eu/eudr, eu/textile,
eu/electronics, eu/detergent, eu/ppwr,
eu/cpr, us/fsma204)
↓
Layer 3 ─ Common DPP core (dpp:) cross-cutting concepts ≥2 regs share
↓ owl:equivalentClass / equivalentProperty
Layer 2 ─ Upstream community profiles
UNTP v0.7.0 Party, Facility, Material, Claim,
ConformityAttestation, PerformanceMetric, …
CIRPASS-2 D3.x; CEN/CENELEC JTC 24 (EN 18216-18223)
↓
Layer 1 ─ Foundational vocabularies (peer triumvirate)
GS1 (gs1:) Product, Organization, Place, GeoShape,
regulatoryInformation, UN/CEFACT unit codes
(imported foundation, owl:imports)
SEMICeu cv:PublicOrganisation, cv:ContactPoint,
cv:LegalEntity, cccev:Requirement,
cccev:Evidence, locn:Location, adms:Identifier
schema.org Observation, QuantitativeValue, GeoCoordinates,
Country, Rating, hasMeasurement
The rule when defining a new term: walk downward through the layers
and use the highest layer that already covers the concept. Within
Layer 1, check the three foundational vocabularies in this order:
GS1 → SEMICeu → schema.org. Mint a new IRI only when no layer below
has it. If you find yourself adding the same concept to two modules,
that's a signal it should move down to dpp:. If a dpp: term turns
out to be a SEMICeu / GS1 / schema.org duplicate, redo it and match
upstream.
Full explanation, mature regulations covered today, and what's needed to
add the next ones (CPR / ELV / Toys / Right-to-Repair / Forced Labour /
CSDDD): see docs/VOCABULARY_LAYERING.md.
| Standard | Alignment | Status |
|---|---|---|
| GS1 Web Vocabulary | Native foundation (peer Layer 1, owl:imports) |
Stable |
| EU SEMICeu Core Vocabularies (CCCEV, CPOV, Core Business / Person / Location, Core Public Event, CPSV-AP, ADMS-AP) | Native foundation (peer Layer 1, bridge context + owl:equivalentClass anchors) |
Stable |
| schema.org | Native foundation (peer Layer 1, fallback) | Stable |
| CEN/CENELEC JTC 24 | EN 18216 / 18219 / 18220 / 18221 / 18222 / 18223 (published 2026); prEN 18239 / 18246 (in development) | 6/8 published |
| UN Transparency Protocol | Property-aligned (owl:equivalentProperty) |
Stable |
| CIRPASS2 | Requirements coverage | Documented |
| ESPR 2024/1781 | Articles 7, 8, 9, 77 covered | Complete |
| EU Battery Regulation 2023/1542 | Annex XIII covered | Complete |
| EU Deforestation Regulation (EUDR) 2023/1115 | GS1 EUDR p.0.0 + extensions | Complete (timber focus) |
| EN 45552-45555 | Methodology support | Documented |
| ISO/AWI 25534-1 (ISO/TC 154, DPP Part 1) | Tracked | Early stage |
Disclaimer: This is not official GS1 guidance, but follows official GS1 standards:
The EU Ecodesign for Sustainable Products Regulation (ESPR) 2024/1781 establishes the framework for Digital Product Passports across the EU. This framework supports ESPR requirements including:
- Economic Operator Registration (Article 77) - EOID identifiers
- Performance & Durability (Article 7) - Lifespan, usage cycles
- Repairability (Article 7) - Repair scores, spare parts availability
- Substances of Concern (Article 8) - SCIP database alignment
- Access Rights (Article 9) - Public vs. authorized data
See common/core/docs/ESPR_FRAMEWORK.md for detailed ESPR guidance.
This monorepo provides a consistent, GS1-aligned approach to implementing Digital Product Passports across multiple EU regulations:
| Module | Region | Regulation | Status | Version | Last updated |
|---|---|---|---|---|---|
| common/core | Cross-cutting | ESPR 2024/1781 Framework | Preview | 0.9.6 | Apr 2026 |
| common/interop | Cross-cutting | Standards Harmonization (UNTP, CIRPASS2, JTC 24, BatteryPass) | Preview | 0.9.6 | Apr 2026 |
| eu/battery | EU | Battery Regulation 2023/1542 | Preview | 0.9.6 | Feb 2026 |
| eu/eudr | EU | Deforestation Regulation 2023/1115 | Preview | 0.9.6 | Apr 2026 (exemption pattern added) |
| eu/textile | EU | Sustainable Textiles Strategy | Preview | 0.9.6 | Mar 2026 (JRC Milestone 3 alignment) |
| eu/electronics | EU | ESPR Electronics Delegated Acts | Preview | 0.9.6 | Feb 2026 |
| eu/detergent | EU | Detergents Regulation 2026/405 | Preview | 0.9.6 | Mar 2026 |
| us/fsma204 | US | FSMA §204 Food Traceability Rule (21 CFR 1 Subpart S) | Preview | 0.1.0 | Apr 2026 (new module) |
openepcis-dpp-ready/
├── README.md # This file
├── LICENSE # Apache 2.0
├── package.json # Build scripts
├── scripts/
│ └── build-json.ts # TTL → JSON compiler
├── bruno/ # API Testing Collection
│
└── extensions/ # Region-scoped vocabulary modules
├── common/ # Cross-jurisdictional shared patterns
│ ├── core/ # DPP Core (ESPR framework, shared patterns)
│ │ ├── ontology/dpp-core.ttl
│ │ ├── context/dpp-core-context.jsonld
│ │ ├── json/dpp-core.json # Generated
│ │ └── docs/ # PATTERNS, ESPR_FRAMEWORK, GS1_STANDARDS
│ └── interop/ # UNTP / CIRPASS2 / JTC 24 / BatteryPass bridges
│ └── context/*.jsonld
│
├── eu/ # EU regulations
│ ├── battery/ # EU Battery Regulation 2023/1542
│ ├── eudr/ # EU Deforestation Regulation 2023/1115
│ ├── textile/ # EU Sustainable Textiles Strategy
│ ├── electronics/ # ESPR Electronics Delegated Acts
│ └── detergent/ # EU Detergents Regulation 2026/405
│
└── us/ # US regulations
└── fsma204/ # FDA FSMA §204 Food Traceability Rule
Each module under eu/, us/, or common/ follows the same internal layout:
VERSION, CHANGELOG.md, README.md, ontology/*.ttl, context/*.jsonld,
json/*.json (generated), examples/*.jsonld, epcis/*.jsonld,
validation/, and docs/.
git clone https://github.com/openepcis/openepcis-dpp-ready.git
cd openepcis-dpp-ready
pnpm install
pnpm run buildThen open any module's examples/ directory for JSON-LD samples, or launch the Bruno collection in bruno/digital-link-resolver/ for an end-to-end API walkthrough.
Each module registers its own https://ref.openepcis.io/extensions/...
namespace (battery:, eudr:, textile:, electronics:, detergent:,
fsma:) even when the extension contributes only a single property. The
namespace is not cosmetic — it is the switch that tells an OpenEPCIS
EPCIS Repository to activate regulation-specific behaviour on every
capture and query request that declares it via the GS1-Extensions
HTTP header (EPCIS 2.0 §12.3):
- Validation dispatches to the matching JSON Schema + SHACL shapes under
the namespace's
validation/artefacts. - Regulation-specific query endpoints and filters (e.g., "all CTEs for a TLC", "all DDS references for a GTIN") become available.
- Extension-namespaced properties inside
gs1:masterDataAvailableForblocks are resolved against the right ontology. - A stable
@contextURI keeps everyeudr:harvestDatetriple (for example) pointed at the same subject everywhere.
See extensions/common/core/docs/GS1_EXTENSIONS_HEADER.md for the full rationale.
The ontologies are maintained as TTL (Turtle) files. For web applications, JSON representations can be generated:
# Install dependencies
pnpm install
# Generate JSON files from TTL sources
pnpm run buildThis generates JSON files in each module's json/ directory:
extensions/common/core/json/dpp-core.jsonextensions/eu/battery/json/battery.jsonextensions/eu/eudr/json/eudr.jsonextensions/us/fsma204/json/fsma204.json
The ref.openepcis.io vocabulary browser uses these JSON files to display ontology information.
We welcome feedback from anyone — GS1 GO and GS1 MOs, CEN/CENELEC JTC 24 members, the newly forming ISO/IEC JTC 5 on Digital Product Passport, industry leads, implementers, and the wider open-source community. Open an issue, send a PR, or reach out directly.
The project follows a gs1: → SEMICeu (cv: / cccev: / locn: / adms: / cpsv:) → schema: → custom precedence — extension namespaces below carry only terms that none of the three foundational vocabularies covers. See EXTENSION-GOVERNANCE.md.
| Module | Namespace | Prefix |
|---|---|---|
| DPP Core | https://ref.openepcis.io/extensions/common/core/ |
dpp: |
| Interop | https://ref.openepcis.io/extensions/common/interop/ |
interop: |
| Battery | https://ref.openepcis.io/extensions/eu/battery/ |
battery: |
| EUDR | https://ref.openepcis.io/extensions/eu/eudr/ |
eudr: |
| Textile | https://ref.openepcis.io/extensions/eu/textile/ |
textile: |
| Electronics | https://ref.openepcis.io/extensions/eu/electronics/ |
electronics: |
| Detergent | https://ref.openepcis.io/extensions/eu/detergent/ |
detergent: |
| FSMA §204 | https://ref.openepcis.io/extensions/us/fsma204/ |
fsma: |
| Reused: schema.org | https://schema.org/ |
schema: |
| Reused: GS1 Web Vocabulary | https://ref.gs1.org/voc/ |
gs1: |
| Reused: SEMICeu CCCEV / CPOV / Core Business / Person / Public Event / CPSV-AP | http://data.europa.eu/m8g/ |
cv: (general) / cccev: (criterion-evidence aliases) |
| Reused: SEMICeu Core Location | http://www.w3.org/ns/locn# |
locn: |
| Reused: ADMS / ADMS-AP | http://www.w3.org/ns/adms# |
adms: |
| Reused: CPSV (legacy CPSV namespace) | http://purl.org/vocab/cpsv# |
cpsv: |
| Reused: W3C Org | http://www.w3.org/ns/org# |
org: |
| Reused: FOAF | http://xmlns.com/foaf/0.1/ |
foaf: |
All ratio and fraction properties use 0-1 decimal scale (aligned with UNTP):
{
"recycledContent": 0.45,
"massFraction": 0.15,
"verifiedRatio": 0.80
}This means:
0.45= 45%0.15= 15%0.80= 80%
See extensions/eu/battery/README.md for:
- EU Battery Regulation 2023/1542 Annex XIII compliance
- 155+ properties, 25+ classes, 22 sensor types
- 8 EPCIS event examples covering full lifecycle
See extensions/eu/eudr/README.md for:
- EU Deforestation Regulation 2023/1115 compliance
- Geolocation data for production plots
- Due diligence statement patterns
- Wood/timber focus (initial release)
See extensions/common/interop/README.md for:
- UNTP bridge context for native interoperability
- Complete property mapping tables
- CIRPASS2 requirements coverage
- Licensing and attribution documentation
See extensions/eu/textile/README.md for:
- EU Sustainable Textiles Strategy compliance
- 85+ vocabulary terms (fiber composition, care symbols, durability)
- Apparel and footwear examples
- ISO 3758 care labelling support
See extensions/eu/electronics/README.md for:
- French Repairability Index (Indice de Réparabilité)
- EU Right to Repair (A-E grades)
- WEEE Directive compliance (6 categories)
- Energy Labeling (A-G classes, EPREL)
- Software/firmware lifecycle tracking
- Multi-component DPP linking (CIRPASS-2)
A Bruno API collection is available for testing DPP workflows with the GS1 Digital Link Resolver:
# Open in Bruno app
bruno/digital-link-resolver/Features:
- Product creation: Textile (jacket, footwear), battery masterdata
- EPCIS lifecycle events: Commissioning → production → shipping → end-of-life
- Organizations: Manufacturer, retailer registration
- Resolution: GS1 Digital Link queries with linkTypes
Environments: local (localhost:8080), dev (dev.epcis.cloud with Keycloak OAuth2)
See bruno/digital-link-resolver/README.md for setup instructions.
EN 18223 converter is live at https://openepcis.github.io/openepcis-dpp-ready/ (source). It is a self-contained, client-side page that derives a CEN/CENELEC EN 18223 Digital Product Passport from GS1 Web Vocabulary + GS1 Digital Link JSON-LD. Pick a real product passport (one per EU/US regulated domain: battery, electronics, textile, deforestation, packaging, construction, detergent, food) and view it as EN 18223 expanded (Annex A) or compressed, beside the JSON-LD expansion of the input. It runs the same converter as the CLI (pnpm run derive:en18223). The derivation is explained in the EPCIS4DPP whitepaper.
pnpm run demo:en18223 # build the bundle and serve the page locallyThe core/ module provides reusable patterns aligned with ESPR across all regulations:
ESPR-Specific Patterns:
- Economic Operator ID (EOID) - EU-wide operator registration (Article 77)
- Facility Information - Manufacturing location data
- Performance & Durability - Lifespan, usage cycles (Article 7)
- Repairability - Repair scores, spare parts (Article 7)
- Substances of Concern - SCIP database alignment (Article 8)
- Access Rights - Public vs. authorized data (Article 9)
General DPP Patterns:
- Operator Information - Economic operator data structure
- Due Diligence Reports - Supply chain transparency
- Hazardous Substances - CLP Regulation compliance
- Document References - Certificates, reports, manuals
- Circularity Information - End-of-life, recycling
- Carbon Footprint - Lifecycle emissions data
See extensions/common/core/docs/PATTERNS.md for detailed documentation. See extensions/common/core/docs/ESPR_FRAMEWORK.md for ESPR-specific guidance.
Each module follows Semantic Versioning and is versioned independently. Current state:
| Module | Version | Notes |
|---|---|---|
common/core |
0.9.6 | ESPR framework + shared patterns; breaking changes bump major |
common/interop |
0.9.6 | UNTP / CIRPASS2 / JTC 24 / BatteryPass bridges |
eu/battery |
0.9.6 | Battery Regulation 2023/1542 |
eu/eudr |
0.9.6 | Deforestation Regulation 2023/1115 |
eu/textile |
0.9.6 | Sustainable Textiles |
eu/electronics |
0.9.6 | ESPR Electronics Delegated Acts |
eu/detergent |
0.9.6 | Detergents Regulation 2026/405 |
us/fsma204 |
0.1.0 | FDA FSMA §204 (preview) |
Modules declare their minimum common/core dependency in their respective README.md and CHANGELOG.md.
| Standard | Purpose |
|---|---|
| GS1 Digital Link | Product/location identifiers |
| EPCIS 2.0 | Supply chain events |
| GS1 Web Vocabulary | Semantic data model |
| CBV 2.0 | Business vocabulary |
Each module in this framework is designed as a first-class EPCIS 2.0 extension per EPCIS 2.0 Section 12.3.
gs1:masterDataAvailableFor in EPCIS events contains ONLY gs1: Web Vocabulary properties (product name, country of origin, regulatory information, etc.). Extension properties (dpp:, battery:, eudr:, textile:, electronics:, detergent:) go at event level -- as siblings of bizStep, epcList, etc.
See extensions/common/core/docs/EPCIS_MASTERDATA_AND_EXTENSIONS.md for the canonical three-angle reference (EPCIS structure, GS1 WebVoc patterns, RDF correctness).
Declare extensions using the GS1-Extensions header (per EPCIS 2.0 specification):
GS1-Extensions: dpp=https://ref.openepcis.io/extensions/common/core/, battery=https://ref.openepcis.io/extensions/eu/battery/, textile=https://ref.openepcis.io/extensions/eu/textile/| Module | GS1-Extensions Header Value |
|---|---|
| DPP Core | dpp=https://ref.openepcis.io/extensions/common/core/ |
| Battery | battery=https://ref.openepcis.io/extensions/eu/battery/ |
| EUDR | eudr=https://ref.openepcis.io/extensions/eu/eudr/ |
| Textile | textile=https://ref.openepcis.io/extensions/eu/textile/ |
| Electronics | electronics=https://ref.openepcis.io/extensions/eu/electronics/ |
| Detergent | detergent=https://ref.openepcis.io/extensions/eu/detergent/ |
| FSMA §204 | fsma=https://ref.openepcis.io/extensions/us/fsma204/ |
{
"@context": [
"https://ref.gs1.org/standards/epcis/epcis-context.jsonld",
"https://ref.openepcis.io/extensions/common/core/dpp-core-context.jsonld",
"https://ref.openepcis.io/extensions/eu/textile/textile-context.jsonld"
]
}For cleaner syntax with GS1 RegulationTypeCode values, include the optional shortcuts context:
{
"@context": [
"https://ref.openepcis.io/extensions/common/core/dpp-core-context.jsonld",
"https://ref.openepcis.io/extensions/common/core/gs1-shortcuts-context.jsonld"
],
"gs1:regulatoryInformation": {
"gs1:regulationType": "BATTERY_DIRECTIVE",
"gs1:isRegulationCompliant": true
}
}This allows "BATTERY_DIRECTIVE" instead of {"id": "gs1:RegulationTypeCode-BATTERY_DIRECTIVE"}. See extensions/common/core/context/gs1-shortcuts-context.jsonld for all available shortcuts.
See extensions/eu/eudr/docs/EPCIS_EXTENSION_GUIDE.md for detailed EPCIS integration patterns.
Use gs1:regulatoryInformation with appropriate codes:
{
"type": "gs1:RegulatoryInformation",
"gs1:regulationType": { "id": "gs1:RegulationTypeCode-BATTERY_DIRECTIVE" },
"gs1:regulatoryAct": "EU 2023/1542",
"gs1:isRegulationCompliant": true
}Available codes:
gs1:RegulationTypeCode-BATTERY_DIRECTIVEgs1:RegulationTypeCode-DEFORESTATION_REGULATIONgs1:RegulationTypeCode-ROHS_DIRECTIVEgs1:RegulationTypeCode-WEEE_DIRECTIVEgs1:RegulationTypeCode-REACH
Contributions are welcome under the Apache License 2.0. Please read CONTRIBUTING.md for the full workflow (TTL is the source of truth, GS1-first extension governance, branch and PR conventions, helper commands) and codeOfConduct.md for the project Code of Conduct.
Quick checklist before opening a PR:
- TTL ontologies validate with
rapper pnpm run buildregenerates JSON in sync- JSON-LD examples and EPCIS events validate
- Module
CHANGELOG.mdupdated
Apache License 2.0 - See LICENSE