Introducing initiative.sh

October 7, 2021 • Reading time: 7 minutes

Today I'm proud to announce initiative.sh, a storytelling aid for game masters with a particular eye towards Dungeons & Dragons. initiative.sh is designed to be used at the table (real or virtual), supporting your creative process as sessions evolve in real time.

This project has been a product of about six months of focused development so far. It's particularly exciting for me because it is the first product launch of my funemployment. This also marks the first time in longer than I can remember that I've bootstrapped a project of my very own from greenfield to a real, sustainable development cadence.

What is a storytelling aid?

Part of the magic of pen and paper RPGs is that they're open-ended: you're not limited to what a game designer anticipated you might want to do. Players step into a world that someone else has prepared for them, but where they go and what they do from that point on is entirely up to them.

What this means is that you, the game master, must be prepared for everything. Do the players go looking for an inn? They're going to find one. Pick a fight in the bar? They're going to find that too. Start picking pockets of patrons? They might get away with it, they might get caught, and either way you need to be ready for what happens next.

Depending on your game master style, there can also be a lot of orchestration involved in play, including choosing appropriate music, pulling up maps and reference images, and even changing lighting based on the players' environment. And of course, there's a neverending need for lists of spells, items, monsters, rules, and world reference notes.

The classic image of a game master with a bulging binder and a pile of reference material has been replaced with a game master with a hundred browser tabs, but the problem is the same: a lot of distractions between you and telling the best story you can tell.

What's already out there?

Of course, this is not a new problem, and plenty of our fellow nerds have come up with perfectly viable solutions. They generally take the form of websites, free or paid, that offer some combination of reference material and random generators. donjon, for one, is a veritable treasure trove of treasure and troves. And reference, and random generators. And it's just one site in a big and robust ecosystem of creative people making creative tools.

Where everything I've seen fails is in the time it takes to go from question to answer. The game is effectively on hold while you flip through your bookmarks, navigate several layers of menus to find the inn generator, and mash the "regenerate" button until you find something that makes sense in the context of your game. And if you forget to write down everything on that page (as I unfailingly do), one wrong click will ruin your day if the players decide to return later.

What will initiative.sh do differently?

Ultimately, I've found the wealth of tools out there to make my job more complex, not simpler. Some add enough to the experience to make the trade-off worthwhile, but precious few actually take a weight off my shoulders. (Improved Initiative is one of the few exceptions to this, but it only helps with combat.)

initiative.sh, by contrast, is designed to be there when you need it, give you what you're looking for as quickly as possible, and let you get back to telling your story.

Text-based interface

First, initiative.sh eschews menus in favour of a text-based interface that speaks plain English. There's no way to predict the twists and turns your session will take, so it's important to have everything you need at your fingertips at all times. Jumping back and forth between the inn generator (inn), spell reference (Fireball), and rolling death saves for the entire tavern (15d20) is super easy. What's more, the application runs entirely in your browser, so there's no lag or dropped connections to interrupt your flow.

A design inspiration for initiative.sh is Zork, an early text-based adventure game of "you are likely to be eaten by a grue" fame. The player would interact with the game using plain English commands that range from simple ("go north") to complex ("open the bag and get the lunch").

In that vein, initiative.sh prioritizes discoverability of commands through a robust autocomplete and terms that can either be clicked or typed. There isn't yet enough feature complexity to support or require phrase-based commands, but that will evolve over time.

Persistence

initiative.sh solves the problem of forgetting to note down generated content with a journal feature. Typing save will save the last generated item to your in-browser journal for future reference. An upcoming persistent scrollback feature will also allow you to refer back to past sessions by simply scrolling up on the page.

Cloud sync will keep your games in sync between computers and ensure that you never lose a journal entry.

Cloud sync is still in development and will be a premium feature.

Context

Because initiative.sh tracks location of the party and the in-game passage of time, it can offer suggestions that are geared to your current environment. Spending the night in a forest? Random encounters will tend towards nocturnal forest-dwellers. Walk into an dive bar in the docks district? Expect the patrons to be a bunch of sailors down on their luck.

Context is still in development.

Integrations

With context comes stage management. initiative.sh will be able to integrate with Spotify to change the music when the party strikes out into the wild or is jumped by a group of bandits, or with Home Assistant to dim the lights in the game room as the sun sets. Custom integrations will also be possible.

Integrations are still in development and will be a premium feature.

Technical details

Since this blog skews towards all things tech, I'll be following up with more posts about technical aspects of the project as the fancy strikes. A quick overview seems in order, though:

initiative.sh is primarily written in Rust and compiled to WebAssembly. It runs entirely client-side and is hosted on Cloudflare Pages, though a few future dynamic features such as integrations and cloud sync will use Cloudflare Workers.

A fun side effect of writing the project in Rust is that I was able to start start developing it as a command-line application and cross-compile to WASM as development continued. It still works at the command line, but the introduction of rich features like clickable links and autocomplete have pivoted my development to web-first. I currently have no plans to release it as a standalone application.

It requires surprisingly little Javascript glue (just a hundred lines or so) to provide a rich in-browser interface for the WASM bundle.

What's next?

I finally have a product that is useful and gives a reasonable idea of the direction I am headed, but it's far from complete. I am building this thing for myself, but I also want to nurture a community to help guide development. I've laid out a lot of my pie-in-the-sky goals for the project, which no doubt will evolve with input from others.

Ultimately, I designed this project from the ground up to require minimal ongoing maintenance. Everything from business model to code to server architecture were chosen with the goal that the project would be able to endure more or less indefinitely without my active participation. I want to build things that will endure, and I don't want my self-employment to regress into 24/7/365 on-call shifts.

As always, watch this space for more to come.