Updates

Changelog

New features, improvements, and fixes.

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

Subtasks, Collaboration & Archive

Todos can now have subtasks. Drag and drop to nest, re-order, or promote them — the full hierarchy shows inline in the list and on the detail page. Right-click any todo to add a subtask, or use the detail page for full control with status, priority, and label selectors.

Real-time collaborative editing

Descriptions now sync in real time between collaborators using conflict-free editing.

Archive

Completed todos are automatically archived after a configurable delay. Browse the archive to restore or permanently delete old items. Archived todos are excluded from sync to keep the app fast.

Sorting & filtering

Sort your list by priority, due date, created date, or status. Group todos by status or priority. A new filter bar lets you narrow down what you see without losing context.

Improvements
  • Status icon replaces the checkbox, supporting all workflow states including canceled
  • New Linear-inspired minimal UI with trailing metadata and button group header
  • Lists are now URL-routed with readable slugs — bookmarkable and shareable
  • Mobile layout fills the full viewport with long-press to drag
  • Settings dialog now includes a Lists tab for managing lists in one place
  • Todo dialog preserves your draft when you close it without submitting
  • Hover preview panel shows todo descriptions without opening the detail page
  • Visual drop indicator when reordering todos
  • Keyboard shortcuts added to list menu
  • MCP tools consolidated into save_todo, save_list, save_label, save_comment
  • MCP responses now include URL and identifier for each todo
  • Sync speed improved — follower path delays reduced from ~8s to ~800ms
  • Item component added to better-ui and used across settings and comments
Fixes
  • Fixed sync indicator showing errors during normal operation
  • Fixed label removal not persisting across sync
  • Fixed markdown descriptions not rendering correctly
  • Fixed race condition when auto-selecting a newly created list
  • Fixed portrait scrolling on mobile devices
  • Fixed double settings dialog from keyboard shortcut
  • Fixed member invitations failing due to missing database column
  • Fixed decryption for avatars, user names, and todo names on the archive page
  • Fixed PGlite error messages to include table and column context

MCP Server & API Keys

You can now connect createtodo to AI coding tools like Claude Code, Cursor, and others. Create an API key in settings, paste the setup command into your tool, and your AI assistant can create todos, search your backlog, and filter by status or assignee — without leaving your editor.

Renamable default list

The default list (“Inbox”) can now be renamed and you can choose which list new todos land in.

Improvements
  • AI tool responses now show assignee and label names instead of internal IDs
  • Filtering and search available across all AI tool endpoints
  • API key rate limit (1,000 req/hour) now visible in settings
Fixes
  • Fixed a sync issue where data could appear stale after being cached for too long
  • Edit buttons in workspace settings were incorrectly hidden for owners and admins
  • Todos created via AI tools now appear immediately in the app