client · web + telnet

Every pack works on every client.

The Tapestry client is a draggable, three-column workbench for text worlds — designed so a screen-reader user, a telnet purist, and a player on a phone can all be in the same room with no second-class experience.

GMCP native Draggable panels Accessibility-focused React + TypeScript
midnight-bazaar tapestry://midnight-bazaar.example.com connected · GMCP v2

The Midnight Bazaar — North Aisle

Lanterns sway above stalls of every shape, throwing amber stripes across the packed earth. The air smells of cardamom and rain. A canvas awning to the east conceals a sleeping stall-keeper.

— exits: north, east, southeast —

look stall

The nearest stall is heaped with pewter trinkets. A small placard reads “Names & Their Burdens — 3c.”

talk keeper

Mira the Lampmender tilts her head. "Looking for a charm, or a curse? I do not ask which.”

✓ quest available: A Lamp That Won't Stay Lit

accept

A breeze stirs. Distant thunder, soft as a question.

You feel the weight of a small brass lantern settle into your pack.

[weather] light drizzle begins — visibility reduced.

↑ history · tab to complete

every panel is draggable, dockable, and remembers its place across sessions

Layout

Three-column workbench, all yours.

Vitals, inventory, map, chat, party, tells — every panel is independent. Drag, dock, hide, or pop one out to its own window. Layouts save per-world.

Telnet first

No JavaScript? No problem.

Telnet on port 4000 is the canonical surface. The web client adds panels but never adds gameplay — what a telnet user sees, you see, with prettier chrome.

GMCP

Typed events drive every panel.

Vitals, room info, inventory diffs — all GMCP. Pack authors emit typed events; the client renders them. No client-side hacks for new gameplay.

Local-first

Your settings, your machine.

Aliases, macros, layouts, history — stored locally. Sync optional via your own provider. No mandatory accounts to play.

Accessibility — by default, not as a checkbox

Built for the way people actually read.

MUDs are one of the most screen-reader friendly games on the internet — when they're built right. Tapestry treats accessibility as engine-level concern, so every pack inherits it.

01

GMCP auto-feedback

Every action emits a structured event. Screen readers hear "+3 hp, weather cleared" without parsing prose.

02

Polite vs assertive regions

Combat is assertive. Ambient weather is polite. Authored once in the pack, respected by the client.

03

Keyboard everything

No mouse-only paths. Panels reorder with the keyboard. Map navigation via arrow keys.

04

Contrast & type

High-contrast presets and accessible color defaults. Bring your own font.

Midnight Bazaar

Amber lanterns. Cardamom. A canvas awning hides a sleeping stall-keeper.

— exits: n, e, se —

> talk keeper

Mira tilts her head. "Looking for a charm, or a curse?"

✓ quest available

FeedVitalsMapChat
Mobile

A whole MUD in a thumb.

The mobile layout collapses panels into a tab strip. Swipe between feed, vitals, map, and chat. Quick-cast macros live above the input. Designed for one-handed use on the bus.

  • ·  Persistent input bar with macro row
  • ·  Haptic cues for assertive events
  • ·  Pull-to-history, swipe-to-clear
Phase 2 · coming

Pack-authored client widgets

Soon, packs will be able to ship their own panels — a brewing UI for an alchemy pack, a constellation map for a navigation pack — sandboxed and signed, but native to the client.

Follow the RFC →