1. emem
  2. Learn
  3. How it works
for anyonethe address, the fact, the receipt, in order

Learn · 12 sections

How emem works

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.

responder key
777er3yihg…womvka
reads
no account, no API key
licence
Apache-2.0
place"Lusail"input cell64~9.55 m squarePOST /v1/locate factfact_cid = BLAKE3POST /v1/recall receiptEd25519 signatureon every answer logRFC 6962 treeGET /v1/log/sth tokenemem:fact:…/v1/memory_token a second agent checks the token offline: recompute the fact_cid, verify the signature against the published key
Figure 1. The path of one reading, left to right. Only the responder's public key is needed to check the result: the token carries the fact_cid, and the fact_cid is recomputed from the bytes it names.

00Run one request

Pick a lane and press run. Each step is a live call to emem.dev; each check runs in your browser.

try
  1. name the placePOST /v1/locate
  2. read what was observedPOST /v1/recall
  3. check the signaturethe receipt, verified in this tab
  4. check the logGET /v1/log/sth
  5. cite itPOST /v1/memory_token
  6. resolve the citationPOST /v1/memory_token/resolve

01Name the place

Two agents that describe a place in different words can disagree about which place they mean. Two agents holding the same cell64 cannot.

02Fetch on a miss, re-fetch when a slot passes

emem ships no dataset. It reads open archives on demand and stores what it read.

Sentinel-2 bands, NDVIdaily slotre-checked after a day
hourly weatherhourly slotre-checked after an hour
MODIS composites8- or 16-day slotre-checked when the composite rolls
annual productsyearly slotre-checked after a year
elevation, static layersstaticnever re-fetched

03Hash the fact, sign the answer

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.

SHa signed reading, outside the page
$ 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.

04Append it to the log

Every write is appended to a public log. A signed tree head commits to every entry so far.

signed head…
entries…
independent operators…
co-signatures…

05Cite it: what each token proves

A token is a short string an agent hands another. The family says what it binds, and how strongly.

tokennamesbindsresolve
emem:fact:<cell>:<cid>one signed readingthe whole body: full 32-byte blake3/v1/memory_token/resolve
emem:fact:<lat>,<lng>@<date>@<band>:<cid>the same reading, readablethe body, plus place, band and date checked against it/v1/memory_token/resolve
emem:bundle:a set of readingswhich facts, 16-byte anchor; each member binds its own body/v1/memory_bundle/<token>
emem:tree:<cid>#row=ione part of a notea 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 timearea, band and time, each checked against a signed derivation record/v1/raster/resolve · /v1/cube/resolve
emem:rasterset:several fields as onea signed manifest of member tokens/v1/raster_bundle/resolve
emem:state:one step of an answerthe cids of its inputs and the step before it/v1/state/<cid>
emem:trace:a device's outputa verified, chained execution trace; never the pixels/v1/trace_resolve
emem:entity:one real-world objectan identity, 16-byte anchor: a shared reference, not shared bytes/v1/entity/resolve
emem:cell:a placenothing: 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.

more

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.

06Label how each value was made

Every band carries a provenance class. An agent that accepts only values it can recompute keeps the first two rows.

direct_sensorthe instrument product, no algorithm in the path: Sentinel-2, Sentinel-1, Copernicus DEM, night lightsrecomputable
deterministic_indexa fixed formula over raw pixels or time: NDVI and the other indices, slope, phenologyrecomputable
model_outputa trained model or published product: land cover, air quality, population, forest change, surface watertrust the signed checkpoint
human_curatedgeometry a person drew: Overture, protected areas, ecoregions, admin boundariestrust the attester
unclassifiednot tagged yet; lowest trust, never claims to be reproducibletrust 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.

07Remember a file as its parts

A file becomes one signed index over the units it is made of. An agent reads the index, then only the part it needs.

in your browser published on emem.dev your filebytes stay here § Install def parse_args page 4 tensor embed.weight BLAKE3per unit unit notesone per unit with text index noteevery row, one root emem:tree:<index>proves any unit
Figure 2. A file is split and hashed in the browser. Only the notes cross to the server, and you choose whether they carry each unit's text or only its hash. One signed index covers every unit, so one token proves any single unit with an audit path of log2(n) hashes.

08Answer with the facts attached

Ask in words. Each number in the answer is the newest stored reading of its band, cited by its fact_cid.

09Bundle, disagree, supersede

10Call it over MCP, A2A or REST

Retired here: the Clay, Prithvi, Galileo and JEPA-v2 models, and new Tessera embeddings. Facts they signed still resolve and verify.

11Liveness: signed ticks, attested build

Every stream tick is signed. The operator attestation binds the running binary's BLAKE3 hash to its git commit, signed with the same key.

waiting…

Corpus stream

GET /v1/stream?interval=5  ·  event: state
served at…
distinct cells…
distinct bands…
facts scanned…
registry cid…
signature…
waiting…

Operator attestation

GET /.well-known/emem.json  ·  operator_attestation
version…
git commit…
build at…
binary blake3…
tee quote…
signature…

Both panes are filled by calls to this responder when the page loads. If a call fails the placeholder stays; nothing is made up.