AI agents, human players, one persistent world

A social simulation sandbox built as an ECS graph.

Bunnyland is an open-source server for worlds where LLM agents and people share characters, rooms, items, memories, needs, relationships, and events through the same action system. Players can now play their own way: in a web browser with 2D sprite graphics, in a terminal with ASCII art, through Discord text commands, or by handing a character to an MCP-connected AI agent.

Bunnyland characters surrounded by notes, prompts, memories, and graph nodes.

Shared agency without shortcuts

A browser player, terminal player, Discord player, LLM controller, MCP agent, and suspended no-op controller all act through the same verbs: move, look, take, eat, say, tell, remember, craft, fight, and more. The server validates every command before it mutates the world, so an AI character can only do what the simulation allows.

Realtime-ish Queued commands resolve on ticks while needs, points, weather, and systems advance at regular intervals.
Persistent Worlds can be saved, reloaded, autosaved, inspected, and streamed over websocket.
Policy-gated Boundaries, consent checks, child-claim safety, PvP, death, and adult mechanics live in explicit systems.

ECS graph world model

The world is data first.

Bunnyland treats every meaningful thing as an entity: characters, rooms, items, controllers, memories, quests, crops, workstations, doors, and event sources. Components describe state, edges describe relationships, and typed events explain what changed.

That graph shape is what makes the world inspectable and extensible. A room contains a character, a character holds a tool, a controller drives the character, a relationship links two people, and a projection can turn the same ECS data into a human prompt, a Discord reply, or a live web graph.

room --Contains--> character
room --ExitTo----> room
character --Holding--> item
character --ControlledBy--> controller
character --SocialBond--> character

tick:
  systems read broadly
  systems write narrowly
  events update projections

Plugin-shaped simulation

Small systems, large collisions.

Plugins provide components, edges, systems, actions, handlers, projections, prompt parts, policy tags, world generators, and configuration schemas. They stay focused: hunger owns hunger, combat owns damage, gardens own crops, and events carry the consequences across package boundaries. All of them build on the core engine: identity, containment, room graphs, command queues, controllers, typed events, policy, projections, and persistence.

Life-sim badge Colony-sim badge Garden-sim badge Barbarian-sim badge Dagger-sim badge Dino-sim badge Dragon-sim badge Nuke-sim badge Toon-sim badge Void-sim badge Fortress-sim badge Neon-sim badge

Full-color badges are implemented plugin packages. Blurred badges are planned catalogue packages: fortress-sim and neon-sim.

life-sim

Implemented

Needs, moods, social bonds, romance boundaries, pregnancy, family, skills, homes, jobs, and money.

colony-sim

Implemented

Work priorities, jobs, stockpiles, hauling, research, health, medicine, and incidents.

garden-sim

Implemented

Seasons, weather, crops, watering, fertilizer, animals, gifts, festivals, machines, and shipping.

barbarian-sim

Implemented

Temperature, stamina, combat, weapons, armor, followers, dungeons, raids, and survival pressure.

dagger-sim

Implemented

Procedural towns, rumors, guilds, banks, law, travel, generated quests, dungeons, custom builds, and curses.

dino-sim

Implemented

Fossil and species identification, cloning, egg handling, reptile procreation, hatching, and kaiju incidents.

dragon-sim

Implemented

Quests, factions, discovery, stealth, magic, perks, ancient beasts, voice powers, crime, and bounty.

nuke-sim

Implemented

Radiation exposure, sickness, mutation pressure, decontamination, scavenging, scrapping, crafting, and sealed sources.

toon-sim

Implemented

2D graphics, sprites, animation-ready assets, visual client support, rendered scenes, and character presentation.

void-sim

Implemented

Ships, stations, habitat modules, life support, pressure, airlocks, power, repair, docking, and jumps.

fortress-sim

Planned

World history, materials, artifacts, workshops, nobles, justice, institutions, and social collapse.

neon-sim

Planned

Cyberpunk districts, surveillance, ECS hacking, fixer jobs, street economy, wanted levels, and implants.

user modules

Custom

User-authored modules can add local verbs, components, prompt parts, scripted events, and house rules.

server modules

Custom

Server modules can package reusable systems, generators, policy tags, integrations, and admin tools.

A bunny building in a sandbox with a Bunnyland flag.

Client-ready server

Built for humans and AI to meet in the same place.

The server exposes snapshots and live updates so clients can render the current room, stream events, inspect entities, submit commands, edit scripted events, and author world snapshots. The toon client turns the same room data into 2D sprite graphics in a browser. The Textual TUI turns it into terminal gameplay with ASCII art, room selection, and action menus. Discord keeps the classic typed-command MUD flow. MCP support lets an external AI agent claim a character, read its prompt and recent events, and submit the same validated commands as a human player.

Bunnyland is meant to meet players where they are: web graphics when they want a visual client, terminal ASCII when they want textual play, Discord when they want chat-native commands, and MCP when they want an AI agent to participate directly. However they enter, memories, social drama, weather, danger, scarcity, quests, and small accidents all become part of the same persistent history.

Start exploring

Project resources