OpenDGD v1.0 is here — get spec updates and new NCB Hazcheck tools.
OpenDGD by NCB Hazcheck
Free, open standard · v1.0

One open format for Dangerous Goods Declarations.

Free and openly licensed. Create the DGD once — every system in the chain reads it, checks it and prints the same IMDG form.

Machine-readable data catches what free text hides — misdeclared and undeclared cargo — and hands your team back the hours it spends re-keying and cross-checking.

Over 270 million dangerous goods declarations validated by Hazcheck — and counting. OpenDGD opens that same format to everyone, free, no API required.

IMDG 42-24
Latest amendment
Boxes 1–22
Full IMDG form
CC BY 4.0 · Apache 2.0
Spec and code licences
Structured data in
{
  "unNumber": "1309",
  "properShippingName": "ALUMINIUM POWDER, COATED",
  "class": ["4.1"],
  "packingGroup": "III",
  "emergencySchedule": {
    "fire": "F-G",
    "spillage": "S-G"
  },
  "packaging": {
    "numberOfPackages": 10,
    "kindOfPackages": "Steel drums"
  }
}
Box 14 out, on any system

UN 1309, ALUMINIUM POWDER, COATED, Class 4.1, PG III, EmS F-G,S-G, 10 x 1A1 Steel drum.

The problem

The form is standard. The data behind it is not.

Re-keying

Typed in again at every handover

The same declaration gets re-entered at each step. Every re-key is another chance for an error on cargo that cannot afford one.

Mismatch

Descriptions that don't agree

No two systems build box 14 the same way, so one line of goods reads differently on the shipper's copy, the forwarder's and the carrier's.

Transparency

See the data, not just the document

Structured DGDs expose the information behind the declaration, making it easier to validate, exchange and integrate with other systems.

Same input, same output

One consignment, three systems, one description.

UN 1090 ACETONE, as box 14 reads on the shipper's copy, the forwarder's and the carrier's.

Shipper's ERPDiffers

1090 Acetone cl.3 PGII FP -17 10 drums

Free text, typed by hand. No EmS, packaging code dropped.

Forwarder's portalDiffers

UN1090 ACETONE 3 / II / 10 x 1A1 / FP -17C

Different order, different separators, no EmS.

Carrier's bookingDiffers

ACETONE UN 1090 CLASS 3 PGII EmS F-E S-D

Flashpoint and packaging missing entirely.

Three readings of one consignment. Someone has to reconcile them by eye, and a dropped flashpoint or EmS is how an undeclared hazard gets aboard.

What OpenDGD is

A shared data format, and one way to render it.

01JSON Schema

The data model

A JSON Schema for a complete IMDG declaration. Every field maps to a numbered box on the IMDG form.

opendgd.schema.json
02Algorithm

Canonical rendering

A published algorithm for building box 14, so every implementation produces the same goods description from the same data.

rendering.md
03The form

One document out

The completed IMDG form is the end product. Template and algorithm are part of the standard, so the same declaration gives the same DOCX and PDF everywhere.

openapi.yaml

How it works

Describe it once. Check it. Get the form.

1

Describe the consignment

Parties, transport, container and each dangerous goods line as OpenDGD JSON, or build it in the playground.

2

Check conformance

Check it conforms to the standard for free, then validate against the full IMDG Code with a validator such as Hazcheck Validate.

3

Get the form

A completed IMDG Multimodal Dangerous Goods Form as DOCX or PDF, the same document on every implementation.

In the repository opendgd / v1.0 · CC BY 4.0 spec · Apache 2.0 code

The standard, on paper.

spec/opendgd.schema.jsonThe standard: a complete IMDG declaration as JSON Schema 2020-12.validates
spec/rendering.mdCanonical box 14 rendering algorithm, 35 ordered segments.normative
spec/form/opendgd-dgd-template.docxThe IMDG form template. The rendered document is part of the standard.normative
spec/openapi.yamlReference API: schema, conformance, docx, pdf.parses
tools/render-dgdRender library, CLI and service: fills the form, returns DOCX and PDF.apache-2.0
Dockerfile · deploy/Container image and Kubernetes manifests for the render service.deploy
examples/acetone-un1090.jsonA flammable-liquid declaration, the worked example above.validates
examples/lithium-battery-un3480.jsonA Class 9 line that exercises the special-provision path.validates
examples/radioactive-un2915.jsonA Class 7 line with radionuclide, activity, category and transport index.validates
GOVERNANCE · LICENSE · CONTRIBUTINGStewardship, the dual licence, and how to propose changes.meta

Open and free

Open format. Competitive validation.

Openly licensed

CC BY 4.0 for the spec, Apache 2.0 for the code. Use it for anything, including commercial products.

No lock-in

The core API needs no engine and no account. Host your own or use the reference service.

Public process

Proposals and changes happen in the open, with a route to neutral governance as adoption grows.

Implementations

Anyone can build one.

OpenDGD reference

api.opendgd.org

The open core service: schema, conformance, DOCX and PDF. No account, no engine.

Core · open

Your implementation here

Built something that reads or writes OpenDGD? Open a pull request to be listed.

Get involved

Help set the standard for dangerous goods declarations.

OpenDGD, an open standard from NCB Hazcheck.