The idea
NapkinBook is one big canvas where you keep everything a forecast is made of, side by side: your notes, the charts of what’s happened before, the tangle of things pushing the odds one way or the other, and a live number at the end. It’s a drawing board where the boxes do math.
The number is what you’re after; everything around it is the proof. You’re capturing how a probability came together, so a year from now you can open the board and see exactly why you thought what you thought.
- Data source
- A circle. A number, or a file.
- Operation
- A square. It computes.
- Wire
- A line. It carries a number.
- Group
- A dashed frame. It collapses.
The canvas
The toolbar sits at the bottom. Pick a tool and the canvas does that one thing; hit Esc to go back to Select. Click something and its settings show up on the side; click away and they’re gone. That’s the whole thing.
| V | Select | Pick, move, resize. Esc always brings you back here. |
| H | Pan | Drag the canvas around. Or hold Space, or use two fingers. |
| D | Draw | Freehand ink. The pen always draws, whatever tool you’re on. |
| T | Text | A note or a label. Click to drop one, or drag out a box. |
| O | Data source | A circle holding a number, or a dataset you load from a file. |
| R | Operation | A square that does the math. Pick what it does in the settings. |
| A | Wire | Connect two things. Run it onto a value and it carries the number. |
| C | Chart | A plot. Empty until you wire a value into it. |
| G | Group | Wrap a selection in a dashed frame you can name and collapse. |
On an iPad, the pen always draws and ignores your resting palm. One finger works whatever tool you’ve selected; two fingers pan and pinch to zoom. Everything you tap is sized for a thumb.
Data sources
A data source is a circle, the raw input everything else on the board reads from. It holds one of four things, and you pick which in its settings.
| Number | A number you type in: a constant or a guess. Double-click the circle to edit. |
| Dataset | A file you import: rows you can query, profile, and chart. See Datasets. |
| View | A saved query over your data, its own live table. Shows up as a dashed ring. |
| Prior | A base rate you set yourself, with a weight for how much it counts, pooled into a forecast. |
Whatever it holds, every node (a data source, an operation’s result, even a collapsed group) puts exactly one number on its edge. That’s the whole trick: if something has a value, you can wire it into anything that takes one. Everything connects to everything.
Operations
An operation is a square that takes the numbers wired into it and spits out a new one. Drop one with R and pick what it does in the settings. It stays a square, so the canvas always reads the same: circles hold a value, squares do the math.
Arithmetic
Sum a − b + c | Adds up everything wired in. Each wire’s ± sign says whether it adds or subtracts. |
Multiply a × b × c | Multiplies its inputs. Signs don’t matter, but a per-wire × k still carries through. |
Divide a ⁄ (b · c) | One input divided by the rest: a ratio or per-unit number. Flip which input sits on top; divide by zero and it reads “—”. |
Pool remainder | A running-balance check. Adds up everything upstream, money in and out, and shows what’s left. |
From data
Base rate s ⁄ t | How often a wired series meets a condition, straight from the data. Pick the column and test in the settings; it anchors a combine. |
Aggregate one stat | One number out of a wired column: mean, median, last, min, max, or sum. |
Trend Δ ⁄ period | Which way a wired series is heading: its growth rate or slope per period. |
Probability
Push ± nudge | A nudge to the odds, up or down. It adds to or subtracts from the base rate inside a combine. |
Combine → P | The forecast itself: your base rate plus every push, kept to a real probability that moves as you tweak the inputs. |
Money over time
Interest P·(1 + r⁄n)ⁿᵗ | Grows a wired amount over time, simple or compound, with optional regular contributions. |
Amortize P·i ⁄ (1 − (1+i)⁻ᴺ) | A regular-payment loan: put in the term, rate, and principal, get the fixed payment back out. |
Credit card month by month | Paying down a balance: a fixed payment or a percent minimum, run all the way to zero. |
Wires
A wire connects two things. Draw it onto something with a value (a node, a chart, a collapsed group) and it carries that number into whatever’s on the other end. Draw it onto a plain shape or an image and it’s just an arrow; it doesn’t carry anything.
Two things live on the wire itself. Edit them right on the wire, or in the settings:
| ± sign | Whether the input adds or subtracts. Sum adds them up by sign; pool uses it to work out what flows through. Multiply just ignores it. |
| × k | Scales the value before it lands: for a weighted sum, a share of a total, or a unit conversion. Stacks with the sign. |
Drag the line to bend it, drag a bend to move it, double-tap a bend to get rid of it. Curved, angled, or stepped: pick the wire’s shape in the settings. Move a node and every wire on it redraws itself.
Charts
A chart starts empty until you wire a value into it, then draws whatever you gave it. Six kinds, all shapes you already know how to read. Timeseries, scatter, histogram, and forecast work now; tracker and fan are coming soon. Wire in a dataset or view and it queries the rows live; wire in a combine and it shows the forecast.
| Timeseries | A line of history from whatever series you wire in. Switch to bars or a filled area in the settings; that changes the look, not the numbers. |
| Scatter | Two number columns plotted against each other, one dot per row, for spotting a relationship. Pick the x and y columns, or let it grab the first two. |
| Histogram | The shape of one column: how its values are spread out. It bins them for you, and you can nudge the bin count. |
| Forecast | Reads a combine live: your estimate, an uncertainty band around it, and a bar chart of which inputs move it the most. |
| Tracker Soon | Your own probability over time as you head toward the resolve date. |
| Fan Soon | A projection that fans out from your history: low, middle, high. |
Groups
Select two or more things and hit CtrlG to wrap them in a dashed group frame you can name. While it’s open, whatever sits inside is in the group; drag something in or out and it updates.
Collapse the frame and the whole thing folds into a single circle you can wire like any other value. It hands out the group’s result, the number from its last operation, or just the sum if it’s a loose pile, so a finished chunk of work becomes one clean input for whatever’s next.
Valid
Valid: Two or more elements
Select 2+ things and hit CtrlG. The frame gathers up whatever’s inside it.
Valid: A group inside a group
Group something that already has a group in it and they nest: the inner one works out first.
Not a group
Not a group: A single element
Grouping needs at least two; one thing on its own has nothing to gather.
Not a group: Frames that just overlap
Overlapping doesn’t nest them. Select both and CtrlG if you want one really inside the other.
Something’s in the group when its center is inside the frame. Just clipping the edge doesn’t count.
Datasets
Four ways to get data onto a board, all from the Data panel: drop in a file (CSV, TSV, JSON, or Parquet), paste a link to one, search FRED by name (unemployment, CPI, the yield curve), or grab a ready-made one from the starter library. However it arrives, it lands as a dataset, parsed into a fast database that runs entirely in your browser. Nothing is uploaded; your data stays as local as the board it’s on, and each dataset remembers where it came from.
The starter library is a hand-picked set of reference classes: US recessions, thousands of scored polls, stock-market data back to 1871, world inflation, Atlantic hurricanes, earthquakes, and more, grouped by topic and tagged with the base rate each gives you. Nothing is stored or bundled: a tap grabs the raw source and streams it straight in. When the raw data isn’t quite ready to read a base rate off, it builds saved queries to get it there (the polls pick up an error column, the hurricane tracks collapse to one row per storm), so you can see how the number was worked out.
Open a dataset and it opens on its shape: every column’s type, missing and distinct counts, and range, worked out in one pass. A Preview tab holds sample rows, a SQL console sits below. Query your data by name in plain SQL, then filter, sort, and copy any cell, row, or column straight out of the results.
Save a query and it becomes a view: a table of its own you can profile, preview, and drop onto the canvas as another source. A dataset shows as a solid ring, a view as a dashed one. Wire either into a chart to draw it, or into an operation to crunch it.
Forecasting on the canvas
Everything above is the vocabulary; here’s what it’s actually for. A good estimate is really just a base rate you nudge for what’s different this time, and the canvas keeps both halves in front of you at once.
-
Start with a base rate
How often has this kind of thing happened before? Chart it. That rate is where you start from, not where you land.
-
Sketch what’s different this time
Lay out what’s pushing the odds up or down. Each becomes a data source or a push, and the way they connect is your reasoning, right out in the open.
-
Wire it into a number
Pool it into a combine and read the probability off it. Change one input and the number moves. The number comes out of the picture, so the picture is what you argue about.
-
Leave a paper trail
Jot your notes. Write out the reasoning. Say where the numbers came from. When the question resolves, the board still tells you why you called it, and that’s how you get better at this.
Categorical forecasts
A combine doesn’t have to boil down to a single probability. In its settings, switch the output from binary (the chance of one thing happening) to categorical, and instead you get a set of named outcomes with probabilities that add up to 100%.
Each outcome gets its own uncertainty band, so in a multi-way race you see the spread on every option, not only the front-runner.
Two more output types are in the works but not live yet: distribution (a number given as a low / middle / high range) and timeseries (a path over time). You’ll see them in the list, greyed out, until they’re ready.
Presentation
A finished board shows the whole argument at once, which is what makes it hard to hand to someone. Present turns it into a guided tour: a set of stops the camera flies between, one idea at a time, so whoever’s watching gets to the number the way you did.
-
Open Present
The Present button, at the top of the board, opens the step editor. Your walkthrough saves with the board, and you can keep more than one: a bull case and a bear case over the same picture.
-
Add the stops
Pick a group or element and hit Add to presentation. Each becomes a stop the camera frames on play. Reorder with the arrows or ⌥↑ / ⌥↓, and add a note; it rides along as the caption.
-
Show as you go
If a stop points at a group, the eye toggle opens it just for that stop: folded up otherwise, open right when you’re talking about it. Tick “Start with a whole-board overview” to open on the full picture first.
-
Play
Hit Play and the camera flies stop to stop. Click or → forward, ← or a left tap back, Esc to exit. Pick a Focus style to quiet everything but the stop you’re on.
Focus
One focus style covers the whole show: it sets how much of the rest of the board to hold back so the current stop carries the room.
| None | The whole board stays lit; the camera framing alone leads the eye. |
| Dim | Dims everything outside the stop, so the focus reads across a room or a screen-share. |
| Outside | Hides everything outside the stop; just the current one is left. |
| Wired | Keeps the stop and whatever’s wired into it, so a node shows up with only its inputs. |
Mirror your screen
No walkthrough yet? You don’t need one. In the same Present dialog, hit Mirror my screen and whatever you’re looking at goes out live: everyone following sees what your camera frames, moving as you pan and zoom. What-if sliders and annotation work here too, so you can talk a board through and mark it up without authoring a single stop.
Mirroring and a walkthrough aren’t either / or. Start a mirror to set the scene, pause it to play the deck, then pick the mirror back up when you’re done: the room follows the whole way through.
Remote & stage
Run the show from your phone. The Remote button pops up a QR code; scan it and your phone becomes a presenter’s remote: a live view of where you are, a thumbnail of what’s next, your speaker note for this stop, and forward / back buttons. The laptop on the projector follows along.
The same dialog gives you a stage link too: a clean, view-only screen that follows the show full-screen, so what’s on the projector needn’t be what’s in your hand. Close the laptop and your phone can run the stage on its own.
The remote is more than a clicker. Each of its tools has a job while you talk:
Annotate
Draw straight over the live board. Pick a pen or a highlighter and your ink goes out to the whole room as you make it. It’s a scratch layer, not part of the drawing: erase a stroke, clear the lot, or just move to the next stop and it wipes itself, so nothing ever lands in the saved board.
My notes
A private scratch pad for the stop you’re on: the number you want to hit, the point not to forget, whatever you’d jot on a cue card. Only you ever see it, and it saves with the board, so it’s waiting for you the next time you present.
Audience aside
The mirror image of My notes. Type a short footnote for the current stop and it shows up for everyone: on the stage screen and on every follower’s device, marked with a ✳. Use it for the caption or the caveat you want the room reading while you talk.
Drive the main display
Got an edit link? Flip the remote from Present to Edit and turn on Drive main screen. Now panning and zooming on your phone moves the board on the big screen, so you can walk the room through a live board by hand with no stops authored at all. It only steers the camera; the board itself stays put until you actually edit it. Flip back to Present whenever you like.
Live controls
On each stop, the remote builds its controls from what’s in frame: a collapsed group becomes an Open button, a plain number becomes a what-if slider. Drag the slider and the number moves live for the whole room. It’s a temporary overlay, though: it snaps back when you switch stops or end the show, so the board file is untouched.
None of it is baked in: the walkthrough lives alongside the board, so you can keep editing the picture and it re-frames whatever it’s pointing at. Turn on Readable on large screens for a projector or a shared display.
Keys & touch
| Undo | CtrlZ |
| Redo | Ctrl⇧Z |
| Duplicate | CtrlD |
| Copy · Cut · Paste | CtrlC · X · V |
| Select all | CtrlA |
| Group | CtrlG |
| Delete | ⌫ |
| Bring to front · back | Ctrl] · [ |
| Deselect | Esc |
| Zoom in · out | Ctrl+ · − |
| Reset zoom | Ctrl0 |
| Fit to screen | 1 |
| Copy board as image | Ctrl⇧C |
| Toggle help | ? |
| Use the active tool | one finger |
| Pan & zoom | two fingers |
| Draw | pen |
| Edit / expand | double-tap |
| Actions menu | long-press |
| Select | V |
| Pan | H |
| Draw | D |
| Text | T |
| Data source | O |
| Operation | R |
| Wire | A |
| Chart | C |
| Group | G |
Boards & saving
Each forecast is its own board, and the boards list is home base. Boards save themselves as you go (the little indicator in the corner shows the last save), and they live entirely in this browser.
Export any board to a file to back it up or move it to another computer, then import it on the other end. Ctrl⇧C copies the whole board as an image to drop into your notes or a write-up.
The board menu, top-left, has the per-board settings: light or dark and a few color palettes, snap-to-grid, snap-arrows-to-objects, Readable on large screens, copy-as-image, the keyboard reference, and a link back to this guide.
FAQ
What is NapkinBook?
NapkinBook is a free, local-first computational whiteboard: an infinite canvas where you wire data, math, and probability into a live model. Circles hold numbers, squares do the math, and wires carry a value from one node to the next, so a model reads as a diagram instead of hiding in spreadsheet cells.
How is NapkinBook different from a spreadsheet?
A spreadsheet buries the logic in cells and goes stale. In NapkinBook the logic is the diagram and it stays live: change one input and everything downstream recomputes the moment you let go. You get live recalculation like a spreadsheet with the readable structure of a diagram, and you can hand it to someone without it breaking.
How is NapkinBook different from Excalidraw, tldraw, or Miro?
Those are freeform canvases that do no math. NapkinBook computes, handles probability, and pulls in real data. A useful split: reach for Excalidraw when you just need to diagram, and reach for NapkinBook when you are actually thinking a quantitative problem through.
Is NapkinBook free?
Yes. NapkinBook is free and local-first, with no account and no paid tier. It runs in your browser and stores boards locally, so there is no sign-up wall and no usage metering.
Do I need an account, and is my data private?
No account. NapkinBook is local-first: your boards live in your browser and nothing leaves it unless you choose to share a board. Shared boards are end-to-end encrypted, so the sync server never sees your content.
Can I use NapkinBook on an iPad?
Yes. iPad with a stylus is a co-equal primary device. The pen draws, one finger drives the active tool, and two fingers pan and zoom. Touch targets in the app chrome are sized for fingers.
What can I forecast with NapkinBook?
NapkinBook draws probability natively: base rates, p10/p50/p90 fans, and Monte Carlo bands, so a forecast reads as a range rather than a single fabricated number. Common uses are runway and burn, market sizing, weighing a bet, and base-rate research.
Can I bring in my own data?
Yes. Import a CSV, pull from a URL or FRED, or query your data in SQL. A chart renders whatever node you wire into it, and the underlying numbers stay live, so updating a source updates everything downstream.