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

collection A named, versioned body of structured data plus its files. The unit of preservation.
version An immutable snapshot: JSON Schema + records + files + metadata.
record A flat JSON object. One entity, one row. Relationships via ID references.
file A 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 archive

Open 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.