Digital Product Passport (DPP)
The Digital Product Passport (DPP) is a cornerstone of the European Union's Sustainable Products Regulation (ESPR), enabling transparency and traceability across product lifecycles. This guide covers DPP concepts, data structures, and implementation patterns.
Overviewโ
What is a DPP?โ
A Digital Product Passport is a standardized, machine-readable document that contains environmental, circularity, and compliance information about a manufactured product. The ESPR regulation mandates DPPs for specific product categories to promote sustainability and informed consumption.
Key Facts:
- Regulation: EU Sustainable Products Regulation (ESPR), part of the Circular Economy Action Plan
- Effective Date: 19 July 2026 (General rules)
- Scope: Battery, textile, electronics, construction, steel, furniture, chemicals, and general products
- Purpose: Enable consumers, businesses, and regulators to assess environmental impact and material composition
- Format: Standardized data model with category-specific extensions
Timelineโ
- July 2026: DPP Registry launches; general ESPR rules take effect
- February 2027: Battery Passport requirements become mandatory
- Q2 2027: Textile Passport requirements become mandatory
- Future: Additional categories (construction products, steel, furniture) phased in
Core Data Structuresโ
DPPMetadata Interfaceโ
The foundational data class representing a Digital Product Passport:
interface DPPMetadata {
productId: string; // Unique product identifier (GTIN/UPCC)
productName: string; // Human-readable product name
manufacturer: string; // Economic operator/manufacturer name
countryOfOrigin: string; // ISO 3166-1 alpha-2 country code
category: DPPCategory; // Product category classification
carbonFootprint: number; // kg COโe per functional unit
recycledContent: number; // Percentage (0-100)
durabilityYears: number; // Expected product lifespan
repairabilityScore: number; // 0-10 scale, 10 = most repairable
substancesOfConcern: SubstanceInfo[]; // SVHC and regulated substances
conformityDeclarations: Declaration[];// EU compliance declarations
sectorData: object; // Category-specific extensions
}
DPPCategory Enumerationโ
enum DPPCategory {
BATTERY = "battery",
TEXTILE = "textile",
ELECTRONICS = "electronics",
CONSTRUCTION = "construction",
STEEL = "steel",
FURNITURE = "furniture",
CHEMICAL = "chemical",
GENERAL = "general"
}
BatteryPassportDataโ
Battery-specific passport information required by Battery Regulation (EU) 2023/1542:
interface BatteryPassportData {
// Chemistry and composition
chemistry: "lithium-ion" | "lead-acid" | "nickel-metal-hydride" | "other";
capacityKwh: number; // Nominal energy content
// State and performance
stateOfHealth: number; // 0-100%, current condition
cycleCount: number; // Number of full charge cycles
expectedLifetimeCycles: number; // Design specification
// Material content
cobaltContent: number; // % by mass
lithiumContent: number; // % by mass
nickelContent?: number; // % by mass (if present)
leadContent?: number; // % by mass (if present)
// Recycled content
recycledCobaltPercent: number; // % of cobalt from recycled sources
recycledLithiumPercent: number; // % of lithium from recycled sources
recycledNickelPercent?: number; // % of nickel from recycled sources
recycledLeadPercent?: number; // % of lead from recycled sources
// Classification and lifecycle
carbonClass: "A" | "B" | "C" | "D" | "E" | "F" | "G"; // EU Carbon Footprint Regulation
dueDiligenceUrl?: string; // Link to conflict minerals declaration
}
TextilePassportDataโ
Textile-specific passport information:
interface TextilePassportData {
// Composition
fiberComposition: FiberInfo[]; // List of fibers and percentages
// Manufacturing
processes: ProcessInfo[]; // Finishing and treatment processes
waterUsageLiters: number; // Per kg of product
// Environmental impact
microfiberRelease: number; // mg per wash cycle (microplastics)
// User guidance
careInstructions: string; // Washing/care recommendations
}
interface FiberInfo {
name: string; // e.g., "cotton", "polyester", "silk"
percentage: number; // 0-100
type: "natural" | "synthetic" | "regenerated" | "animal";
}
interface ProcessInfo {
name: string; // e.g., "bleaching", "dyeing", "waterproofing"
stage: "preparation" | "coloration" | "finishing";
}
Core Functionsโ
buildDPPConfig / build_dpp_configโ
Converts DPPMetadata into an API-ready format with validation:
- TypeScript
- Python
import { DPPMetadata, DPPCategory, buildDPPConfig } from '@heimdall/dpp';
const metadata: DPPMetadata = {
productId: "08714043123452",
productName: "Eco Battery Pack 5000mAh",
manufacturer: "Green Energy Corp",
countryOfOrigin: "DE",
category: DPPCategory.BATTERY,
carbonFootprint: 2.5,
recycledContent: 35,
durabilityYears: 5,
repairabilityScore: 7,
substancesOfConcern: [
{
substanceId: "7440-38-2", // Cobalt CAS number
name: "Cobalt",
concentration: 8.5,
status: "SVHC"
}
],
conformityDeclarations: [
{
regulation: "Directive 2014/30/EU",
conformityMarked: true,
testingDate: "2025-11-15"
}
],
sectorData: {
chemistry: "lithium-ion",
capacityKwh: 0.018,
stateOfHealth: 100,
cycleCount: 0,
cobaltContent: 8.5,
lithiumContent: 4.2,
recycledCobaltPercent: 20,
recycledLithiumPercent: 15,
carbonClass: "B"
}
};
const dppConfig = buildDPPConfig(metadata);
console.log(dppConfig);
// Output includes: standardized fields, API endpoints, validation schema
from heimdall.dpp import (
DPPMetadata, DPPCategory, SubstanceInfo, Declaration,
build_dpp_config
)
metadata = DPPMetadata(
product_id="08714043123452",
product_name="Eco Battery Pack 5000mAh",
manufacturer="Green Energy Corp",
country_of_origin="DE",
category=DPPCategory.BATTERY,
carbon_footprint=2.5,
recycled_content=35,
durability_years=5,
repairability_score=7,
substances_of_concern=[
SubstanceInfo(
substance_id="7440-38-2",
name="Cobalt",
concentration=8.5,
status="SVHC"
)
],
conformity_declarations=[
Declaration(
regulation="Directive 2014/30/EU",
conformity_marked=True,
testing_date="2025-11-15"
)
],
sector_data={
"chemistry": "lithium-ion",
"capacity_kwh": 0.018,
"state_of_health": 100,
"cycle_count": 0,
"cobalt_content": 8.5,
"lithium_content": 4.2,
"recycled_cobalt_percent": 20,
"recycled_lithium_percent": 15,
"carbon_class": "B"
}
)
dpp_config = build_dpp_config(metadata)
print(dpp_config)
validateDPPMetadata / validate_dpp_metadataโ
Validates required fields and data constraints per category:
- TypeScript
- Python
import { validateDPPMetadata, ValidationError } from '@heimdall/dpp';
try {
const errors = validateDPPMetadata(metadata, DPPCategory.BATTERY);
if (errors.length === 0) {
console.log("โ DPP metadata is valid");
} else {
errors.forEach(error => {
console.error(`Field "${error.field}": ${error.message}`);
// e.g., Field "capacityKwh": Must be greater than 0
});
}
} catch (error) {
if (error instanceof ValidationError) {
console.error("Validation failed:", error.message);
}
}
from heimdall.dpp import validate_dpp_metadata, ValidationError
try:
errors = validate_dpp_metadata(metadata, DPPCategory.BATTERY)
if not errors:
print("โ DPP metadata is valid")
else:
for error in errors:
print(f'Field "{error.field}": {error.message}')
except ValidationError as e:
print(f"Validation failed: {e}")
Category Requirementsโ
Each DPP category enforces specific required fields:
| Category | Required Core Fields | Additional Sector Data |
|---|---|---|
| Battery | capacityKwh, chemistry, cobaltContent, lithiumContent, carbonClass | stateOfHealth, cycleCount, expectedLifetimeCycles, recycledContent % |
| Textile | fiberComposition, waterUsageLiters, microfiberRelease | processes, careInstructions |
| Electronics | hazardousSubstances, energy consumption, EPREL registration | material list, repairability |
| Construction | material composition, fire rating, durability classification | embodied carbon, recyclability |
| Steel | steel grade, carbon content, recycled percentage | melting process, mechanical properties |
| Furniture | material list, hazardous substances, durability testing | disassembly instructions |
| Chemical | SDS reference, hazard classification, safety data | intended use, concentration |
| General | productName, manufacturer, carbonFootprint | recycledContent, durabilityYears |
Best Practicesโ
1. Data Completenessโ
Always populate required fields for your product category. Use validateDPPMetadata before submission to catch errors early.
2. Substances of Concernโ
Maintain an up-to-date list of substances regulated under REACH and other legislation. Include CAS numbers for accuracy.
3. Conformity Documentationโ
Link to actual test reports and certificates. The EU may require evidence during inspections.
4. Sector-Specific Dataโ
Leverage category-specific fields to provide transparency. For batteries, state-of-health and recycled content percentages are highly valued by consumers.
5. Carbon Footprintโ
Use Product Category Rules (PCRs) from environmental product declarations (EPDs) for consistency.
Related Documentationโ
- DPP Access Control โ Learn about visibility tiers
- EPCIS 2.0 Integration โ Map DPP provenance to supply chain events
- EU ESPR Regulation โ https://eur-lex.europa.eu/eli/reg/2023/2426/oj
- Battery Regulation (EU) 2023/1542 โ https://eur-lex.europa.eu/eli/reg/2023/1542/oj