Any bullet can generate or compute. Type {2d6} in a point, click away, and it becomes a
live pill. Click the pill and it re-rolls. That single loop (type braces, get a live thing,
click it, it answers again) is the whole idea.
→ Try it now · no account, no install, runs in your browser.
Pointliner is a tool for thought wrapped in an outliner. It replaces the stack of single-purpose tools a thinking session otherwise juggles: the calculator, the dice roller, the generator tab, the spreadsheet, all living inside the same document as your notes. Generation and computation are writing primitives here, not a separate app.
Pointliner is not a second brain. It does not want to be your archive, your PKM, or your
"capture everything" system. It is a generative scratchpad, a place where thinking happens, not
where it goes to retire. A pill is live on this look: {2d6} answers again on click, {= sum(cost)}
is never stale, and {roll: #idea} pulls a past thought back into present attention as material
for what you are doing right now.
The whole app is one index.html. It runs with the wifi off, needs nothing installed, and keeps
your work in files you own. Save it anywhere, sync it however you like, and export everything to
Markdown, plain text, OPML, or a self-contained runnable HTML you can hand to anyone.
| You type | You get |
|---|---|
{2d6} |
a dice roll (click to re-roll) |
{sword | shield | potion} |
a random pick from the list |
{= 2 * 19} |
a math result: 38 |
{= sum(cost)} |
the total of a cost property across child points |
{5 to 10} |
an estimate: 7.2 (5 to 10) with a distribution sparkline |
{shuffle: a | b | c} |
a deck you draw from without replacement |
{roll: #npc} |
a random point from your own outline (tag some points, roll on them) |
That last one is the pill no other tool has: the table it rolls on is your own living document, so your campaign, your backlog, or your idea list surprises you with its own contents.
To edit a pill, click the text next to it. The pill unfolds back to the {…} you typed; fix it
and click away.
The calculator you keep re-punching. Give a few points a cost property, drop {= sum(cost)}
on the parent, and the total follows every edit. Declare {budget := 500} once and change it
anywhere; every dependent number recomputes. Add a check (sum(cost) <= budget) and the document
flags the overflow the moment it happens.
The list you stare at when stuck. Tag a few points #idea and type {roll: #idea}. The
document resurfaces a past thought into your present attention, a surprise from your own material,
not a browse of a maintained graph.
The solo-RPG table you have to leave your notes for. Dice, oracles, name generators, decks, journals, and your own cast of characters as the random tables, all in one document that rolls and tracks state for you. Pointliner was born here, and the worked examples (thirteen cases with importable demos) are the fastest way to see the whole engine at work.
And underneath it all, a full outliner: nested points, markdown, to-dos with states and priorities,
per-point notes, properties, [[links]] with backlinks and live mirrors, a multi-document workspace
with whole-folder search, a daily journal, an agenda with timeline and calendar views, interactive
tables and bases, and more. The complete feature list covers everything.
What makes it different is not the list: it is that every bullet can generate or compute.
Strong tools exclude on purpose. These are commitments, not gaps on a roadmap:
- No accounts, no cloud backend, no team collaboration.
- No build step, no runtime dependencies. The app stays one file.
- No plugin code execution. Extensibility is data (grammar rules, variables), never programs.
- No second syntax. Everything generative or computed speaks the one
{…}language.
If you need real-time team editing, a cloud workspace, or WYSIWYG rich text, Pointliner is deliberately not your tool, and it will not grow into one.
- Open it: zntznt.com/pointliner, no install, no account.
Or download
index.htmland open it from disk. Same app either way. - Type: Press
Enterfor a new point,Tab/Shift+Tabto indent or outdent. Type{2d6}and click away to see your first pill. - Learn: The
?button (bottom right) is the always-there cheat sheet. The Concept guide (in the File menu /?panel) explains every feature with examples.
The pill guide covers the two engine families behind everything: generating text and computing numbers, with a cookbook of copy-paste recipes.
The document is an in-memory tree of plain-text nodes. A pill is a markdown-style token in that text plus a record in a sidecar array; plain text is always the source of truth. The view is virtualized (only a screenful of rows is ever in the DOM), so it stays comfortable past 10,000 points. No framework, no build step; rendering is hand-written per-line markdown plus pure cores (parsers and evaluators) that are unit-tested in plain Node.
Measured performance and a re-run harness live in guidance/performance.md.
CLAUDE.md is the entry point for contributors. Run node --test tests/test.mjs
before and after touching any parser or evaluator. The guidance/ directory carries
the design language, UX standard, and architecture notes that every change follows.


