Stuff Markdown
The Stuff Markdown specification: how Stuff writes Tasks as plain Markdown task lists with status, Plan, Deadline, Tags, and Notes.
Stuff Markdown is the plain-text format Stuff uses when you export or copy Tasks, and the format it reads back when you paste or drop them in. It's regular Markdown, so an export looks right in Obsidian, GitHub, Bear, or anywhere else Markdown shows up, and it carries a Task's Plan, Deadline, Tags, Notes, and more in a way any app can read.
This page is the full specification, version 1. If you're just exporting a List, Exporting Tasks is all you need. This page is for the curious, and for anyone who wants their app to read or write Stuff Markdown too. Developers can find the spec, a shared test suite, and ready-made Swift and JavaScript parsers on GitHub.
Try it
Type or paste some Stuff Markdown below to see how it reads, as Stuff items and as JSON. You can also try pasting the Stuff Markdown directly into your own Stuff app to see how it works.
Stuff Markdown, version 1
Weekly shop. Costco on Saturdays
Buy milk
2% if they have it Check the date
Compare cereal prices
Water the plants
Pick up the cake
Order the cake
Buy flowers
For Saturday's party
Balloons
Candles
The basics
- Plain Markdown first. Every Stuff Markdown file is valid CommonMark with GitHub-style task lists, so it reads well even in apps that know nothing about Stuff.
- English labels, always. Labels like
Plan:anddependent onare never translated, whatever language Stuff is in, so any app can read any export. Names, Notes, and section titles stay exactly as you wrote them. - ISO dates. Dates are always
YYYY-MM-DD, and times are 24-hourHH:MM, so2026-03-04means March 4th everywhere in the world.
Structure
A Stuff Markdown document is made of these pieces, in this order:
- Version marker (optional):
<!-- stuff-markdown: 1 -->on the first line. Markdown apps hide it. Full exports include it; a single copied Task leaves it out. - Title (optional):
#followed by the name of what was exported, such as a List (with its emoji), a Space, or a view like Today. It can carry the same details as a Task line, with its Notes on the lines below it as>quotes and a blank line after them. - Items: one line per Task, List, Heading, or Space, in the order Stuff shows them.
- Sections (optional):
##followed by a section's title, such as a Heading, a day in Upcoming, a Tag, or Completed. A Heading's section title carries its details and Notes just like the document title. A section with no items can still appear, the same way an empty Heading does in Stuff.
Item lines
Each item is one line: a marker, the name, then its details in a fixed order.
- [ ] Name (dependent on "Other Task") *Plan: โฆ* **Deadline: โฆ** #Tag (repeats โฆ)
Every detail is optional, but when present they always come in this order.
Status
| Marker | Status |
|---|---|
- [ ] | Available |
- [x] | Complete (- [X] is read too) |
- [/] | Cancelled |
- [~] | In progress |
- (no box) | A Space, which can't be completed |
Lists and Headings use the same checkboxes as Tasks.
Details
| Detail | Written as | Notes |
|---|---|---|
| Dependency | (dependent on "Order the cake") | The name of the Task this one waits on. |
| Plan | *Plan: 2026-10-24* | Add a time when the Task has a reminder: *Plan: 2026-10-24 09:00*. Times are local, with no time zone. |
| Someday | *Someday* | Written instead of a Plan. |
| Deadline | **Deadline: 2026-10-31** | |
| Tags | #Errands #DeepWork | Spaces are removed from Tag names, so "Deep Work" becomes #DeepWork. |
| Repeats | (repeats every week on Saturday) | A readable description. Repeats on specific dates list every date: (repeats on 2026-11-12, 2026-11-19 and 2026-11-26). |
| Extensions | <!-- id: 7Kc2 --> | Room for details a later version adds. Apps that don't know one skip it. |
Notes
Notes go on the lines right below their item, each line quoted with > and indented two spaces so Markdown apps keep them inside that item:
- [ ] Buy milk
> 2% if they have it
> Check the date
A blank line inside Notes is written as > on its own.
Escaping
If a name contains something that looks like a detail, such as #1 at the end, *Plan:, or <!--, Stuff puts a backslash in front of it (\#1), so it stays part of the name. Markdown apps hide the backslash. When reading, a backslash before #, *, (, <, or another backslash is removed.
Reading Stuff Markdown
Stuff reads every detail above when you paste or drop text into a List, with a few rules that keep other kinds of Markdown working just as they did:
- Only exact matches count. A detail is read only when it matches this page exactly and sits after the name. Anything else stays in the name, so a Task like "Call mom (urgent)" keeps its parentheses.
- Tags must already exist.
#Errandsis added only when you have a Tag with that name, ignoring spaces and capitalization, so#deepworkmatches "Deep Work". Stuff never creates new Tags from a paste: a#Tagyou don't have moves to the end of the Task's name, and the rest of its details are still read. The playground above can't see your Tags, so it shows every#Tagas one. - Dependencies are found by name, first among the Tasks you're pasting, then in the List you're pasting into. If none match, the dependency is skipped.
- A Task's own Plan and Deadline win over the view you paste into. Tags are added to the view's Tags.
- Repeats stay in the name for now. Stuff doesn't import repeats yet, so the Task is created without repeating and keeps its
(repeats โฆ)text at the end of its name. The same goes for anything else Stuff can't import, like a Tag you don't have. - Extensions are skipped. A trailing
<!-- โฆ -->comment never ends up in a name, so an export from a newer version of Stuff still imports cleanly. - Titles, sections, and Space lines are skipped. Stuff creates the Tasks; it doesn't recreate Headings or Spaces from an import yet.
- Older exports still work. Stuff also reads its earlier format, with dates like
10/24/26and Notes written as>.
Versions
| Version | Released | Changes |
|---|---|---|
| 1 | October 31, 2026 (Stuff 2.4.6) | The first version: English labels, ISO dates, repeats, quoted Notes, extensions, and the version marker. |