The problem
Complex fictional worlds should get clearer as they grow. In practice they turn into a pile of notes.
Characters, places, factions and histories end up spread across documents, spreadsheets and wikis. Each page is useful on its own, but a world is really made of the relationships between them. Once it is large enough, nobody can easily see who is related to whom, what happened when, or where two pieces of canon contradict each other.
Mimir started inside Shieldwall Games, while we were keeping the world of our own card game, Ashborn, consistent. It became a product because the tool we wanted didn’t exist.
Who it’s for
- Indie game developers and narrative designers who need one canonical source of truth for world and story data.
- Writers and screenwriters tracking chronology, families, cultures and story arcs across a long project.
- Tabletop Game Masters building campaigns, connecting factions and histories, and keeping spoilers away from players.
Local-first, not a locked service
A world in Mimir is a folder of plain Markdown files, one per entry, each with structured details in YAML at the top. There is no hidden database: the files are the world. You can open them in any text editor, back them up however you like and keep them in Git.
Shieldwall/
├── characters/
│ ├── sigrun-ulfsdottir.md
│ └── ulf-the-elder.md
├── places/
│ └── caernarfon.md
├── factions/
│ └── the-iron-crown.md
├── _schemas/ custom entry types
└── calendars/ in-world calendars
[[sigrun-ulfsdottir]] links straight to it.- Works offline. Everything except the AI assistant runs without an internet connection.
- Your work survives. Cancelling or downgrading never locks you out of your own files.
- History built in. Optional Git-based version history saves on every change, with per-entry history and rollback.
- Easy to leave. A safe-to-publish export strips hidden and spoiler content, and a context bundle can be handed to other tools.
How a world fits together
Every entry has a type and a schema. Mimir ships with 17 types, from characters, species and cultures to places, factions, events, languages, quests and dialogue, and you can edit them or add your own in a schema editor. Each entry’s form is generated from its schema, so a new field appears everywhere it is needed.
Entries connect in three ways:
- Links in prose. Wiki-links with an autocomplete picker, and backlinks on every entry, so you can always see what refers to what.
- Typed relationships. Allies, rivals, mentors, lieges and more, viewable as a graph or a matrix.
- Structure. Parentage, species, places within places, cultures and factions, each with its own tree.
The same canon can be explored as five trees (family, species, place, culture and faction), a force-directed graph of every connection, a timeline on calendars you define, and maps with pins that link to entries. Quests and dialogue have their own graph editors with conditions and variables.
Canon checks run locally and free: broken links, duplicate ids, circular parentage and rule checks are flagged before an audience ever finds them.
Interface & accessibility
The workspace is built for long sessions. A library shows the whole world at a glance, a command palette (Ctrl + K) jumps anywhere, and keyboard shortcuts cover saving, creating, switching views and a distraction-free focus mode. Every entry has a calm reading view and a form-based edit view.
Accessibility is designed in rather than added later:
- A dyslexia-friendly default typeface (Atkinson Hyperlegible), with OpenDyslexic and others available.
- Adjustable text size and spacing, plus a focus mode.
- Dictation that runs entirely on your own machine.
- Ten built-in themes, light and dark, and a theme studio.
- Automated tests that fail if text overflows its container anywhere in the app.
AI that reads before it speaks
Mimir’s assistant answers questions from what you have actually written, not from generic fantasy tropes. That rule is enforced in layers:
- Retrieval limits the model to the relevant entries from your world.
- Grounding rules require answers to cite only what was provided.
- A structured response includes what the world doesn’t say, so gaps are admitted rather than filled with invention.
AI is the only part of Mimir that needs an internet connection. It runs through Mimir’s own service, so writers never have to manage API keys, and the desktop app never holds a provider credential.
How it’s built
The engineering goal is simple to state and hard to keep: the app must never lie about the user’s world, and the code must never lie about itself.
- A strict process boundary. The interface talks to the desktop core through a typed bridge of a few hundred narrowly scoped handlers. It never receives an authentication token and cannot pass arbitrary file paths.
- Tests against the real thing. 425 Playwright specs drive the actual Electron application, alongside 770 scripted suites, 57 mutation-guard scripts that prove the guards fail when they should, six type-check projects and a linter.
- Documentation that has to be true. Tests recompute the numbers quoted in the project’s own documentation and fail if they drift. Others fail if a test file is never run or if code is wired to nothing.
- Evidence over intent. A feature is only described as working when the code and tests show it working. The status section below follows the same rule.
Stack: Electron, React 19, strict TypeScript, Vite, Tailwind, Zustand, Tiptap for rich text, React Flow for the trees, a custom SVG timeline and simple-git for version history.
Status & roadmap
Mimir is at version 0.9, in alpha ahead of a public beta. Paid plans are not live.
Working now
- Local Markdown worlds, offline use, version history
- 17 entry types and a custom schema editor
- Wiki-links, backlinks and typed relationships
- Trees, world graph, timeline and maps
- Quest and dialogue graph editors
- Local canon checks and AI lore review
- Grounded AI answers with sources
- Safe-to-publish and context exports
- Accessibility settings, offline dictation, ten themes
In testing
- Writers’ Room: collaborators propose changes and the owner accepts or rejects them
- Campaign hosting with player and co-GM companions in the browser and on phones
- Imports from Obsidian, Notion and World Anvil
- Proving Ground: an early text-play version for testing scenarios against the world
Running on a test environment, not in production.
Planned
- AI that drafts new entries for you to approve
- Export bundles for Unreal, Unity, Godot and JSON
- Desktop-to-phone sync
- Renaming an entry and updating every link to it
- The full visual Proving Ground
- MCP connections for external AI tools (later)
Interface captures on this page come from the v0.9.0 build, using the Norse-mythology test world that Mimir’s own population test builds through the real interface. Feature status as of October 2026.
Want the official product details? Visit the official Mimir website (opens in a new tab)