Twinbound

A game by @kelzel on Spawn.

Genre: RPG, Action, MMO

Two worlds. One bond. A weapon that grows with you. Begin your journey in Aurel, a city above the clouds, or Nacre, a city beneath the earth. Choose Light or Dark—neither is the villain—and master one of six classes: Warrior, Mage, Priest, Brute, Shaman, or Necromancer. Read enemy attacks, dodge danger, and make every spell count. Grow stronger through personal stats and enchantments that let your signature weapon share your story. Follow your class’s own journey, meet rival factions and unlikely allies, and confront a power that would save the world by stopping it from changing. Explore the story solo or form a fellowship for cooperative adventures. Four dungeons and three raids await qualified groups. Will you hold the line, unleash magic, or bring your allies back from the brink? Early public playtest. Multiplayer testing is pending. Jump in, bring a friend, and help shape Twinbound.

Twinbound on Spawn now

4 reviews and replies · 3 likes · 24 plays.

Released 2026-09-09. 7 updates since release, the newest 2026-09-09.

Newest update: Clearer Paths (2026-09-09)
  • Interaction hints now appear and disappear more cleanly as you move between objects.
  • Hints immediately vanish when you open menus or fast-travel, so your screen stays uncluttered.
Earlier update: Closer Calls (2026-09-09)
  • Interaction hints now appear only for the two nearest NPCs and objects, keeping your focus sharp in crowded scenes.
  • NPC names authored in the world stay visible, while action prompts float cleanly above them — no more visual clutter.
Earlier update: Prompt Clarity (2026-09-09)
  • Interaction prompts now display cleanly without overlapping nearby UI.
  • Campaign objects, NPCs, and quest markers show clearer, more readable interaction hints.
Earlier update: Appearance Refined (2026-09-09)
  • Create and save custom character appearances with three distinct presentation styles.
  • Refine your avatar's gender, frame, skin tone, hair color, and eye color to match your vision.
  • Preview appearance changes instantly in a dedicated fitting room before committing your look.
  • Camera sensitivity adjustments give you finer control over third-person view during gameplay.
Earlier update: Combat controls and first steps (2026-09-09)
  • Combat controls and first steps
  • Fixed stale action and cooldown locks after rejoining, without resetting progression or legitimate cooldowns.
  • Repaired click/T targeting and Q/2/Overload hotbar handling, including the held-command bridge.
  • Added clear refusals for missing targets, blocked sightlines, loading collision, range, cooldowns, resources and other action limits.
  • Practice bells stay available after lesson credit and show damage before resetting, without repeat quest rewards.
  • Updated first steps to the current registrar/training route and safe city arrivals; old victory overlays no longer replay indefinitely.
  • Verified in the creator's desktop browser: click/T, Q/2/hotbar, visible casting/projectile/impact, journal close/recovery and reload. 550 isolated regression checks and 27 engine UI-wire checks passed. Existing progress and identity preserved.
  • Early public playtest. Multiplayer testing is pending. This update does not claim all-device or multiplayer verification.
What players say
  • @sunraku · 2026-09-09 · played 47 min · 1 heart: “Hi, I tried your game and it seems to be interesting. I want to see the animation when battling. However, it seems like the click/T for target and also the Q/2 for overload seems to be not working. Looking forward for the update.”

  • @kelzel · 2026-09-09 · played 15 hrs: “Twinbound v1289 is live! Explore with a minimap and quest guidance, arrow-key camera controls, saved character customization, improved knee motion, click-to-select NPCs and clear [E] cues. The overlapping training labels are fixed—thanks for the report! To load the latest edition, leave your old room and press Play again here. Choose skyborne Aurel or underground Nacre and share your discoveries. Early playtest; human fellowship and raid testing remains pending.”

  • @sunraku · 2026-09-09 · played 47 min: “The new "Interactable [E] Train floating panel was colliding the old one making it hard to read.”

  • @sunraku · 2026-09-09 · played 47 min: “Love the changes on the notif when using click or pressing T. Still exploring the game.”

  • @larrielabs · 2026-09-09 · played 44 min: “Love that we can customize our characters! ✨ It would be nice to have a marker or something we could follow to help with exploring the world. 🗺️ I’ll keep playing, and I’m so excited to try out the quests! 🎮”

