The release of notes and the assistant. Notes get a side of the sidebar of their own (Tasks | Notes), a compact list with search chips (in:, @label, kind:, linked:, changed:), links between notes, tasks and projects with [[, and a full-page graph of how your notes connect. The assistant answers with the app's own views (tasks, a planned day, a board column, a map), lets you shape a proposal before you apply it, remembers what you tell it, works where you are (Rewrite this, Find a slot, What's next?, Brief me) and costs about a third less per question. Also new: your own names for the priorities, an Urgency order, progress rings, printing a list, calmer Focus and Close the day, and the server side of the coming native app's sign-in.
Upgrade notes. Nothing to do: the database migrates by itself, and every new value stays readable by 1.x apps. Notes moved out of the sidebar's More group into their own side; a promoted Notes row is kept for older versions and ignored by this one. The assistant's disclosure gains your memory items: people who accepted it before see a one-time notice, nothing is sent until they add a memory.
Added
- The graph of all notes. The Notes page has a second mode, Graph (
/notes?view=graph, remembered on the device, and a row under All notes in the sidebar): every note of the workspace and the tasks and projects they link to, as one picture that fills the page. Pan, zoom and fit; point at a note to light its neighbours; click it to open it beside the graph; double-click to centre it with a depth of one to three links; find a note by typing; the search field's chips (in:,label:…) dim everything outside the topic without moving anything. The layout is the same every time and kept on the device, so a new note appears beside its links while everything else stays put. Drawn on the device from your own copy, offline and with end-to-end encryption; keyboard and screen reader friendly, with the List as its equivalent. Connections gain Open in graph. See See all your notes as a graph. - Link notes, tasks and projects with
[[. Type[[in any note (or choose Link to… in the/menu) to pick a note, task or project, or create a new note on the spot; the link always shows the item's current title, survives renames, and reads as muted text when its target is in the Trash or out of reach. Linked references at the end of a note, below a task's notes and as a folded line in a project's note area list what links there, worked out on your device, offline and with end-to-end encryption. Links are plain Markdown ([Title](?note=<id>)), so older apps keep them;?note=and?project=addresses open their item,ot notes linkslists links on your machine, and the MCP toolsget_noteandget_taskreturnlinksandlinked_fromon accounts without end-to-end encryption. - The Notes page is a home for your notes. Type in the search field and the first row is New note "…": when nothing matches, Enter creates the note with that title and puts the caret in its text (in the Project filter's project, with one Undo), and when notes match, Enter still opens the best match. Pin a standalone note from its menu, the palette or
pon its row: pinned notes are listed first under Pinned, the others under Recent, and they also show in the sidebar's Favourites. Pins are personal and sync as a favourite of the kindnote, which 1.0 clients keep unchanged; the MCP toolset_favouriteacceptskind: "note". The Source filter gains Unlinked, the standalone notes nothing links to, worked out on the device. - See what an item is connected to. Show connections in the menu of a note, task or project with a link, the graph button of its Linked references, or the command palette opens a calm graph with the item in the middle, what it links with on an inner ring and their links on an outer ring (at most 24 and 48, the most recently changed, with a "+n" for the rest). Click or tap an item to move it to the middle and click the middle to open it; from the keyboard the arrow keys move between items, Space moves one to the middle, Enter opens it, Backspace goes back and Esc closes. List shows the same as Links and Linked from and is remembered on the device; it comes first on a phone when the graph does not fit. The picture is the same every time, worked out on your device from the link index, offline and with end-to-end encryption, and loaded only on first use.
- The assistant's answers show your tasks. Where it saves reading, an answer shows the tasks it talks about as rows you can tick off, a day or week as planned with its total, places on the map, a note, a project's outline, or a choice you answer with one click, all read from your device, so they stay current and work offline. Tasks it names are links. A proposal that moves work within a week reads as a calendar (a new project as an outline, places as a map) with List one switch away, and its titles, dates and priority can be edited before you apply. Under each answer: the steps it took, Copy answer, Regenerate and Edit question; the conversation follows the answer with Jump to latest. The same works on encrypted accounts with the assistant on the device; MCP clients are unchanged.
- Shape the assistant's proposals before you apply them. Every item of a proposal has the pencil in the calendar, outline and map shapes too, with its time now editable; in the calendar a proposed task drags to another day, or moves a day with Alt+↑ and Alt+↓. While a proposal is open, your next message amends it ("also add a task to call the plumber") instead of replacing it, with what that message added or changed marked and what it removed named. Before and after shows each item's current and proposed values side by side.
- The assistant suggests what to do next. When a next step is likely, the latest answer ends with up to three one-tap suggestions such as "Move them to Friday"; selecting one sends it as your next message. They are not offered after a plain answer or with a choice, and they go away once you send something else.
- The assistant where you work. A task's ⋯ menu offers Rewrite this (a clearer title and description) and Find a slot (a day and time in your free time this week that fits the task), a project's menu What's next? (its next actions with the board or timeline) and Today's menu Brief me (the agenda, deadlines and how you are doing). Each opens the assistant with its skill and subject and sends at once, only while the assistant is available. The four skills are MCP prompts too.
- The assistant remembers what you tell it. Keep short facts such as "Works Monday to Thursday" in Settings → Integrations → Assistant → Memory (up to 20, one line each), or apply the assistant's proposal "Remember: …" when you state one; nothing is remembered silently. Every message sends them to the provider as your stated preferences. They sync to your devices, are end-to-end encrypted on an encrypted account, are in your export, and never reach MCP clients, agent tokens or routines. A consent given earlier still counts; a notice says once that memory is sent.
- The assistant answers questions about projects and progress with the app's own views. "What's in progress on the website?" shows that column of the project's board, "Is the renovation on track?" its timeline, "What happened on it yesterday?" its latest activity, "How am I doing?" tiles for what you completed, what is overdue, the Inbox and Today against your Today limit, a question about one task shows it in full with its notes, subtasks and comments, and "How is running going?" a habit's month grid and streak. Each is read-only and read from your device. A skill turn adds the board and timeline when you ask from a project, and the statistics and deadlines when you ask from Today.
- The assistant answers questions about time with the app's own views. "Where did my time go this week?" shows your tracked time as bars per project or per day with the totals, "When am I free for two hours?" shows each day's free stretches within your working day, between calendar events, frames, slots and timed tasks, and "What's due before Friday?" lists the deadlines in date order with their countdowns, all read from your device. The new read tool
find_free_timegives the same free stretches to MCP clients, such as Claude Desktop, and to the assistant on an encrypted account's device; it reads only times, never an event's title. - Routines show what their AI talks about. An Ask AI step that answers as text can show tasks, a day or week of your calendar, or your deadlines, as the assistant does in a chat, at most four per run. A morning briefing shows the day's agenda and the tasks to start with under its line in the Inbox card and in the run's detail, live from your own copy and offline. The run keeps only which tasks and days, never text; on an encrypted account the device that runs the routine checks them against its own copy.
- External assistants can show your tasks as OpenTodo draws them. Assistants that support MCP Apps (Claude on the web, desktop and iOS, ChatGPT, VS Code, Goose and Postman) are offered
show_tasks,show_calendarandshow_deadlines, the blocks of the in-app assistant. They show a list of tasks, a day or week agenda, or the deadlines ahead, inside the answer. A block is a fixed page drawn in the assistant's sandboxed frame. It makes no network request and shows your text as text, and the assistant itself reads only how many items it showed. With an assistant that may make changes, ticking a task in a block completes it like any assistant change. Encrypted accounts get blocks throughot mcp --decrypt, which decrypts them on your computer. Assistants without MCP Apps see no change. See Blocks in the assistant's answer. - Questions to the assistant cost less. Without a skill, the assistant starts with the tools that read and show, and asks for the write tools (with
propose_changes) when you ask for a change; they come with its next step. A question that only reads sends about 40% less input in its first step (50 tool definitions, about 57 KB, down to 35, about 33 KB). Skills keep their own tools, and amending an open proposal offers the write tools at once. The same on the device of an encrypted account. - The assistant on encrypted accounts reads your notes and your time. With the assistant running on your device, it can now list, search and read your notes, list your tracked time with totals, and read your calendar frames and slots, all from your device's decrypted copy, so it answers "where did my time go this week?" or "what's in my notes about the move?" offline. Projects kept away from assistants stay out, and the list of what may be sent names notes, tracked time, frames and slots. On the server,
list_slotsno longer shows tasks of projects kept away from assistants. - Order a list by urgency. Display options → Order by → Urgency on a project, a label page, the Inbox or a saved view puts what needs you first at the top: one score per task from its date, deadline, priority, the tasks waiting for it, its age and a running timer, lowered while it is blocked, starts later or is parked in Someday. Each row shows its score; Tab to it or open Why here? in the task's menu for the breakdown. The score is worked out on your device, offline and on encrypted accounts too, and the assistant tools (
list_taskswithsort: "urgency") andot list --sort urgencyorder the same way. Older versions show the list's default order. - Progress at a glance. A task with subtasks shows a small ring before its count ("1/4") in lists and on boards, and the task panel's Subtasks heading ends with the percentage. A project's page shows its progress next to its title, the same figure All projects shows. Everything is worked out on your device, offline too, and nothing new is stored or synced.
- Print a list. The browser's Print (Ctrl+P or Cmd+P) on the Inbox, Today, Upcoming, a project, a label or a saved view now prints a clean list: the page's title, its groups and every row with its subtasks, dates, project and labels, black on white in any theme, with an empty circle to tick by hand and nothing of the app around it. Print… at the end of the list's … menu does the same, also in the installed app, which has no browser menu (#778).
- Display options on Today, Upcoming and the Inbox. The Display options button of projects and labels is now in the header of the three built-in lists. Today can be grouped by project, priority or label instead of the time of day, with Earlier still first and Blocked, Waiting for a slot and Done today still at the end; Upcoming orders each day by priority, title or another order; the Inbox groups by due date, priority or label and orders by any of them. Today and Upcoming can Nest subtasks under a parent in the same group, and Reset puts a view back as it was. The keys
r g,r oandr rwork there too, withr g tfor Time of day on Today. The choices are thirteen synceduser_prefsfields; an older device keeps showing the defaults, and the Today limit fills its slots as before (#872, #1089, #1108). - Routines work in one workspace, and conditions can say "not". A routine can now be limited to one workspace: its trigger fires only for that workspace's tasks, it finds and creates only there, and it never moves a task into another workspace's project. A new routine starts in the workspace you create it in, and the When card reads "in Work"; routines you already have keep working in every workspace. A project of another workspace is now named with its workspace ("Website (Work)") instead of "a removed project". Project, section and priority conditions get Is not, and project and section No project / No section, so "when a task is added without a project, move it to Triage" is one routine. REST takes
workspace_idandnot_in, and the MCP routine tools takeworkspace. (#1132, #1134) - Click a task to expand it, double-click to open its page. Click a task to (Settings → General → Keyboard, this device) gains Expand the row: a click on a task shows its notes, facts and subtasks under the row, a second click hides them, and board cards, Next and Waiting still open the task. Under every choice a double-click on a row opens the task's page, except in a title you are already editing, where it selects a word. With Open tasks set to the side panel, the details follow the selection in every list, as in the Inbox, and the keyboard stays on the list; following the cursor now draws the list once per move instead of three times. The keyboard is unchanged (#1129, #1116).
- Rename, recolour or change a project's icon from its sidebar menu, and choose appearance when adding projects and labels in the sidebar.
- The server is ready for the OpenTodo app's sign-in. The coming native app signs in through your phone's own sign-in sheet: your server's sign-in page opens there (password, two-factor, passkeys and single sign-on all work), and if that browser is signed in already you only confirm "Sign in to the OpenTodo app on iPhone?". The app gets its own tokens through an authorization code with PKCE, and its refresh token changes on every use; a used one coming back signs the app out. Signed-in apps appear with your sessions in Settings → Account, where you can sign one out, and Sign out everywhere, a password change or deactivation sign them out too.
GET /api/v1/healthsaysapp_sign_in: trueso the app can tell. See App sign-in.
Changed
- Notes have their own side of the sidebar. A Tasks | Notes control under the workspace name switches the sidebar to your notes: All notes, your pinned notes and the ones you changed last. Opening a note shows it, opening a task shows Tasks again, and
g estill opens Notes. Notes left the More menu; a Notes row you had shown in the sidebar is replaced by the control. The Notes list is one line per note with its project and labels, and the search field takes tokens such asin:Renovation,@errand,kind:note,linked:Trip,orphan,pinnedandchanged:<7d, shown as chips with suggestions; they replace the Source, Project and Label filters, which become chips once. - A note beside the Notes list can be resized, and has room to write. Drag its left edge, click it (widest, then back) or focus it and press ← or →, as for the task side panel; each device keeps its own width. The note opens wider, and its text stands in a readable, centred column with margins on both sides. Phones are unchanged.
- Name your priorities. Settings → General → Priorities gives the four levels your own words, such as Must, Should, Could and Won't. The names show wherever a priority does: the task's facts and priority menus, quick-add chips, priority groups and board columns, the filter builder, bulk actions, the command bar and the assistant's proposals, and a screen reader hears the name with its number ("Must, priority 1"). They sync to your devices, work offline, stay personal in shared projects and are encrypted on accounts with end-to-end encryption.
p1top4stay the syntax in quick add and filters, and typingpafter a space lists the levels with their names; the API, the CLI, MCP, CalDAV and emails keep the numbers. - Close the day is a calm three-step ritual. What got done lists what you finished today; What moves puts every unfinished task on one list with Tomorrow, Later or Someday per row (Keep in Today and Done already in its menu, All to tomorrow in one tap,
j/kand the decision keys from the keyboard); Tomorrow's first thing picks the task tomorrow starts with, which becomes tomorrow's focus. Nothing is written until you choose Close the day, on any step, and then one Undo puts the whole evening back, focus included. Esc leaves without changing anything. Someday parks a task; nothing goes to the Trash. - The Loop home guides the next step. A Next step card names one move and why ("7 things in the Inbox are waiting.") with one button; Review comes before Do when a rhythm is due. The five moves are a stepper in method order that highlights only the next one and shows a check mark where nothing waits, and each move opens in place below it at
/loop/<move>(Back closes it): Catch holds the capture field and your latest captures, Clarify the full triage card, Place the projects without a next action with a field to add one, Do today's focus and your next actions by context, Review the three rhythms and Close the day. The Loop pulse is one quiet line, with its figures and 14-day strip behind a click. Quick add still captures from everywhere. - Focus is one calm stage. The Focus screen now shows the task you are working on, its next open subtask, the time left in large figures and one main button, centred on the page; the header reads just "Focus". The timer, Change task, noise, the new Today's sessions (today's focus sessions with their task, timer and length) and Settings are in the ⋯ menu, and the notes and the whole checklist sit behind Notes and subtasks, remembered on the device. A break keeps the same screen with the title dimmed, and when a session ends one button offers the next step with the others beside it. Keys are unchanged and shown in tooltips; the printed key line follows Show shortcut hints.
- Rows line up, the sidebar shows your workspace, and Upcoming stays calm. From 40 rem of row width every list row stands its facts in fixed slots, in the order project, labels, estimate, date, assignee: the date moved from the first slot to the last, so a list's dates form its right edge, an empty slot keeps its width and a slot no row uses takes none. The priority, repeat and count marks are smaller and sit on the title's first line, and a task's part of the day is an icon in the time column instead of "· evening" after the date. The top of the sidebar shows the workspace's own picture (its icon or initial on its colour) and name on one line; the OpenTodo mark and version moved to a quiet line at the sidebar's end that opens About and What's new, with a branded server's logo and name there. The task panel's checkbox sits on the title's first line, its tab row fits the panel (icons with counts when narrow), subtasks are a quiet checklist under their heading, and the estimate editor is one field with ↑ and ↓ and four presets. Upcoming lists its first three days with tasks in full and each later day as one bar with its count and first titles; Later days: In full in its display options lists everything (
user_prefs.upcoming_later, readable by older clients). - One "when on that day" row in Do on. The When editor's Do on part asks when on the day with one row, Any time | Evening | Time (with Morning and Afternoon while day parts are on), instead of the This Evening switch and Add time. There a part and a time are one or the other, each choice one change with Undo; Shift+E and every other way in keep the time as before. The date field shows an example ("tomorrow 3pm, next fri") and takes a date with a time in one go. The quick choices are one compact line, No date is gone (Clear does it), and the time zone reads "Floating" or the city at the end of the time line. The When editor now loads on first use, which takes about 12 KB off the first load. Stored values keep their meaning and 1.0 clients read them as before.
- Tinted label chips. The label name sits on a soft background in its colour, so labels are easier to tell apart in task lists.
- The assistant counts cached input at a tenth. The instructions and tools the provider reads from its prompt cache now count toward the monthly allowance at one tenth, about what they cost, instead of in full; each answer names that part ("20,300 tokens, 18,000 from cache") and
GET /api/v1/me/assistant/usagereportscached_tokens. Answers from before keep counting as recorded. - OpenTodo for iPhone and iPad is in the App Store. The first release: it connects to your server and adds reminders on the phone, the share sheet, a Today widget and Face ID unlock.
- The iPhone app shows the address it connects to. On the first-run screen an address typed without a scheme shows as
https://…before the check, plainhttpto a local address says it isn't encrypted, and Connect looks active as soon as the address is well-formed. Settings → About shows the exact server address under OpenTodo for iOS (#1136, #1137).
Fixed
- Completing a task in a long list is fast again, and Linked references show at once. In a 2,000-task list a completion took about four times as long since the floating selection bar and the Focus break tone; it is back under its budget. Opening a note from the Notes page paints its Linked references as soon as they are worked out, without waiting a third of a second.
- The assistant finds what you name. Asking for "my errands" finds tasks labelled "errand", "what's in progress" shows that board column (project reads now name their sections, over MCP too), one task is named as a link instead of a block, and an answer always says something in words, with no sentence run into the next after a step.
- Nothing moves the list under your finger. Ticking a task no longer pushes the list down: the "n selected" bar floats over the bottom of the screen, on a phone just above the tab bar in place of the + button (#1143). The shell's notices and the update prompt are toasts in the corner, and the Inbox's routines card sits under the tasks, so nothing arriving late moves a row. Focus and Close the day have no + button on a phone, and Close the day draws one divider under its header.
- New view keeps what you type while the app is still loading. On a new device, a query typed before the first sync finished could be cleared when the workspace list arrived.
- The iPhone app's widget and reminders work. The App Store and TestFlight builds never let the web app reach the phone, so the Today widget stayed empty, reminders were not scheduled and Settings offered browser push instead. The app now connects to any server with its widget, reminders, share sheet and Face ID unlock.
- A paste into the Inbox counts every task that went elsewhere. The note after pasting a list counted only the lines that set a date, not those that set a project.
- A release uploads the iPhone app to TestFlight again. The release's TestFlight job got no secrets, so it only warned and uploaded nothing.
- Comments tab read correctly on a narrow panel. Shown as its icon and a count, the tab's visible text is now part of its spoken name, a count of none included.
Install
- Docker:
docker run -d -p 8080:8080 -v opentodo:/data ghcr.io/opentodoapp/opentodo:1.4.0 - Binary: download
opentodo-<os>-<arch>below, then run it (data goes to./data). - Command-line client:
ot-<os>-<arch>. Browser extension:opentodo-browser-extension-chrome.zipandopentodo-browser-extension-firefox.zip.
Verify downloads with sha256sum -c SHA256SUMS. Self-hosting guides: docs/self-hosting.