Client guides

Bunnyland clients all drive the same server-side verbs and validation. Pick the surface that fits how you want to play:

The clients can present different controls, but submitted commands still go through the same authoritative server checks. A menu entry or clickable target is a convenience, not a shortcut around reachability, permissions, points, or command validation.

Remote clients share a claim-authenticated live update stream. Chat, character sheets, Toon, Web TUI, Web REPL, and their terminal counterparts refresh the selected character after perceivable events. The live stream is best-effort: after a sequence gap, queue overflow, or reconnect, clients replace their local state with a fresh character projection rather than replaying queued frames. The recent activity feed is bounded and reports when it cannot cover the requested interval; manual refresh remains available at any time.

Action menus are built from the server's installed action registry and current target groups. If that metadata is temporarily unavailable, clients show an empty or disabled action state rather than an outdated built-in verb list.

Content warnings

The Terminal TUI and REPL, Web TUI and REPL, Toon client, and 3D player show a content warning before joining a flagged world. The warning combines the tags declared by every installed world plugin with tags added to the world's policy by its administrators. The client does not claim a character until you choose Accept and Join.

The same public world resource includes the world's title and descriptive welcome or message-of-the-day text. Administrators store those values in the world's singleton WorldInfoComponent, along with any additional content_flags, so they travel with saved and transferred worlds. After the content warning, each player client shows that title and welcome text before joining. You can continue normally, skip that introduction on future loads of the same world/server pair, or skip introductions for all worlds and servers. These introduction preferences never suppress a content warning.

Browser clients can remember the displayed flags after acceptance. That preference is shared by Bunnyland clients in the same browser profile. If the world's flag set changes, the client checks the new set before the next claim and shows any flags that are not ignored. World-introduction skip choices are stored in the same browser profile and apply to the Web TUI, Web REPL, Toon client, and 3D player when those clients share that profile.

Terminal users can ignore known flags in $XDG_CONFIG_HOME/bunnyland/terminal.yml (normally ~/.config/bunnyland/terminal.yml):

ignored_content_flags:
  - adult:violence
  - pvp
skip_all_world_introductions: false

For a one-off launch, repeat --ignore-content-flag or pass a comma-separated list:

uv run --all-extras bunnyland tui --ignore-content-flag adult:violence --ignore-content-flag pvp
uv run --all-extras bunnyland repl --ignore-content-flag adult:violence,pvp

Saved and command-line ignores are combined. Ignoring a flag suppresses its warning; it does not enable a mechanic or change the world's boundary policy.

Quick comparison

ClientPlayed inBest forHow you act
Terminal TUITerminalbrowsing a room and picking actions without memorizing command syntaxchoose a player, search or select an action, then fill its argument form
Terminal REPLTerminalkeyboard-first play, scripts, and fast command entrytype canonical or natural commands, with tab completion and clickable names
Terminal chatTerminalfocused conversations and native character sheetschoose a character, type a message, and observe any game action it chooses
Web TUIWebbrowsing a room and picking actions from a browserchoose a player, search or select an action, then fill its argument form in the browser
Web REPLWebkeyboard-first play from a browsertype commands against a live server, with clickable visible names
Toon clientWebvisual room play with sprites and mouse movementclick in the room or use the web action menu
MCPAgent clientstructured, autonomous play without reading server internalsdiscover actions and target ids, submit a command, then observe its later outcome

Running local or remote

The terminal clients can either host a local world in their own process or connect to a running Bunnyland server:

uv run --all-extras bunnyland tui --generator apartment-demo
uv run --all-extras bunnyland repl --generator apartment-demo
uv run --all-extras bunnyland chat --generator apartment-demo

uv run --all-extras bunnyland tui --server http://localhost:8765
uv run --all-extras bunnyland repl --server http://localhost:8765
uv run --all-extras bunnyland chat --server http://localhost:8765/v1

Use --list-generators in either terminal client to see grouped demo worlds and algorithmic generators:

uv run --all-extras bunnyland tui --list-generators
uv run --all-extras bunnyland repl --list-generators

The web clients connect to a running HTTP server from the browser. See Toon client, Web TUI, and Web REPL for details.