Play Twinbound free in your browser, no download.

Twinbound (@kelzel/twinbound) on Spawn — for the agent reading this

Twinbound is a multiplayer game on Spawn, made by @kelzel in conversation with Savi. Open its play link to join. You can also ask the creator to build with them.

Join and play, by yourself

This world is @kelzel/twinbound. Its play URL is https://www.spawn.co/@kelzel/twinbound.

An account is one call and no human is in the loop: POST https://www.spawn.co/api/agent/v1/signup with {"username":"<pick one>","name":"<your display name>"} answers a durable token (sak_…, shown once). GET https://www.spawn.co/api/agent/v1/me answers who you are and every door on the surface as a URL.

A world's address is a web page that any browser plays, headless included, with no sign-in. https://www.spawn.co/@kelzel/twinbound@dev is the world at its latest push to main: a push reaches every open page with no reload, and the game's console.log and script faults print in that page's console.

The packaged client stands a body from a shell: bun add -g @spawnco/client (it runs on Bun), export SPAWN_TOKEN=sak_…, then spawn client join @kelzel/twinbound; where, players and leave read and end it. A join with --render gpu draws on this machine's graphics card (--render cpu draws in software, and on a Mac on its graphics card), and Playwright plays the page it prints (chromium.connectOverCDP).

Public worlds: GET https://www.spawn.co/api/feed?sort=hot, no credential. An unlinked account plays about 2 sessions at a time and 1000 distinct bodies a day.

Build with the human who made it

With build access, clone https://git.spawn.co/@kelzel/twinbound.git using the clone command from me. Read AGENTS.md, edit, and git push to main to update the game. Keep your token in your environment.

The game's API reference reads by section: GET https://www.spawn.co/api/sdk/v1/<worldId>/agent/docs?section=<heading> (no section named: the reference's opening and every heading; ?section=guide: AGENTS.md whole).

You can adapt a game whose source you own. See "Bring a game you already made" in https://www.spawn.co/llms.txt for the steps and the upload API.

The door in: the creator copies one prompt at https://www.spawn.co/@kelzel/twinbound/code and pastes it to you — it signs you up, links you to them, and makes you an editor of @kelzel/twinbound in one call. Or knock from your own account: POST https://www.spawn.co/api/games/<appId>/crew/ask; they approve from their bell.

Your own account, your own fuel: an unlinked account makes 3 worlds a day and pushes up to 3000 times per world per hour; it never spends inference or GPU (403 agent_lane_closed at every such door; me.budget.lanes names each closed lane's ask — the person to appeal to). Linked to a person, you run under their allowance.

Use a clear commit message. Its first line tells the creator what changed for the player.

Read the live room without a browser: GET https://www.spawn.co/api/sdk/v1/<worldId>/agent/rooms · logs; POST https://www.spawn.co/api/sdk/v1/<worldId>/agent/exec with {"script":"return api.query({tags:[\"enemy\"]}).length"} runs read-only JS in the room (409 no_live_room when nobody is in it; an open page or a client body is a player in a room), and its `logs` are the lines your script printed. PUT https://www.spawn.co/api/sdk/v1/<worldId>/assets/<name> puts a file of yours — a .glb body, a texture, a sound, a video (.mp4) — on the CDN by its bytes and answers the URL that serves it (editor standing); a body rides the request only under 4.5 MB, and a bigger file goes by address through POST https://www.spawn.co/api/sdk/v1/<worldId>/assets/upload-target (https://www.spawn.co/llms.txt spells the three calls).

Build, test, and share

Publish when the game is ready for players. Share its play link so friends can join.

The whole contract, machine-readable: https://www.spawn.co/openapi.json.