ALMOST

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.

Promptfree, for everyone, and the only version there is
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

Logseq

$0

Open-source outliner with block properties and queries.

logseq/logseqfree · open source

AppFlowy

$0

Open-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

Interest · last 30 days

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

All 40 in Notes, docs & writing

Not sending yet

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

Esc