islands in the net // text worlds // federated

A R C H I P E L A G O

"Every word travels somewhere."

— after Bruce Sterling, 1988

alice@localhost — archipelago 0.1.0
──────────────────────────────────────────────────── A R C H I P E L A G O ──────────────────────────────────────────────────── Signal steady. Connection established. Session: alice@winding-stair // protocol Archipelago/0.1 Identity: did:key:z6Mk... ┌─ The Landing ───────────────────── winding-stair ─┐ Stone steps rise from the jetty to a heavy door set into the tower. The wind smells of kelp and rain. Old Cael stands by the gate in an oilskin coat. Exits: up · in · south · down └──────────────────────────────────────────────────────────────┘ Old Cael: "Welcome to the Stair. Road's washed out tonight. You'll stay." /help basics · look at door · smell · listen > _

Separate servers, separate operators, separate rules — connected by signal.

Archipelago is an Elixir/OTP engine for sovereign text worlds. The local realm is playable now. AFP/1 framing, identity, peer state, trust policy, and witness-only signal propagation are implemented and tested; production QUIC binding, travel, customs, and the sea remain unfinished.

NODE.01
◈ Federated islands

AFP/1 uses canonical CBOR, Ed25519 signatures, explicit peer approval, replay protection, and local trust policy. A remote signal enters witness-only dispatch: it can be perceived, never obeyed as local authority.

NODE.02
⚿ Characters that remember

NPC brains have perception, persistent memory, reflection, planning, schedules, circuit breakers, and per-realm budgets. Authored greetings and topic banks remain the fallback when cognition is silent.

NODE.03
⌨ SSH or browser — no install

Connect with OpenSSH or play in the browser. A first public key creates a local account and a self-resolving did:key; password registration is also present. No custom player client is required.

NODE.04
✦ Rooms that change

Rooms, details, NPCs, items, senses, and conversations are authored in Markdown and seeded into an immutable event history. Live edits append transactions; projections and snapshots rebuild the current view.

NODE.05
⌘ Operator-run islands

Chart mode can create, describe, edit, soft-delete, and undo through compensating events. Its capability checks work, but stock SSH login does not yet load operator capabilities; Markdown is the reliable authoring path today.

NODE.06
▦ A named frontier

Player and item transfer, customs, sealed mail, provenance, confederations, and sea lanes are designed but not shipped. The code marks that boundary instead of presenting a roadmap as a harbor.


Rooms, exits, details, presences.

You move through rooms, examine details, read documents, use separate smell, sound, touch, and taste channels, speak with other players, and work through authored NPC conversations. The parser, event store, local economy, formal speech, maps, and detective notebook are live code.

  • Command help documents movement, looking, senses, speech, NPCs, items, and social verbs.
  • Sense composition prefers authored data, then inference, realm fallback, and explicit absence.
  • The journal is presently a session detective notebook; the durable player chronicle remains planned.
  • Play, chart, rig, and watch share one connection process, with capability gates around privileged modes.
archipelago — chart mode test harness
Mode: Build. Prompt: chart> did:key:z6Mk... · :write chart> /create room "North Watch" Draft ready. 1 room. brief: A narrow chamber beneath the lantern. description: Rain works at the north glass... exits: {} [a]ccept [e]dit [r]egenerate [t]weak chart> a Created: room:winding-stair/north-watch

Each realm peers directly with the realms it chooses to trust.

The federation core is an active branch, not a public network. AFP/1 envelopes, peer rows, trust decisions, loopback links, and witness-only propagation exist. The supervised QUIC listener still stops before the real bind, and no player or item can cross between nodes.

  • Signed envelopes pass eleven receipt checks before local policy sees them.
  • Unknown peers remain pending until explicit approval or a matching local rule.
  • Propagated signals are deduplicated, hop-limited, and barred from act/react effects.
  • Transfer, customs, defederation transport, gossip, and sea presentation remain roadmap work.
[ winding-stair ] ◈──◈ [ thornwood ] │ │ ◈ ◈ │ │ [ freeport ] ◈──○ [ ashpit ] │ ◈ │ [ ironholt ] ◈ protocol path implemented ○ network/travel path pending ◈ beacon to ashpit flickers — once, twice — and goes dark. The wind carries nothing from that direction now.

Play in a world. Or raise one.

for travelers

Step off the boat.

Run the showcase realm locally and connect via SSH. Move through Winding Stair and Ironholt content, use the sensory parser, speak with authored NPCs, and inspect the parts of the world that already exist.

$ ssh -p 2222 traveler@localhost Signal steady. Connection established. Choose a name for this island to know you by:_

for operators

Raise your island.

Clone the Elixir umbrella, start PostgreSQL, author rooms and NPCs in Markdown, validate them, and seed their event streams. The deployment and privileged account surfaces are still developer-facing.

$ cp .env.example .env $ mix setup $ mix content.new room my-island/harbor $ mix content.validate my-island $ mix run --no-halt SSH listening on port 2222

The local light is on.

The realm is playable from source. The federation is being built in public, one verified boundary at a time.

developer preview: mix setup && mix run --no-halt