A Gift, Not a Gate

August 25, 2026 announcementphilosophyopen-source

I built Fate’s Edge because I was tired of being locked out of my own hobby.

Every TTRPG tool I looked at required an account. Every VTT had a subscription tier. Every AI GM was a SaaS product with a pricing page and a “contact sales” button. The message was always the same: you can play, but you don’t own the table.

So I built something different.

Fate’s Edge is open source. Self-hostable. No accounts required for the core experience. No tracking. No payment gateways. The software is MIT-licensed — you can do essentially anything with the code. The System Reference Document (the core dice mechanics, Position/Effect, Boons, Story Beats, the Essentials Guide) is CC BY-NC-SA 4.0. Clone the repo. Run npm install && npm start. You have a fully functional VTT, real-time server, and AI Game Master running on your own machine. No cloud dependency. No telemetry. No one watching you play.

The setting — the Amaranthine Core, a thirteen-region world built around the Ninth Taboo and the Hollow’s attention — is under a stricter copyright. I’ve spent years building that world, and I’m not releasing everything into the public domain. But I am releasing a substantial portion of it for free. Region generators. Adventure modules. NPCs. Plot hooks. The full Fenwood-Everblood saga. Enough to run a full campaign without paying a cent.

This is not a demo. It’s not a “free tier.” It’s the whole thing, available to anyone who wants it.

What You Actually Get

If you clone the repo right now, you get:

The Web Client — the main application. Character sheets, dice, the VTT, encounters, the magic system (Spellcraft), Kon’reh and Toll & Veil (two original games built on the same infrastructure). Runs entirely in the browser. All data lives in localStorage until you connect it to a server.

The Socket Server — the real-time backend. WebSocket sync, GM election, the Deck of Consequences, the Adventure Engine, campaign persistence. Authoritative for shared state. Every other piece is a client of it.

The AI GM Bot — a separate repository (fates-edge-ai-gm-bot), licensed under AGPL v3, that connects to the socket server as an ordinary client and narrates using a pluggable AI backend — OpenAI, DeepSeek, or a local Ollama model. No API keys required if you run it locally. It remembers what happened. It builds toward a climax. It handles the scaffolding so you can focus on the creative parts.

The Desktop Client — an Electron wrapper around the web client, if you prefer a native app over a browser tab.

The Terminal Client — a MUD-style CLI against the same server, mainly for testing and administration.

The Python CLI and Tkinter Desktop Tool — scriptable command-line access and an offline-first character sheet + GM screen.

VTT Integrations — Foundry VTT bridge, Roll20 API script, Discord bot, Avrae module. The same campaign, the same state, in the tools you already use. The socket server owns the shared truth; every interface is a client of it. A new interface (another VTT, another bot, another platform) is additive — it doesn’t require touching how existing clients work.

The Fenwood-Everblood Saga — a complete four-book campaign spanning five hundred years of in-world history. The Exile Road, the Reckoning Bridge, the Old Duke’s Wars, and the Prelude to Lence. Heirlooms carry over. Oaths persist. The Legacy Tracker keeps it all coherent. Run it as a single epic or pick up any book and play.

The Deck of Consequences — a procedural scene generator that runs off a deck of cards. Draw until you have four suits. Spade is place, Heart is actor, Club is pressure, Diamond is leverage. The rank tells you the scale. The timer tells you how long you have. No prep required.

The Core Rules — a lightweight d10 system built around the 90-second play loop. State. Set. Roll. Resolve. Position and Difficulty. Boons and Story Beats. No dice pool reductions. No dead ends.

No Accounts

This matters more than it sounds.

The socket server supports optional JWT accounts — but they’re genuinely optional. An omitted or invalid token doesn’t fail the handshake; it just makes the join proceed anonymously, exactly as it would have before account auth existed. The room password is what actually gates entry to a locked room. The auth token is what lets the server attach a returning player to their saved character library.

If there are no mandatory accounts, there’s no database of user data you’re forced to hand over. No privacy policy to write. No terms of service to litigate. No “we reserve the right to change this at any time.”

If there are no mandatory accounts, you can’t be locked out. The software runs on your machine. If I stop maintaining it, it keeps working. If I get hit by a bus, it keeps working. If the internet goes down, it keeps working. The table is yours.

This was a deliberate choice. I could have built a hosted service with mandatory user management and a subscription model. It would have been easier to monetize. It would have been easier to control. It would have made me a landlord. I chose not to.

Self-Hosting

The entire system runs on Node.js. Clone the repo. Run npm install. Run npm start. That’s it.

Everything runs on your own machine. You don’t need a server. You don’t need an internet connection once the dependencies are installed. You can run a session in a cabin with no Wi-Fi.

If you want to run it for a group, you can host it on a local network. If you want to run it remotely, you can deploy it to a VPS. If you want to run it in a Docker container, there’s a Dockerfile in the repo.

There’s also an npm run demo command that brings up the web client, the real-time server, Redis, a local Ollama instance, and the AI GM bot — all wired together with working defaults. Open http://localhost:8080, create or join room DEMO, and the AI GM bot takes the GM seat within about ten seconds. No API keys. Nothing cloud-hosted.

Hackable

The code is MIT licensed. Go nuts.

The adventure modules are JSON. Open them in a text editor. Change anything. Add new NPCs. Write new scenes. The bot reads whatever you put in front of it.

The region generators are in deck.js. The cards are just arrays. Add new suits. Change the ranks. Write your own regional tables. The generator doesn’t care. It just reads data and prints prompts.

