v0.9 alphaSoftware case study

Mimir

A desktop application for building fictional worlds. Characters, places, cultures, histories and every connection between them become one structured world that you can see, question and check, stored in plain files you own.

Role
Founder · product, design & development
Studio
Shieldwall Games Ltd
Platform
Desktop: Windows, macOS, Linux
Stack
Electron · React · TypeScript · Vite
Status
Alpha, ahead of a public beta
Mimir's entry view for Óðinn: his portrait and names at the top, structured details such as species, birthplace and relationships on the left, his character classes in the centre and a list of linked entries on the right.
An entry in the real application. Structured details on the left, prose with live links in the centre, and every entry that links here on the right. Captured from the v0.9.0 build using Mimir’s Norse-mythology test world.

Mimir in numbers

Built-in entry types
17
plus custom schemas
Ways to see a world
8
trees, graph, timeline, maps
End-to-end specs
425
driving the real desktop app
Scripted test suites
770
plus 57 mutation guards

Counted from the source repository at v0.9.0, October 2026.

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
Simplified example. Each file name is the entry’s id, so [[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.
Mimir's family tree view focused on Óðinn: Óðinn and Frigg connected to six children, including Baldr and Þórr, and a grandchild, with filters for species, birthplace and location in a side panel.
Family tree, built from the entries’ own relationship fields, with filters by faction, species and place.

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.

Mimir's world connections view: a force-directed graph of coloured nodes and links, with layer toggles for typed relationships, kinship and wiki-link references.
World connections: every entry and reference in one interactive graph, with layers for relationships, kinship and links.

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.

Mimir's library view filtered to characters: a grid of cards with portrait artwork for Óðinn, Baldr, Frigg, Þórr, Freyja, Loki, Útgarða-Loki and Nanna, with coloured filter chips for each entry type.
The library: the whole world in one grid, filterable by type, with status at a glance.

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.

InterfaceReact and TypeScript renderer. No file, network or credential access of its own.
Desktop coreElectron main process. Owns files, version history and networking, and resolves which world is open itself.
Your worldPlain Markdown and YAML files on your device
Hosted services (optional)AI and collaboration on Cloudflare Workers with a Postgres database
  • 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)