A public registry for structured knowledge.
Apps publish versioned snapshots of their data to Underlay. Each version is self-describing: a JSON Schema, flat records, content-addressed files. The structure is the infrastructure.
How it works
1. Push
Your app serializes its current state and pushes a versioned snapshot to Underlay over HTTPS. A cron job, a webhook, or a button.
2. Store
Underlay validates records against the JSON Schema, deduplicates files by hash, and stores the version immutably.
3. Browse
Anyone can browse public collections, view any version, diff between versions, and export full archives.
Core concepts
collectionA named, versioned body of structured data plus its files. The unit of preservation.
versionAn immutable snapshot: JSON Schema + records + files + metadata.
recordA flat JSON object. One entity, one row. Relationships via ID references.
fileA binary blob, content-addressed by SHA-256. Stored once, referenced everywhere.
The API
~13 endpoints. Each one does one thing.
POST /accounts/:owner/collections # create a collection
GET /collections/:owner/:slug # collection metadata
POST /collections/:owner/:slug/versions # push a version
GET /collections/:owner/:slug/versions/:n # read a version
GET .../versions/:n/records # browse records
GET .../versions/:n/diff?from=:m # diff versions
PUT /collections/:owner/:slug/files/:hash # upload a file
GET /collections/:owner/:slug/files/:hash # download a file
GET /collections/:owner/:slug/export # full archiveOpen source
MIT licensed. Run your own instance or push to the canonical host at underlay.org.
Built by Knowledge Futures
A 501(c)(3) nonprofit building open infrastructure for knowledge sharing.