Tana
A weekend of work, and real gaps remain.
An outliner where every node can have a type with fields, so notes become structured data without leaving the outline.
Build me the typed outliner that replaces Tana. The idea is genuinely novel and worth understanding before you build: **you write freely, then apply a type to a line, and it becomes a record with fields — without moving it out of the outline.** Structure emerges from writing rather than being designed in advance. STACK - Node 20+ with Fastify, server-rendered HTML with a good deal of vanilla JS - SQLite through better-sqlite3, WAL mode, FTS5 across nodes - Caddy in front THE DATA MODEL, WHICH IS THE WHOLE THING - nodes: id, parent_id, position, body_md, created_at, updated_at — **everything is a node, including what other systems call a document, a tag or a field value** - types: id, name, fields_json — the field definitions for a type - node_types: node_id, type_id, applied_at — a node can have several - fields: node_id, type_id, field_key, value_node_id, value_text — **a field value is usually another node, which is what makes the graph work** - queries: id, name, definition_json — a saved query is itself a node APPLYING A TYPE - Type a symbol, pick a type, and the node gains that type's fields inline underneath it - **Existing nodes can be typed retroactively without moving them.** That is the feature; a system that requires choosing a template first is a database with extra steps - Adding a field to a type shows it on every node of that type immediately, empty, without a migration QUERIES - A query is a node that renders as a list: all nodes of this type where this field matches, sorted - Rendered inline wherever it sits, live - **A query result must be editable in place.** Editing a task in a list and having it update where it actually lives is what makes this feel like one system rather than two - Cap results and paginate; an outline with a hundred thousand nodes will find every unbounded query THE OUTLINER ITSELF - Keyboard: indent, outdent, move up and down, collapse, zoom into a node. These must be instant and they must never lose the cursor - Zoom is important: any node can be the root of the view, which is how a large outline stays navigable - Undo across structural operations, which is harder than it sounds and unforgivable to get wrong PERFORMANCE, WHICH IS WHERE THIS BREAKS - **Render only the visible window.** An outline of tens of thousands of nodes cannot be in the DOM - Position as a sparse ordering so a move is one write, not a renumber - Index parent_id and position; every read is a tree walk SAFETY - Export the whole outline as nested markdown and as JSON, and mean it. **A structure this specific is a lock-in risk, and the export is what makes it not one** - Every change into an append-only log, so an accidental collapse-and-delete is recoverable WHAT MATTERS MOST Types applied retroactively, editable query results, and windowed rendering. The first two are the idea; the third is whether it is usable after a year.
What you lose
- Supertags that turn any node into a typed record
- Live queries over the outline as a first-class feature
- Voice capture that files itself correctly
- A model nobody else has implemented well
If you would rather not build
- Obsidian with a properties and query plugin
- A nodes table with a parent id, which is the model in one afternoon
The escape hatch
open source · no votes, no paid placement
AppFlowy
$0Open-source workspace with typed databases and documents.
AppFlowy-IO/AppFlowyfree · open source
Why this verdict
our own opinion · changed only by a person
54/100
Verdict kinda at 54: the data model is elegant and small, and the editor is a real piece of frontend work. The export requirement is stated because this shape of data is unusually easy to be trapped in.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.
Questions about Tana
answered from the record above
Is Tana free?
No — the plan we track is $10 a month. Core at $10/month billed annually, $14 monthly.
Can you replace Tana by building your own?
ALMOST. A weekend of work, and real gaps remain. Replacement score 54 out of 100, build time a weekend. Read what you lose before you decide.
How much does Tana cost?
$10 a month on Core — $120 a year. Recorded 14 Aug 2026.
What do you lose by replacing Tana?
Supertags that turn any node into a typed record; Live queries over the outline as a first-class feature; Voice capture that files itself correctly; A model nobody else has implemented well. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Tana?
Yes: Logseq, AppFlowy. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

