A plain-text format for plans
Write the plan. Sprig works out the rest.
Start a line with a mark. Indent to break it down. Sprig works out what’s done, what’s blocked and what you can do next, across as many files as the plan needs.
- Sync engineOffline queue@teo3d
- Release 2.0Migration guide1d^guide
- Release 2.0Keep the free tier?^tier
- Release 2.0Announcewaits on Migration guidewaits on Keep the free tier?
Tick Migration guide, or add an answer under the question, and watch Announce unblock. It runs the same Rust core as the sprig command, compiled to WebAssembly.
The whole language is nine marks. Each line starts with one.
Status
It works out what you’d track by hand.
Checklists record what you ticked. Sprig also works out what waits on what, how far along each branch is, and what can start now. None of it is written by hand, so none of it goes stale.
- Tests ^tests - Ship after:^tests
Ship waits on Tests.
What’s blocked
Give an item an anchor, point at it with after:, and anything waiting shows as blocked until it’s done.
- Kitchen x Strip out - Tiling est:3h - Paint est:2h
Kitchen: 1 of 3 done, 5h left.
How far along
Every branch adds up what’s under it, estimates included. Ticking a leaf moves every parent above it.
x Pack - Book a van ^van - Move after:^van
Ready: Book a van. Waiting: Move.
What’s next
Open, unblocked work, ranked by what’s in progress, priority and due date. It’s the question a plan exists to answer.
A big plan is a folder of small ones.
A graft line mounts another file as a branch. Progress, owners and blockers carry across, so a company plan is an index of team plans, each owned by the people who work it.
House 2027 @sam + [[kitchen]] - Insurance renewal
Kitchen @jo x Strip out - Tiling ^tiling est:5h - Paint after:^tiling
- Kitchen kitchen.sprig@jo1/3 · 5h
- Strip out
- Tiling5h^tiling
- Paintwaits on Tiling
- Insurance renewal
One parser in every tool.
The Rust core compiles to a native binary and to WebAssembly, so the terminal, your editor, a coding agent and this page give the same answer about the same file. No account, no server, no config file.
$ sprig next --limit 5 --today 2026-10-01 ~ Break clause at year three Oct 5 · in 4d !!! ~ Equipment loan paperwork Oct 7 · in 6d !! ~ Ventilation plan with the eng… Oct 12 · in 11d ~ Logo, second round Oct 14 · in 13d ? Who pays for the grease trap? Oct 5 · in 4d !!! 5 of 20 ready · 12 waiting · 2 questions
- PlaygroundToday
Edit a plan and watch it compute, in this browser. It runs sprig-core, the same Rust parser as the sprig command, compiled to WebAssembly.
- sprigToday
The command line: what’s next, what’s broken, what’s blocked, and one-line writes. It installs from source; the first release is v0.1.
- EditorsToday
sprig lspserves any editor that speaks LSP: problems as you type, completion, go to definition, hover and ticking. A VS Code extension and a Tree-sitter grammar follow in v0.2.- sprig mcpv0.3
Coding agents read the plan, find ready work and tick it, as file edits you review.
- sprig tuiv0.4
A folder of plans on one terminal screen, with vim keys.
Questions you’re about to ask
- Isn’t this xkcd 927?
- Yes, it’s a new format. None of the existing ones computes what’s blocked across files while staying readable in cat. If one does, open an issue and this page will say so.
- Why not Org-mode?
- Org does far more. Sprig does less on purpose, so it can be implemented from a spec in any language and read without Emacs.
- Why not Markdown checkboxes?
- They can’t say what’s blocked, and accepting both spellings would double every tool. An importer converts them once.
- Is this an AI thing?
- It’s a text format. Coding agents read and edit it the way people do, which is why status is computed instead of trusted. Nothing in Sprig calls a model.
- Does it need an account or a server?
- No. Plans are files. A shared playground link keeps the plan in the URL fragment, which browsers never send anywhere.
- Why Rust?
- It compiles to a small native binary with no runtime, and to WebAssembly for the browser, from one codebase.
- Is the format stable?
- It’s a draft. Spec 1.0 freezes it; after that, a 1.0 file parses the same way forever.
- What about my phone?
- Any text editor works today. A phone app for shared lists is planned for after 1.0.