Published July 14, 2020

Some brief context: this is an article about playing the game Ironsworn, by Shawn Tomkin. Ironsworn is great for a number of reasons, but one thing that stands out is that it has a very fun solo mode, where you create a story and play an RPG entirely by yourself. Notion is a powerful productivity tool that can do some cool things when used in an RPG context. This is a post about combining those two, seemingly separate things.


I've been a big fan of Ironsworn ever since it came out — it's got a distinct flavor that I think provokes some good fantasy, while still being easy to customize and adapt to create the world that you're most interested in. I have mostly run Ironsworn in a "traditional" RPG format, with me as a GM and a number of other folks as players. However, as I've experimented with it more, I've realized how much Ironsworn excels at providing a co-op or purely solo RPG experience. When I originally heard of solo mode, I was pretty doubtful — I had always assumed that other players were required in fun RPG games — but as I've tried it out, my perspective has changed completely.

Some of the folks who have been playing Ironsworn have posted some really incredible journals and notebooks that they use to record their journeys. Great examples include EmQueue's journal and ProzapGW's. These inspired me to find the ideal tool for my style of recordkeeping and RPG play. I knew that despite the beauty and classic look of those handwritten journals, I wanted something that was more internet-native. This was (a) because I knew I don't have the art skills to necessarily make the page come alive and (b) I really like the synchronization and backup capabilities that using an online tool give you. I had recently begun using Notion to organize my life in general, so I figured I'd give it a shot. In short, it's worked really well so far. Notion is flexible enough to not restrict you in how you want to organize your game, but it has the features to make it much more powerful than a simple notepad.

The Template

Solo Story Template

Feel free to copy this into your own Notion workspace for all your solo Ironsworn needs!

The Philosophy

There are a few key ideas that make up the design of this template:

Focus on the Story

The idea behind the whole structure is that you are generally paying attention to one section: the one titled The Tale — and the rest of the information is present on the side, ready to help you out. Ironsworn gets its magic from the fiction and the telling, not just the mechanics, so the focus is really on that living, growing document in the center. The Tale will grow as the story does, but things that you need throughout the telling (dice rolls and oracles) will always be within easy reach because they're right below it.

Everything on One Page

Switching between pages in Notion can take a second or two sometimes, so the goal is to make sure that you can access all of the key parts of your solo story just by scrolling. Generally, information that might need to be referenced but doesn't change a lot is at the top (like stats and assets), and the "action" — the current state of the story — is at the bottom. This means that you can quickly scroll to the top to reference something, and then all the way back down to continue with the game.

Glitch Embeds

You'll notice that, at the very bottom of the document, there are two widgets, one for rolling and another for accessing oracles. These are built with Glitch, which is a platform for easily hosting JavaScript-based apps. Thanks to Glitch's "remix" feature, it's easy to take these, make custom versions, and use those in your embeds instead (if you wish). The default ones included are from my Ironsworn Glitch, which should provide the basics necessary to have dice rolls and oracles only a click or tap away.

Other Cool Stuff

Although built in a hacky way, I'm quite pleased with the emoji-based progress tracking formula used for vows & other progress tracks. For posterity, this is it:

if(prop("Value") < 0, "Error, value must be >= 0", if(contains("EpicExtreme", prop("Rank")), if(prop("Value") > 40, "Error, ticks value must be <= 40", concat(replace(replaceAll(format(pow(10, floor(prop("Value") / 4))), "0", "🌕"), "1", ""), if(prop("Value") % 4 == 1, "🌘", if(prop("Value") % 4 == 2, "🌗", if(prop("Value") % 4 == 3, "🌖", ""))), replace(replaceAll(format(pow(10, 10 - if(prop("Value") % 4 == 0, 0, 1) - floor(prop("Value") / 4))), "0", "🌑"), "1", ""))), if(prop("Value") > 10, "Error, boxes value must be < 10", concat(replace(replaceAll(format(pow(10, floor(prop("Value")))), "0", "🌕"), "1", ""), replace(replaceAll(format(pow(10, 10 - floor(prop("Value")))), "0", "🌑"), "1", "")))))

This produces a set of 10 "boxes" that fill based on an input from elsewhere in the table. The moon emoji is used to represent these boxes since it has a convenient number of partially filled states, and the "Value" column is used for ticks when the challenge is Extreme or Epic, and represents boxes when the challenge is easier.