All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2026-06-30
Initial release.
Added
- Generated type modules (
SchemaOrg.*) — 1000+ structs, one per Schema.org Class. Each is a plain struct (one field per valid property, direct + inherited) plus anew/0constructor. Build with struct literals (%SchemaOrg.Product{name: "X", offers: %SchemaOrg.Offer{price: 1.0}}) — fields auto-complete in the editor and the compiler rejects invalid ones. A field is untyped, so it accepts Schema.org's loose value model directly: a scalar or a nested struct, a single value or a list. Produced by the maintainer-onlymix schema_org.build_typestask and committed as reviewable artifacts; never hand-edited. - Runtime serialiser —
SchemaOrg.to_json_ld/1(encoded JSON-LD string with top-level@context) andSchemaOrg.to_map/1(bare map for embedding/tests). Recurses into nested SchemaOrg structs and lists, dropsnilproperties, and re-keys each field to its Schema.org camelCase name. - Maintainer build task
mix schema_org.build_types— ingests the vendoredpriv/schemaorg-current-https.jsonldgraph and renders modules throughpriv/templates/type.ex.eex. Deterministic, sorted output. Not shipped in the Hex package.
Notes
- The only runtime dependency is
:jason. The ~5 MB source graph is read only by the build task — never at the library's compile time. See ADR-001. - The building API is struct literals, not pipe setters — a deliberate performance choice that cut the generated BEAM footprint from ~312 MB to ~20 MB and compile CPU by ~60%, while keeping full field auto-complete. See ADR-002.
- Out of scope for this release:
rangeIncludesvalue-type validation,@idnode linking, multi-language@valueliterals, and Phoenix view helpers.