Every object, place, robot, and virtual thing gets one persistent identity, so every system can point at the same thing without agreeing on anything else. Self-minting, permanent, and yours to resolve, the way a web address is.
Maps, headsets, robots, game engines, and 3D scans each track space their own way, and none of them agree. The fix isn’t a new coordinate system on top. It’s a shared name, so all of them can point at the same thing while keeping their own coordinates. Four ideas carry it: identity, hierarchy, pose, time.
An opaque, ~48-character 4D-ID for a thing, unchanged as it moves, ages, or is seen by another system.
A discrete global grid cell is the name, partition key, route, and query predicate at once. Pose is GeoPose-compatible.
Source, publish, and receive time with an uncertainty bound. Staleness is marked, never hidden.
These run in your browser against a faithful in-browser build of the resolver. Everything you mint is a real, valid 4D-ID, kept in a sandbox so the live namespace stays clean.
Type an address. Watch it geocode, anchor to a global-grid cell, and become a persistent name you can resolve again.
Open the globe → Demo 2 · showpieceA robot and a drone in a named building. Watch an observation hand off by name, then dispatch a repair to one sprinkler head.
Enter the building → Demo 3 · scaleSail a ship of named containers and count the records. Naive versus hierarchy, live.
Sail the ship →Behind this site runs a real 4D-ID resolver you can query right now. It is read-only: you can look identities up, but you cannot create them here, so the try-it demos above create identities in your own browser instead. Below are the calls the resolver answers.
# liveness curl -fsS $BASE/health # resolve an external identifier to a 4D-ID (sample facility) curl -fsS "$BASE/resolve?registry=asset.register&external_id=TB-WH-01" # bounded, agent-ready context envelope curl -fsS "$BASE/entity/<4did>/context" # deterministic state snapshot curl -fsS $BASE/snapshot
Note: resolve is a lookup, not a mint. It finds an identity that was already registered. The sample facility registers asset.register / TB-WH-01; to look up your own address, mint it first in the globe demo.
| Operation | Route | Notes |
|---|---|---|
| resolve | GET /resolve | external id or 4D-ID to locator + snapshot |
| entity | GET /entity/:id | identity card + relations |
| state | GET /entity/:id/state | current or ?at= record |
| relations | GET /entity/:id/relations | typed, confidence-filtered edges |
| representations | GET /entity/:id/representations | ranked by ?purpose= |
| context | GET /entity/:id/context | bounded envelope for agents |
| query / list | POST /query · /list | filter by cells, layer, class |
| events | POST /events | event-class records |
| watch | GET /watch | changes since a generation |
| snapshot | GET /snapshot | zone generations + reference time |
4D-ID is an identity layer over the standards the world already uses. It composes with them; it replaces none.
OGC GeoPose & DGGS · ISO 8601 · ROS tf2 · VDA 5050 · ETSI Local Dynamic Map · OpenXR · glTF · MCP