BIM Open Schema

An open specification that stores a building model, including its 3D geometry, as plain tables. A .bos file is a zip of Parquet files, so the model opens in pandas, DuckDB, Power BI, or any tool that reads columnar data, with no vendor's API in the way.

Get the exporter and sample files

What is in the repository

The reference implementation in .NET, with readers, writers, IFC conversion, DuckDB loading, and tests, is BIM Open Data.

The tables

Every .bos archive holds these Parquet files. The non-geometry tables describe what the building contains; the geometry tables describe what it looks like. Rename the file to .zip to look inside with any archive tool.

FileHolds
Entities.parquet dataOne row per entity: an element, a type, a category, a level, a room, a material, or a document, with a name and an index into its category and type
Descriptors.parquet dataParameter definitions: name, units, group, and the value's type
Parameters.parquet dataOne row per parameter value: which entity, which descriptor, and an index into the value table for its type
Strings.parquet, Numbers.parquet, Points.parquet dataThe value tables that parameters point into, so each value is stored once
Documents.parquet dataThe source files the entities came from
Relations.parquet dataTyped edges between entities: part of, member of, contained in, hosted by, has material, connects to, bounded by, and more
Diagnostics.parquet dataMessages the exporter recorded while producing the file
Instances.parquet, Transforms.parquet geometryEach placed instance with its entity, mesh, material, and a hidden flag; transforms as translation, quaternion, and scale
Meshes.parquet, VertexBuffer.parquet, IndexBuffer.parquet geometryTriangle meshes as flat vertex and index buffers, shared between instances
Materials.parquet geometryRed, green, blue, alpha, roughness, and metallic for each material, one byte each

How the specification is written

Five C# files define the tables and nothing else. BimOpenSchema.cs holds the entity, descriptor, parameter, document, and relation records and the enums for parameter and relation types. BimGeometry.cs holds the geometry tables. BimData.cs and BimGeometryTableName.cs name the tables an archive contains. CommonRevitParameters.cs lists the parameter names a Revit export produces, so a reader can find a door's width without guessing. source-code.md explains how to build the project and how to change a table.

Principles