Learn · 12 sections
One request, end to end: a place name becomes an address, the address gets a reading, the reading is hashed, signed and logged, and the token that cites it can be checked offline by anyone.
777er3yihg…womvkaPick a lane and press run. Each step is a live call to emem.dev; each check runs in your browser.
paste any note name, such as one the homepage tokeniser published
Two agents that describe a place in different words can disagree about which place they mean. Two agents holding the same cell64 cannot.
emem ships no dataset. It reads open archives on demand and stores what it read.
| Sentinel-2 bands, NDVI | daily slot | re-checked after a day |
| hourly weather | hourly slot | re-checked after an hour |
| MODIS composites | 8- or 16-day slot | re-checked when the composite rolls |
| annual products | yearly slot | re-checked after a year |
| elevation, static layers | static | never re-fetched |
A fact is named by the hash of its bytes. Change one byte and the name changes, so a quoted name pins one exact reading.
$ curl -sX POST https://emem.dev/v1/recall \
-H 'content-type: application/json' \
-d '{"place":"Lusail","bands":["copdem30m.elevation_mean"]}'
# facts[0].fact_cid names the reading; receipt signs it. Paste the receipt into /verify.
A signature proves who signed and that nothing changed since. It does not prove the value is true. How the value was made is its own label, in section 06.
Every write is appended to a public log. A signed tree head commits to every entry so far.
A token is a short string an agent hands another. The family says what it binds, and how strongly.
| token | names | binds | resolve |
|---|---|---|---|
emem:fact:<cell>:<cid> | one signed reading | the whole body: full 32-byte blake3 | /v1/memory_token/resolve |
emem:fact:<lat>,<lng>@<date>@<band>:<cid> | the same reading, readable | the body, plus place, band and date checked against it | /v1/memory_token/resolve |
emem:bundle: | a set of readings | which facts, 16-byte anchor; each member binds its own body | /v1/memory_bundle/<token> |
emem:tree:<cid>#row=i | one part of a note | a row, by audit path to the root the author signed | /v1/tree/<cid>?row=i |
emem:raster: · emem:cube: | a field, or a field over time | area, band and time, each checked against a signed derivation record | /v1/raster/resolve · /v1/cube/resolve |
emem:rasterset: | several fields as one | a signed manifest of member tokens | /v1/raster_bundle/resolve |
emem:state: | one step of an answer | the cids of its inputs and the step before it | /v1/state/<cid> |
emem:trace: | a device's output | a verified, chained execution trace; never the pixels | /v1/trace_resolve |
emem:entity: | one real-world object | an identity, 16-byte anchor: a shared reference, not shared bytes | /v1/entity/resolve |
emem:cell: | a place | nothing: an address, until a fact hangs on it | /v1/recall |
A descriptor token says what it is without a round-trip: coordinates, date and band are words every model has seen.
A resolver refuses one whose place, band or date disagrees with the signed body, so a real cid cannot be passed off under a false claim.
Every band carries a provenance class. An agent that accepts only values it can recompute keeps the first two rows.
| direct_sensor | the instrument product, no algorithm in the path: Sentinel-2, Sentinel-1, Copernicus DEM, night lights | recomputable |
| deterministic_index | a fixed formula over raw pixels or time: NDVI and the other indices, slope, phenology | recomputable |
| model_output | a trained model or published product: land cover, air quality, population, forest change, surface water | trust the signed checkpoint |
| human_curated | geometry a person drew: Overture, protected areas, ecoregions, admin boundaries | trust the attester |
| unclassified | not tagged yet; lowest trust, never claims to be reproducible | trust the attester |
Live, from /v1/bands: 43 bands, 13 recomputable (6 sensor, 7 index), 23 model output, 5 human curated, 2 unclassified. deterministic: true on a recall keeps only the recomputable classes, before the receipt is signed.
A file becomes one signed index over the units it is made of. An agent reads the index, then only the part it needs.
Ask in words. Each number in the answer is the newest stored reading of its band, cited by its fact_cid.
Retired here: the Clay, Prithvi, Galileo and JEPA-v2 models, and new Tessera embeddings. Facts they signed still resolve and verify.
Every stream tick is signed. The operator attestation binds the running binary's BLAKE3 hash to its git commit, signed with the same key.
Both panes are filled by calls to this responder when the page loads. If a call fails the placeholder stays; nothing is made up.