Documentation

IPNS Publishing

Content addressing has one built in limitation: a CID names exact bytes, so the moment you fix a typo in a dataset, you have a new CID, and every link to the old one now points at the outdated version. Immutability is the feature; this is its cost.

IPNS (the InterPlanetary Name System) is the standard answer: a stable name, derived from a keypair, that you can re-point at different CIDs over time. Share the name once, keep publishing revisions behind it.

This gives you the pairing that research data actually needs, a stable link for people who want "the latest", while every underlying CID remains a permanent, citable address for one exact revision. It also composes with DNSLink if you want the name to be your own domain (details below).

Using it here

Key creation and the first publish are a single call, you never manage key names by hand.

Creating a pointer

bash
curl -X POST https://api.ekayana.com/api/ipns/create \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "cid": "QmExampleContentCID123", "file_name": "protocol.pdf" }'

Returns the record, including the stable ipns_name to share and a version counter starting at 1.

Publishing an update

bash
curl -X POST https://api.ekayana.com/api/ipns/update \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "ipns_name": "k51qzi5uqu5d...", "cid": "QmNewCid..." }'

The name stays fixed, current_cid moves, and version increments. A collaborator can publish too if they hold a UCAN granting write.

Resolving

bash
curl https://api.ekayana.com/api/ipns/k51qzi5uqu5d.../resolve \
  -H "Authorization: Bearer $TOKEN"
# -> { "ipns_name": "k51qzi5uqu5d...", "cid": "QmNewCid..." }

Every revision is retained - GET /api/ipns/{ipns_name}/versions returns the full history, so a citation of an earlier version still resolves to the exact bytes that were reviewed. Full walkthrough in the IPNS Tutorial.

IPNS with DNSLink

An IPNS name is stable but not memorable. DNSLink puts a domain you own in front of it:

  • Add a TXT record to your domain's DNS:
code
_dnslink.example.com. IN TXT "dnslink=/ipns/k51qzi5uqu5dkknju2isuhotajrhi2tnvo88qv2qz89gm3qp8ldtq612kzkeoe"
  • Access via gateway:
code
https://gateway.ekayana.com/ipns/example.com

A note on speed

IPNS resolution is inherently slower than fetching a CID - it's a DHT lookup, not a hash check. The platform papers over most of that with aggressive caching and fast record propagation, but the honest advice stands: resolve the name once, cache the CID, refresh in the background. The tutorial covers the pattern.