OpenEik.org

Draft OpenEik 0.4.0: draft, not final. From commit 9077aa6c of 1 November 2026. Errata: the errata of 0.4. Raw text: /spec/0.4/index.md. Earlier: OpenEik 0.1, OpenEik 0.2, OpenEik 0.3, kept as they were.

On this page

OpenEik 0.2: the specification

Version0.4.0
Date1 November 2026
StatusTagged v0.4.0 on 1 November 2026, privately until the public launch. OpenEik 0.3 is kept at the tag v0.3.0, 0.2 at the tag v0.2.0 and its patch versions to v0.2.3, and 0.1 at v0.1.0 and v0.1.1; a reader of 0.4 reads each of them (Part I, 9.6, rule 3)
Reference implementationStomra's engine and its ek command: the text written from commit ff8574ec (11 October 2026) and kept in step with it since; the schemas generated from commit de6f0d04, its main of 30 October 2026
LicenceCC-BY-4.0 for this text, with a royalty-free patent commitment under OWFa 1.0 (PATENTS.md); CC0-1.0 for the schemas and the examples; Apache-2.0 for the tools and packages

OpenEik is an open building model laid out as a code base. A building is a folder of small JSON records in meaningful paths: one record per file, types and references in place of interfaces and imports, a compiler that derives bodies and quantities from the records, typed commands that are checked before anything changes, versions with diffs and merges, and an interface for AI agents. IFC is an export, not the base.

This specification is written from the reference implementation. Where the implementation and the specification plan differ, this text follows the implementation and says so in Open questions and changes from the plan.

Contents

PartFileWhat it fixes
IFoundationsScope, conformance language, units and axes, level semantics, ids, references, versions, errata and deprecation, unknown members, extensions
IILanguageThe records: project, levels, materials, types and layers, elements by category, views, the framing expression language, profiles, application records, a supplier's declared geometry, railings for product systems; heating, ventilation and plumbing: systems, insulation, heat, components in a pipe, and their views' filters, frames, tags and symbols
IIICode baseThe folder: layout, folders that follow owners, file kinds, the stored form, hashes, kept files, reading and writing, the single-file form, its file extension and media type
IVCompilerWhat is derived and never stored; the geometric rules it fixes, doors' and windows' frames, stairs, timber framing, trusses and joists, and rooms among them; the structural subset; reference behaviour; declared geometry and railing lines
VCommandsTyped writes: the command set, preconditions, validation, batches, dry runs, answers, determinism
VIHistoryObjects, trees, versions and refs; diff; three-way merge by record and field; remotes, push and pull; applications' results and proposals
VIIAgent interfaceThe contract for agents: tree, tiered reads, the filter, budgets, honesty fields, the write loop, the guide, the headless host
VIIIBridgesIFC and other exports; reading IFC once to start a project
ConformanceThe conformance classes and what each must do
Open questions and changes from the planWhere the implementation and the plan differ, and what is still open
Security and privacy considerationsPersonal data in models and their history, agents, trust in results and proposals, what hashes guarantee, paths, resource limits, kept files, credentials, schemas
Terminology and referencesThe terms the text defines and where each is defined; the normative and informative references
XIIIElectrical installationsDevices and boards, circuits, feed chains, control, cable carriers and modelled cables
XIVDrawingsSheets, the provenance of annotations, the drawing profile, people and keys, issued drawings in a restricted SVG, revisions, read sets and freshness, revision clouds, the register, issues, reviews, sign-offs and the PDF rendition
XVAssetsBinary files kept by the SHA-256 of their bytes, as pointers in versions with the bytes beside them; their kinds and limits; stores, push, fetch, pull and clone; withheld assets; references; security and privacy
XVIOwnershipThe parties of a project and the paths each owns, in project/owners.json; globs and the last matching rule; the approvals a change needs, and what a host and a tool do
XVIICommands with an envelopeThe envelope around a batch (an operation id, who sends it, the target and its base, the mode, the intent); refusals with codes, JSON pointers into the command and fixes; a precondition on every command; the answer; security and privacy
XVIIIReview and issueA review round on a version of the model in 3D, with viewpoints; an issue that releases a version and names its prints; an issue signed by its sender and its recipients; a host's signed receipt, and the keys a host publishes for it; terms accepted; prints that say they are prints, an IFC naming its version

The machine-readable parts are beside this text:

Conventions of this text

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY and OPTIONAL are to be interpreted as described in BCP 14 (RFC 2119, RFC 8174) when, and only when, they appear in all capitals, as shown here.

  • A section marked informative states no requirement. Everything else is normative.
  • "Reference:" after a rule names the part of the reference implementation that shows it, by file and function. The rule is the requirement; the reference is evidence, and where the two disagree the disagreement is recorded in Open questions and changes from the plan.
  • Paths are written with /. <id> in a path is the record's id as a path segment (Part III, "Path segments").
  • JSON member names are written in code. "Absent" means the member is not present; OpenEik does not use null as a stored value except where a schema says so.
  • Examples use the folder in examples/one-storey-house unless they say otherwise.

Who this is for