Changelog

What changed in createtodo, release by release.

Install It, Talk to It & the ct CLI

createtodo is now a PWA. Install it from the browser and it opens like a native app, complete with an offline-first service worker — your todos are there even when the network isn’t. Under the hood, each workspace now gets its own local database with automatic cleanup of ones you no longer use, and leader election between tabs was stabilized so background tabs stay quietly in sync instead of fighting for the wheel.

ct — createtodo from the command line

Meet ct, the new CLI. List, create, claim, and close todos without leaving the terminal — the same workspace, the same identifiers, the same todos you see in the app. It ships alongside a new OAuth flow for the remote MCP server, so you can connect createtodo to claude.ai as a connector and let an agent read and write your workspace securely.

Due dates that speak your language

The due-date input now understands natural language — and not just “tomorrow”: weeks, months, quarters, and years all parse. It sits right at the top of the popover and the context menu, focuses instantly, and the chip text rolls over like an odometer when a date changes. Overdue todos show their actual date with a red alert calendar instead of a vague “Overdue”.

Conversations on todos

Comments grew up into real discussions: threaded replies and emoji reactions, on an activity feed rebuilt from the ground up. A new actions menu on each comment keeps edit and delete one click away.

Find, preview, glide

Find in view filters the current list from the actions menu, with a proper input group and close button. Hovering a todo shows a preview card rendered like the real detail page, and on the detail page, Space toggles a subtodo preview without leaving the keyboard. You can also group by label now, and a new hold-slide-release gesture lets you press a row’s property menu, slide to an option, and release to pick it — one motion, no clicks.

Improvements
  • Creating a todo surfaces the list’s description as a conventions reminder
  • Right-click or long-press the create button to choose what happens after create
  • Status groups now order In Progress → Todo → Done → Backlog
  • Todo rows reserve the widest identifier’s width, so columns stop wiggling
  • Typing -- becomes an em dash in titles and descriptions
  • The todo timer rolls like the breadcrumb counter, at minute resolution
  • Same-minute activity runs are netted out, so the timeline shows what changed, not every keystroke of it
  • Assignee, label, and priority chips share one symmetric enter/exit animation
  • Markdown task lists render with real checkboxes instead of bullets
  • MCP and ct can filter todos by parent and label
Fixes
  • Switching lists no longer flashes the previous list’s sort order or the previous todo’s activity
  • Group and sort changes apply optimistically, instantly
  • Escape blurs a focused field before it closes the todo page
  • Shape streams keep syncing while the tab is hidden
  • Safari no longer gets stuck on phantom local-database locks
  • The description editor stopped duplicating typed content on reload
  • The subtodo chevron rotates as one icon instead of crossfading

Blockers, Agent Handoffs & One Archive

This release makes createtodo genuinely dependency-aware. Todos can now block each other: wire up a blocking relation and the app understands the order your work has to happen in. A new ready filter shows only todos with no unresolved blockers — the things you can actually start right now — and when you complete a blocker, createtodo announces which todos just became unblocked. Cycles are refused before they can form, both in the app and through the API, so your dependency graph always stays a graph.

Built for agents working alongside you

If you point an AI agent at your workspace, this is the release where it becomes a real collaborator. Todos gained structured fields — acceptance criteria, design notes, and free-form notes — so “done” has a definition an agent can check itself against. A new needs-human flag gives agents an explicit way to hand a question back to you instead of guessing. And a workspace_health report surfaces stale, orphaned, and under-specified todos, so the workspace an agent reads is the workspace you actually meant. The MCP server (now at 0.14) also learned compact paginated lists, description previews, relative date filters like “due this week”, and warns when a freshly created todo is too thin to act on.

Archive and trash, together at last

Archived and deleted todos now live in one tabbed view instead of two separate pages. Same breadcrumb, same layout, one place to look when something’s missing. Auto-archive also got an important fix — it was scoped wrong and never actually ran; completed todos now genuinely move themselves out of the way on the schedule your workspace sets.

Faster to move around

Press 1–9 to jump between lists from anywhere. A new per-view Show blocked toggle hides everything you can’t start yet. And the todo-page position indicator now counts within your current sibling group rather than the whole list, so “3 / 8” means what you’d expect.

