No new container format. No viewer lock-in. The PDF travels as-is, the sidecars stay attached to the drawing revision that produced them, and bim-pdf-aware tools can extract the embedded element data, marks, levels, and IFC subset from that same file.
What BIM to PDF Means
BIM models -- whether authored in Revit or described in IFC -- carry rich structured data: element types, dimensions, materials, levels, and relationships between objects. A standard PDF export discards all of that and produces a flat drawing.
"BIM to PDF" describes the goal of exporting a BIM model into a PDF that retains queryable element data alongside the visible geometry. The result looks identical to any PDF viewer and carries the BIM layer as an invisible, additive attachment -- present for tools that know how to read it, harmless to those that do not, and harder to separate from the drawing during handoff.
bim-pdf is the open format spec that defines how that BIM data is structured, named, and embedded.
Exporting Revit and IFC BIM Data to PDF
Revit's built-in PDF export produces a flat drawing with no element data. The bim-pdf Revit add-in fills that gap: it exports a normal Revit sheet to PDF while attaching BIM elements -- walls, columns, doors, slabs, and more -- as structured JSON sidecars in the same file.
Each element carries its class (from the v1.0 registry), label, level, and mark. A spatial overlay (marks.json) links every element to its bounding box on the sheet, so downstream tools can query "which wall is at this location" without re-parsing geometry after they extract the sidecars.
IFC models map to the same element-class registry. The optional ifc-subset.json sidecar carries raw IFC entity data alongside the normalized elements.json anchor, enabling cross-tool interoperability without requiring a separate file format or container.
bim revit export PDF with data
The bim revit export command (and the matching Revit add-in button) produces a bim-pdf in one step: a compliant PDF sheet with up to six BIM sidecars embedded -- elements, marks, scales, levels, title block, and IFC subset.
Embedded BIM Metadata and IFC Elements in PDF
PDF supports file attachments through its standard EmbeddedFiles mechanism -- no format extension, no PDF structure modification. bim-pdf uses this to embed JSON sidecars alongside the page geometry.
The anchor is always elements.json: a list of every BIM element with its class, label, and provenance. Additional sidecars are optional and additive -- marks link elements to page positions, scales calibrate real-world dimensions, levels define building floors, and ifc-subset carries IFC entity data for cross-tool use.
Any PDF library that supports EmbeddedFile streams can read or write a bim-pdf. No proprietary parser, no SDK, no account required.
Open BIM PDF format
The bim-pdf spec is public and unencumbered. Any tool can produce or consume it: read the spec, embed the sidecars, and it works. The element-class registry (v1.0) is stable; new sidecars are additive and do not break existing readers.
Vendor-Neutral BIM Interchange Format
A bim-pdf file is a handoff artifact, not a proprietary export. It opens in any compliant PDF reader without plugins. The BIM data layer is additive -- removing the attachments leaves a valid, complete PDF. No viewer lock-in, no cloud round-trip, no license check.
Because the format builds on standard PDF EmbeddedFiles, it is implementation-neutral: Python, JavaScript, C#, or any language with a PDF library can produce or consume it. The JSON schemas are open, the class registry is versioned and stable, and the format carries no account or authentication dependency.
This makes bim-pdf viable as a neutral interchange format between Revit, IFC, and downstream AEC workflows -- a PDF that travels like a PDF but carries BIM data wherever it goes.
The main benefit is operational: one file travels, the sidecars stay bound to the PDF revision that generated them, and recipients do not need a parallel file-sharing convention just to keep drawing and data in sync.
Try it: free Revit add-in
See bim-pdf on your own model. The bim-pdf Revit add-in adds a bim-pdf ribbon tab with an Export button and a live sheet preview — it writes a normal PDF of your sheets with the BIM data sidecars attached: elements, marks, scales, levels and title-block metadata (the v1.0 format below), plus printed schedules as data and — on any sheet carrying a 3D view — a live glTF model embedded alongside the flat drawing. Free to use, for Revit 2025 and 2026.
💾 Download for Revit 2025 / 2026Unzip, run Install.ps1, restart Revit, then open the bim-pdf ribbon tab and click Export. The result opens in any PDF viewer — and lights up element-by-element in a bim-pdf-aware viewer.
Element Classes
Every element carries a class field drawn from the v1.0 registry. Use other with a required class_hint for anything outside the registry.
Structural
wallcurtain-wallslabfloorcolumnbeambracefooting
slab = structural deck or slab-on-grade. floor = interior finish assembly.
Envelope
roofdoorwindowcurtain-panelcurtain-mullion
Interior
ceilingroomstairramp
FF&E
furniturecaseworkequipment
Fallback
other
Requires class_hint: the producer’s native category name. MEP excluded from v1.0.
Sidecar Documents
Sidecars are JSON files embedded as PDF attachments. elements.json is the anchor; all other sidecars are optional and listed in dependency order.
README-agent.md is a reserved, recommended attachment name for agent-facing authority guidance. Producers SHOULD embed it under that exact filename so consumers that list attachments by name can surface it first.
| Filename | Purpose | Key fields |
|---|---|---|
elements.json | BIM element list + document metadata. Anchor for all other sidecars. | bim-pdf, meta (project_id, document_id, exported_at, producer), source (format, version, id_strategy), class_registry, elements[] |
marks.json | Spatial overlay linking elements to page regions. Requires elements.json. | coordinate_space, marks[] (element_id, page, bbox [x0 y0 x1 y1 in PDF points], view_type) |
scales.json | Per-page calibration. Maps PDF points to real-world units. | Keyed by 1-indexed page number. Each entry is a CalibrationScale (pixel-distance + real-distance + unit) or RatioScale (ratio + unit). |
levels.json | Building level definitions with elevation. | levels[] (id [UUID v5], name, elevation [Quantity]) |
titleblock.json | Sheet metadata plus structured sheet-info blocks for zoning, legends, notes, and tabulations. | sheets[] (legacy sheet_number/sheet_name fields plus titleblock, zoning_data_block, area_tabulation[], legend[], notes[]) |
annotations.json | Human and agent markup. Requires elements.json. | annotations[] (id, page, type [polygon/rectangle/text/callout/cloud/stamp/...], author [human|agent], created_at, element_id, style, measurement) |
ifc-subset.json | IFC data subset for cross-tool interop. Optional; omit if not available. | Raw IFC entity subset keyed by element id. Schema is open in v1.0. |
How to Implement
To produce a bim-pdf, embed sidecars as standard PDF file attachments using the PDF EmbeddedFiles names tree. Any PDF library that supports /EmbeddedFile streams works.
// Minimal elements.json
{
"bim-pdf": "1.0",
"meta": {
"project_id": "uuid-v4",
"document_id": "uuid-v4",
"exported_at": "2026-01-01T00:00:00Z",
"producer": "my-tool/1.0"
},
"source": {
"format": "revit",
"version": "2024",
"id_strategy": "revit-stable-element-id"
},
"class_registry": "1.0",
"elements": [
{ "id": "1234", "class": "wall", "label": "Exterior CMU 8\"", "level": "Level 1" }
]
}
Embed the JSON as a file attachment named exactly elements.json. Add additional sidecar files as needed. The attachment name is the sidecar identifier — do not rename.
When you need agent-facing authority guidance alongside the sidecars, embed a Markdown attachment named exactly README-agent.md. Producers SHOULD use that reserved filename for notes such as "printed sheets are contractually authoritative" so attachment-listing consumers can recognize and prioritize it consistently.
To read a bim-pdf, extract file attachments by name. No special PDF structure required beyond standard EmbeddedFiles support.
Consumers
Tools in the bim-cli ecosystem produce and consume bim-pdf files:
| Tool | Description |
|---|---|
bim revit export | Export a Revit sheet to bim-pdf — produces a PDF with 6 BIM sidecars embedded |
bim pdf pack | Embed sidecar JSON files into an existing PDF |
bim pdf extract | Extract sidecar JSON files from a bim-pdf |
bim pdf list | List embedded attachments in a PDF |
bim pdf validate | Validate a bim-pdf: schema correctness, cross-references, class registry |
bim pdfv open | Open in pdfv viewer: BIM element overlay, element panel, marks filtered by class |
Install via bimcli.com. No account required.
Format Principles
- PDF-first: any compliant PDF reader opens the file without modification.
- Additive: sidecars are attachments — removing them leaves a valid PDF.
- Stable IDs: element IDs must not change across re-exports of the same model version.
- Progressive: only
elements.jsonis required. Implement one sidecar at a time. - Open: no registry, no auth, no license. Implement it and it works.