How to implement CoffeeJSON
Two functions: JSON in, your recipe type out, and back again. Required: a title, a dose, and either the water or the ratio. A reader ignores the rest.
The integration guide is the checklist. This page is what you lean on while you work it.
Reference SDKs
| Package | Language | What it covers |
|---|---|---|
@coffeejson/core |
TypeScript | Wire types, the share-link codec, and a total normalize() — an untrusted payload cannot crash a renderer. |
@coffeejson/react |
TypeScript | Renders a document. Frozen class names, replaceable leaves, no styling you cannot override. |
coffeejson-swift |
Swift | Wire types, codec and share-link transport for Apple platforms. Pure Foundation, no dependencies. |
Conformance is something you can run
The transport ships as scan vectors — each a URL exactly as a scanner hands it over, with the document it must yield or the reason to refuse it.
The SDKs run them; so can yours. Rejection names come from the corpus, so two implementations describe the same failure the same way. Document shapes get the same treatment: a fixture corpus, each invalid document naming the rule it breaks.
When you have shipped it
An implementation is anything that reads or writes CoffeeJSON — an app, a service, a library, a machine. The two roles are independent.
Open a pull request adding yours to
registries/implementations.json
and it appears on the showcase. No approval step,
nothing to sign.