Improvements
  • Due-date changes are now undoable, like moves and status changes before them
  • “Edit todo” joined the right-click context menu
  • Status settings were rebuilt Linear-style, with a backlog state type and an icon picker
  • Deleting a status now reassigns its remaining todos instead of stranding them
  • Detail-page sections are collapsible, with an animated chevron
  • Richer activity-timeline indicators and a restyled shadcn-marker look
  • Label chips were redesigned with size variants and tidier spacing
  • Completed todos animate out of the list, with a “N hidden” count left behind
  • Subtodo indent guides got rounded caps and flush alignment
  • “Add subtodo” is now “Create subtodo”, matching the rest of the app
  • Pure-white light-theme background
Fixes
  • Reparenting a todo now re-renders the list live
  • Blocked detection on the client agrees exactly with the server’s ready semantics
  • Rate limiting was consolidated and hardened across the API and MCP
  • The archive/trash empty states are vertically centered and inherit no stray prose margins
  • Breadcrumb header text is no longer selectable
  • On mobile, “create more” refocuses the title field immediately

Drag & Drop Rebuilt, Nested Paths & Resilience

Drag and drop has been rebuilt from the ground up on a single new engine that powers both the list page and the detail page. Drag a todo sideways to nest it under a sibling, drop it into another group and it picks up that group’s status, priority, assignee, or due date on the way in. The ghost follows your pointer faithfully, stays styled at the window edges, and Escape cancels the whole move mid-flight. Grouping by due date even works kanban-style — drop a todo into “Next week” and its date updates itself.

Your Inbox, your views

Inbox is now a true virtual view with its own per-user preferences. Sort order, grouping, and filters are remembered per list and per person, follow you between devices, and Inbox always stays pinned first. Archiving also takes care of itself now — completed todos move out of the way on their own, so there’s no manual archive button to remember.

URLs that mirror your tree

Todo pages now use nested paths: the address bar reflects the full chain from list to parent to subtodo, however deep you go. The breadcrumb renders every ancestor along the way, and hovering an ancestor shows a card with its status, identifier, and full title — no more guessing what a truncated crumb says.

Fly through the workspace

Press ↑/↓ (or j/k) on a todo page to step to the previous or next todo in exactly the order you left the list — your sort, your filters. A position indicator (4 / 59) shows where you are, on both detail and list pages. Mod+F filters subtodos right on the detail page, a new shortcuts dialog in the avatar menu lists everything your keyboard can do, and on touch you can long-press a status checkbox to open the full status menu.

Built to ride out bad networks

This release puts serious work into local-first resilience. The description editor now works fully offline. If the API has an outage, queued writes recover on their own once it’s back, and a visible indicator tells you when changes are still waiting to sync. If the local database ever gets wedged, the app surfaces a recovery screen with a “Reset local data” escape hatch, and stale local databases from older schema versions are cleaned up automatically. Deleted todos are purged after a 30-day retention window.

A leaner MCP

The MCP server got a major cleanup, published as @createtodo/mcp v0.10.0. Responses are flat and compact, with human-readable identifiers instead of UUID noise, todos can be filtered by keyword and date, and get_todo can embed relations — so agents see your workspace the way you do.

Improvements
  • Group by due date with preset and dynamic buckets, fully drag-and-drop enabled
  • Subtodos on the detail page can be drag-sorted and have their own sort-order selector
  • The “N hidden” count on the detail page is now clickable — reveal completed subtodos for one todo without touching your global setting
  • Completed-todo visibility filters gained “This week” and “This month” options
  • Canceled todos render with a line-through in lists and on the detail page
  • Labels got their colors back, shown as tinted dots on todo chips
  • Date chips show a calendar icon when a due date is urgent
  • Selectors persist across “create more” in the create-todo dialog
  • Comments can be added and deleted with undo/redo support
  • The activity timeline groups entries by calendar day and merges rapid-fire edits
  • Buttons, focus rings, and dark-mode input borders got a design refresh — outline buttons no longer sink into dark cards
  • Hover colors were unified across menus, rows, and buttons under one token
  • Dragging a group header is restricted to vertical movement, so groups can’t wander sideways
Fixes
  • Escape during a drag now only cancels the drag — it no longer also closes the todo page
  • The drag ghost keeps its rounded corners and shadow when dragged to the window edge
  • Inbox stays pinned first when reordering lists
  • New todos get their position assigned server-side, so simultaneous creates can’t collide
  • Duplicate sibling positions are compacted automatically on drop
  • Rapid status-icon clicks cycle from the optimistic state instead of skipping steps
  • The description editor no longer round-trips its own content or mangles paragraphs that start with markdown syntax
  • Dismissing the command palette with Escape keeps you on the todo page
  • Trash flow hardened: deleting a list cascades correctly to its todos
  • Copy as Prompt works on iOS
  • Activity history and relations sync reliably again and are included in pending-sync checks
  • Partial updates through the API no longer clear unspecified fields
  • The loading overlay waits for your view preferences, so lists don’t flash the wrong sort order