The bot itself is a series of functions. generateAndAppendScene. generateAndAppendClimax. finalizeAdventure. Each one is decoupled from the others. Swap them out. Replace the LLM calls with your own logic. The architecture was built to be replaced.

The sync layer — js/core/sync/ — sits between feature modules and the network. A feature module still just reads and writes local state; the sync layer notices those writes, turns them into operations, gets them to the server and back out to everyone else, and reconciles whatever comes back. Define a feature’s operation types, wire up handlers, and the sync layer, offline queue, and conflict resolver pick it up for free.

The conflict resolver picks a resolution strategy per operation type — not one global “last write wins” rule. If two clients edit the same character while offline, the resolver merges them. If one deletes while another edits, the delete wins. Concurrent timer ticks accumulate instead of clobbering each other.

I designed the system the way I wish every TTRPG tool was designed: as a platform, not a product. The difference is ownership. A product is owned by its creator. A platform is owned by its users.

The Three Licenses

This toolkit bundles three legally distinct things under one roof. “Can I do X with this repo” almost always comes down to which of the three X touches.

CategoryLicenseWhat it covers
Code — every .js/.py/.html/.css file, build scripts, DockerfilesMITDo anything. It’s MIT.
SRD — core mechanics: dice pools, Position/Effect, Boons, Story Beats, the Essentials GuideCC BY-NC-SA 4.0Share and adapt freely, non-commercially, with credit and share-alike.
Copyright — the Amaranthine setting, named NPCs/Patrons, factions, adventures, proprietary magic-system writeups, artAll Rights Reserved (personal, non-commercial play permitted)Personal, non-commercial play only. Ask first for anything commercial.

The dividing line that matters: the engine is MIT; the world data it ships with is not. You can do essentially anything with the code. You need permission for commercial use of the setting/content.

Two clean options if you want to use the engine commercially: strip the bundled data/ and run the engine with your own setting, or contact support@fates-edge.com about a commercial data license. Content you write is yours — put whatever license you want on it. Just don’t redistribute the original proprietary files outside the bounds of the proprietary license.

Accessibility

This matters enough to call out explicitly.

The web client has three built-in themes — Dark, Light, and High Contrast — switchable from Settings. High Contrast is a from-the-ground-up AAA-level design (7:1 contrast minimum), not a patch over the other two.

Skip links, proper landmarks, live announcements, focus management. Screen-reader users get route announcements, a tablist with proper aria-controls, and off-screen announcer regions from first paint.

Chat is a live region — new messages are announced as they arrive. “Type to Speak” reads new chat messages aloud via browser speech synthesis. AI GM Voice Narration reads the AI’s replies aloud. Voice chat speaking indicators show an icon and screen-reader text, not just a color change.

Every slider has an accessible name and a visible numeric readout. Images carry alt text — real descriptions for meaningful images, empty alt="" for decorative ones. Keyboard shortcuts reference is accessible via ? anywhere outside a text field.

Accessibility is an ongoing, actively maintained part of the web client — see ACCESSIBILITY.md for the full rundown and known gaps.

The Ethos

Fate’s Edge is not a startup. There’s no Series A coming. There’s no valuation. There’s no exit strategy. I don’t want to sell it. I don’t want to rent it. I want to give it away and see what happens.

This is an experiment. Can a TTRPG system be open, free, and sustainable without a business model? I don’t know. I’m going to find out.

The full setting will be for sale. The book, when it’s finished, will have a price. The maps, the illustrations, the curated collections — those will have prices. Because I need to eat, and I want to keep building. But the software, the generators, the core rules, the playable content? That’s free. Forever.

That’s the deal. I put in the work. You get the tools. If you want the lore, you can buy it. If you want to contribute, you can fork the repo. If you want to self-host, you can. If you want to ignore the whole thing and build your own setting on top of the engine, you can do that too.

No one is locked in. No one is locked out.

Where to Start

The repo is at github.com/Chronophage-net/fates-edge-apps. The README has installation instructions. The adventures/ directory has the Fenwood-Everblood saga. The regions/ directory has the generators.

If you’re a GM, start by reading the 90-second play loop guide. Then run the first scene of The Exile Road. The AI GM will handle the rest.

If you’re a developer, start by reading adventure-director.js in the AI GM Bot repo. That’s the bot’s entry point. The architecture is documented in the code comments and the DESIGN.md files — or start with the architecture overview on the dev portal for the bird’s-eye view first.

If you’re a worldbuilder, start by reading the region generators in deck.js. See how the Four-Suit framework works. Then write your own regional tables — or check the Art Bible for how the setting’s visual and cultural logic hangs together.

If you’re just curious, run npm run demo. The web client will open in your browser. Join room DEMO. The AI GM bot takes the GM seat. See what happens.

The only thing I ask is this: if you build something with this, share it. Fork the repo. Open a PR. Write a module. Write a guide. Record a session. The whole point of this project is to be shared. The dev portal has the full contributor workflow if you want a place to start that conversation.

Postscript

I’m writing this on a Sunday afternoon. The code is working. The playtest groups are running. The setting is half-finished. The project is not done. It will never be done. That’s the nature of open source. It grows as people use it.

If you’re reading this and you’ve ever wanted to build a TTRPG tool but didn’t know where to start, I hope this gives you a foundation. If you’ve ever been frustrated by a paywall, a login screen, or a “free trial” that locked your content behind a subscription, I hope this gives you an alternative.

“The coin that never spends is the one you don’t remember taking.” — Serafine of the Velvet Touch

The table is yours. I’m just helping you set it up.