iCloud Numbers as Virtual Tabletop for Play by Post Roleplaying

I’ve recently started DM’ing on a Discord Play by Post server. I’ve also always been a DM that loved to work with props, battle maps, handouts, miniatures, etc … I put ridiculous amounts of work into preparing and finetuning encounters (it’s like leisure, relaxation for me) and would also like to bring that to my online games. So I went looking for options.

First I went looking for existing tools but none of them really pleased me. Either they have too many limitations (Google Spreadsheets), need a paid subscription (Roll20), aren’t actively supported or developed no more (3DVTT), or just didn’t work on mobile which is a requirement for me.

Until I thought to myself “why not try iCloud Numbers?”, the online variant of the Apple spreadsheet application. I’m fairly settled in the Apple ecosystem with a Macbook, iPhone, iPad, etc … so might as well give that a try. And damn, it works really well … a lot better than expected.

It’s important to note that you don’t need an Apple device to use this method, all you need is your browser, on whatever platform you wish, MacOS, Windows, Linux, a Tablet … it all works.

Here is a rundown of how I managed to prepare my Numbers battle map for online play.


Now let’s get some things out of the way, clean up the workspace and get it ready for our battle map.

Make sure that snapping is enabled on the “Guides” tab in the settings.

Then position your map in the top-left corner of your workspace, it should snap right into place and leave a small margin which is fine.

With that out of the way you also want to disable the grey headers and footers so your whole table is void of background colors. Make sure you’ve got your table selected and then set all values to 0 under “Headers & Footer”.

You also want to disable the name displayed on top of your table. This can be done by selecting the table and then on your right-hand side uncheck the “Name” option under “Table options”. And that leaves you with a simple table, ready to serve as your digital battle map.

Graphics/image support

All you need to do is place an image on your workspace and align (it snaps right into place!) the top-left corner with the top-left of your spreadsheet table. Then send it to the back and bam, your map sits behind your grid. All that’s left now is locking it in place so you won’t accidentally move it around.

Creating and aligning your grid

  1. Count the number of rows and columns on your battle map image
    (17 total rows and columns to “V” on my map)
  2. Drag the handles of your table until your table has the same number of rows and columns.
  3. Then resize the table to equal the width and height of your battle map, it again snaps right into place

🎉 All of a sudden you have a battle map with a perfectly aligned grid. That was easy right?

Sharing your map

Hit the share button in the menubar. Then you want to choose the “Copy link” option. Under “Share options” set the options so that anyone with the link can view the map but not allow them to edit the map. Then his share and copy/past the generated URL into your Discord channel. Your players will now be able to view the map, including realtime updates you make.


After you’ve created tokens it’s as easy as dragging them from your computer onto the workspace, resize them(again use snapping to perfectly resize it to fit into a cell!) and you can place it where ever you want.

Set the opacity of incapacitated or dead tokens to 50% or place a border around it. Really easy!

Our druid is in a pickle! Will he win the fight versus these ruffians? One down, two to go!

Bonus: spell effects, decals, and more …

Your wizard suddenly created a summoning circle! Did the rogue throw a smoke bomb? Smears of blood on the road? A bright light appears? Easy peasy!

As you can see there are many options, and since I haven’t found an easy solution that fits my need yet, I’m going to roll with iCloud Numbers for my online battle map needs for now.

Keep in mind however that there are many better solutions if you want to run a realtime online game where you are online at the same time. This solution, however, is perfect for my play-by-post needs and allows me to build good looking battle maps and share them with my players with little effort.

Engineering Manager at DataCamp, Father, Fantasy Roleplaying geek and Metalhead