Detail Page, Command Palette & Activity

The detail page has been rebuilt from the ground up. A crisp breadcrumb replaces the old header, every selector sits on a single inline row that swaps on hover, and the status icon now wears a progress ring that fills as you complete subtodos. It’s calmer, denser, and faster to scan — and the list page now shares the same breadcrumb pattern, so the whole app finally feels like one place.

Command palette, reimagined

Open the command palette and just start typing. It searches across every todo in the workspace and lets you jump straight to one. Typing something that doesn’t match? A “Create todo” action is always waiting, ready to open the create dialog with your words already in the title — so a fleeting thought becomes a todo in a single keystroke.

Activity, back and better

Comments and history return to the detail page as a polished vertical timeline. You can see who did what and when at a glance — changes, discussions, and decisions living together in one quiet, readable stream.

Undo that keeps up with you

Undo and redo now cover the moves that matter most: dragging a todo to a new position, promoting a subtodo, wiring up relations. Change your mind freely — the app will catch you.

Focus on what’s active

You’re in full control of how long completed todos stick around. Set a cutoff per workspace, and a separate one for subtodos so parent views stay lean while you can still see recent wins in context. Your preference follows you from device to device.

Improvements
  • New “Copy as…” submenu in the todo context menu replaces Edit — choose title, markdown link, prompt, or plain identifier
  • Right-click a todo identifier to pick what clicking it copies by default; the choice syncs across devices
  • G A and G T navigation chords now work from anywhere in the workspace
  • Copying a todo as prompt now includes its comments for full AI context
  • Links inside descriptions open in a new tab
  • A subtle shimmer now plays over the description preview while the editor loads, so there’s no more flash of raw text
  • Creating a subtodo opens the familiar create-todo dialog with the list picker locked in
  • Nested subtodos show a dashed guide for every ancestor level, making deep hierarchies easy to trace
  • Quieter link-style buttons for list selectors and the “+ Subtodos” action
  • Hovering a todo row lets you swap between the status and identifier menus in one motion
  • Dragging a todo across groups now highlights the destination so you always know where it will land
  • The due-date picker marks your selected preset with a bullet and exposes a Custom option from the context menu
  • Block quotes in descriptions render in a warm serif pull-quote style
  • Legal pages have been restyled with clearer copy and friendlier typography
  • Empty states, keyboard shortcut labels, and dialog typography have all been given a pass
Fixes
  • Newly created subtodos reliably land at the bottom of the list
  • The create-todo toast no longer flashes a temporary identifier before the real one arrives
  • Chevrons on list selectors no longer spin every time a menu opens
  • Pressing Enter in a dialog title input now jumps focus to the description
  • Cmd/Ctrl+Z and Cmd/Ctrl+C work as expected inside dialog title inputs
  • iOS Safari no longer zooms in when tapping into a text field
  • The trailing empty paragraph after a list in the description editor can finally be deleted
  • The due-date popover’s close button no longer covers up the preset options
  • Description preview and the live editor now share the exact same box model, so there’s no shift when you start typing
  • Todo titles size themselves correctly on initial load
  • Spacing around the description on the detail page is symmetric
  • Title input typography in all dialogs matches the detail page
  • Progress rings skip canceled subtodos and stay hidden on parents that haven’t been started
  • Fixed a sync engine crash caused by an organization-scoped subquery
  • get_todo now returns subtodos, and save_todo keeps headings to a single level
  • Patched a drag-and-drop issue where rows could briefly mount twice

Markdown Descriptions & Performance

Descriptions and comments are now stored as markdown and rendered on the fly. Task list checkboxes work properly, formatting is consistent everywhere, and there’s no more flash of raw text when opening a todo.

Improvements
  • Drag and drop rewritten for smoother performance and fewer visual glitches
  • Completed todos now show strikethrough styling
  • Dropdown menus close automatically after you make a selection
  • Editor lazy-loaded so pages open faster
  • Sync service scaled up for better reliability under load
  • AI tool responses now include labels and names instead of IDs
Fixes
  • Fixed comments showing raw HTML tags instead of formatted text
  • Fixed labels disappearing after removing and re-adding them
  • Fixed due date picker layout when a date is already selected
  • Fixed brief flicker when creating a new todo with a label
  • Fixed deleted lists still appearing in the API
  • Fixed row alignment for icons, avatars, and labels in the todo list