Every tool speaks only to itself
A scene, a typeface, a building, a show, a catalog — each lives in a private file. Moving work means writing a converter, and converters rot. Shared runtimes solve interop by locking the language and the platform.
Rig is the vocabulary those tools could share. Not another editor. Not a library. The document is the artifact.
One grammar. Many domains.
The same composition model — entities with named POD components — wherever two hosts need the same meaning. A host that implements six schemas and ignores the rest is fully Rig. Ship what you support.
Sharing tools should be fun
Take a tool from one app and drop it in another — controls, groups, actions, the working interface. Author the panel in App A. Load the same document in App B. If both speak the same schema ids, the knobs still turn the same fields.
The chrome can change. The tool stays the document. That is the point of a shared vocabulary: borrowing a working tool from someone else's app should feel like a gift, not a rewrite.
The document is the artifact
Content is plain data on entities, keyed by schema id. Live hosts also run a four-hook loop:
Setup → spawn / load entities
Update → simulate (modulators, transport, …)
Draw → present
Exit → tear down
One entity. The picture is that document drawn by a second fulfillment — static SVG, no client JavaScript.
examples/minimal-scene.json drawn by the in-repo renderer.
Same vocabulary, unrelated to any product host.
{
"id": "demo-rect",
"components": {
"rig.spatial.transform": { "position": [20, 65, 0] },
"rig.geometry.rectangle": { "width": 140, "height": 90, "cornerRadius": 10 },
"rig.paint.fill_stroke": { "fillRgba": [0.25, 0.65, 1, 1] }
}
}
Excerpt — the full entity is in minimal-scene.json.
Any program that recognises rig.geometry.rectangle can draw
that rectangle, in any language, without knowing what wrote it.
Reference documents · Entity / component · SUDE · Document envelope
It runs
A Rig document is not a diagram of a format. The same JSON plays or presents in more than one fulfillment, none of which know the others.
RigPlayer
Plays a document over time — SUDE, Update, Draw. The host for work that runs.
RigKit
Desktop / Pi reference host. GLFW, packs, the floor for a live fulfillment.
Also PicoForge —
a .rig compiled to a running PICO-8 cartridge. This page's
SVG is another fulfillment of the same document.
Built for people and models
When execution gets cheap, agreement is the scarce asset. A generated renderer is disposable. A generated vocabulary is a liability — the next session invents a different one. Rig publishes the concept in a form people and models read the same way.
node tools/rig-validate/cli.js path/to/doc.json
Every failure names a JSON Pointer, so an agent can correct itself without a human in the loop.
Start
Clone it, check it, read it. There is nothing to install but the validator. 0.x is a draft — core rules hold; schemas may still shift before 1.0.
git clone https://github.com/rigkid/RigWorks
cd RigWorks
npm run setup # installs the validator
npm run check # schemas, parity, links, reference documents
Being Rig takes the grammar: plain-data components on entities, against schemas you support. Live hosts also honor the four-hook loop. Everything else is opt-in.