Skip to main content

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:

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

validateDPPMetadata / validate_dpp_metadataโ€‹

Validates required fields and data constraints per category:

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);
}
}

Category Requirementsโ€‹

Each DPP category enforces specific required fields:

CategoryRequired Core FieldsAdditional Sector Data
BatterycapacityKwh, chemistry, cobaltContent, lithiumContent, carbonClassstateOfHealth, cycleCount, expectedLifetimeCycles, recycledContent %
TextilefiberComposition, waterUsageLiters, microfiberReleaseprocesses, careInstructions
ElectronicshazardousSubstances, energy consumption, EPREL registrationmaterial list, repairability
Constructionmaterial composition, fire rating, durability classificationembodied carbon, recyclability
Steelsteel grade, carbon content, recycled percentagemelting process, mechanical properties
Furniturematerial list, hazardous substances, durability testingdisassembly instructions
ChemicalSDS reference, hazard classification, safety dataintended use, concentration
GeneralproductName, manufacturer, carbonFootprintrecycledContent, 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.