OpenTodo 0.5.0
Released on
OpenTodo 0.5.0 is a new interface on the same data. The task panel is part of the frame and reads like a summary, the sidebar is shorter, Settings has nine sections with a search field, every keyboard shortcut comes from one registry and ? lists the ones for where you are, and on a phone there is a tab bar, a + button and full-screen tasks. Around it: Process the Inbox one task at a time, a rich-text note at the top of every project, public links that share a project's list with anyone, optional outgoing email for password resets, verified sign-up and invitations, a Month calendar and a project Timeline, calendar feeds in both directions, attachments, tasks that wait for other tasks, bulk changes, duplicates and templates, and search and commands on Ctrl+K. Every help page is now short and opens with a screenshot.
Upgrade notes
- Migrations
0031,0032and0033(calendar feeds, public links, pending sign-ups) are applied automatically at startup. Back up/databefore upgrading: there are no down-migrations. - No new environment variables are required.
OPENTODO_CALENDAR_FEEDS,OPENTODO_SMTP_*andOPENTODO_ATTACHMENTS_*are optional; everything they configure is off, or has a default, until you set it or the owner turns it on in Settings. - Sync is additive: the project fields
icon,descriptionandnotes_doc, the task fieldblocked_by, theattachmententity and theuser_prefsfieldssidebar_destinations,densityandfirst_run. Older clients ignore them; a 0.4 device keeps syncing. - Two families of anonymous routes are new:
GET /api/v1/public/{token}withPOST …/tick(public links) and the password-reset request and sign-up verification routes (outgoing email). All are rate limited, re-check their secret on every use, and are refused on the demo. Nothing is reachable without a link or without SMTP configured. - Settings moved. The fourteen sections of 0.4 are nine; old addresses such as
/settings/securityand old help ids open the right section at the moved rows. The activity feed is Updates at/updates(old links redirect). Owner settings for attachments, outgoing email and the audit log live under Server. - Some shortcuts changed. Skip occurrence is Shift+K, Shift+↓ / Shift+↑ extend a selection, . opens the row's menu; the keys printed in the app return with Show shortcut hints. Press ? for the current list.
- Binary size stays at about 24 MB. (The email templates briefly pulled in
text/template, whose reflection stops the linker from pruning unused code and had grown the binary to 37 MB; they are plain placeholders again.) - Image tags. The release publishes
ghcr.io/pixari/opentodo:0.5.0and:0.5forlinux/amd64andlinux/arm64(:latestfollowsmain). The Coolify template now follows:0.5; if you use:0.4, change the tag in Edit Compose file and click Deploy.
Changed
- A calmer frame. The task panel is now part of the app's frame: it stays put while the list scrolls, keeps its task in the address (reload or share a link and it reopens), and opens the same way from every list, the calendar, filters and dashboards. The sidebar scrolls as one, with Help and your account always at the bottom and Labels as their own group. Task rows line up across every view and show a second line only when there is something to show. The duration filter lives under a Filter button in the list's header, with one chip while it's on; the Inbox no longer labels every row "Inbox". Press ? for a searchable cheat sheet that lists the shortcuts for where you are first. (Views, Keyboard shortcuts)
- A task panel that reads like a summary. The checkbox and title stay at the top while you scroll, with Expand opening the task as its own page. Notes are one quiet line until you click them. The properties are chips that read their values, with Do on and Priority always there and everything else under Add (each entry with its shortcut); a chip opens its editor in place, and the date chips share one When editor for the due date, start, deadline, evening, repeat and reminders. Subtasks are a checklist with a quiet add line, attachments start as one Attach action, the comment box stays at the bottom of the panel, and Activity starts with when the task was created and completed. Completing, deleting, moving, rescheduling or parking a task offers Undo in a toast, offline too. (Tasks and projects)
- For contributors: a page template, a tooltip and skeleton, sidebar building blocks, a style lint over the screens and an interface budget every screen change states (Interface guide).
- A shorter sidebar and clearer names. The sidebar starts with Inbox, Today, Upcoming and Calendar; Anytime, Someday, Assigned to me, Completed, Updates, Trash and Filter wait under More (the unread count shows on its header while it is closed), and any of them can be promoted next to the primary four from Settings → Preferences. Calendar is one destination that remembers Day or Week, with its planning list in the panel. The sidebar's "Views" group is now Filters, the activity feed is Updates at
/updates(old links redirect), and Settings → You → Activity reads Sessions and audit log; the search box still answers to the old words. Every page shares one header with its title, actions, a ⋯ menu and a Help button that opens the guide for that screen; projects keep Share and the List/Board switch in it, with Activity and History opening in the panel from the menu, and sub-projects listed as a collapsible group above the tasks. Lists hide empty date groups and an empty "No section", keep a section with only completed tasks as "n completed" with Show, and remember which groups you collapsed on each device. Help opens on its search with eight common tasks before the guides, and quick add links to its guide for your first three tasks. (Views, Settings) - Settings in nine sections. Settings is one layout: the list of sections (your profile, a Search settings field, the groups You, App, Data and Server) is the left column on a wide screen with Account already open, and the whole screen on a phone where each section opens as a page with a back link. The sections are Account (profile, sessions, password, two-factor, passkeys, linked accounts, encryption), Appearance, General, Notifications, Capture, Integrations (now with the assistant and AI assistants), Data (with archived projects), People (users, members, access policies and single sign-on) and Server (backups, attachments, the audit log). Old addresses such as
/settings/securityopen the right section at the moved rows. Search finds a setting by name or by what it does, in Settings and in the command palette ("passkey" opens Account at the passkeys row). Every card has the same shape: a heading, one sentence, rows with the state as a badge beside the label, and the Help button sits once in the page header. Appearance gains Density (Comfortable or Compact, synced, touch targets kept on phones) and the sidebar switches. On the demo, every section is listed and the rows it refuses are shown disabled under one note. (Settings) - One shortcut registry. Every keyboard shortcut is declared once, with the scope it belongs to (everywhere, a view, a task list, the board, the calendar, the task panel, the notes editor or the Vim layer), and one dispatcher resolves a key in the innermost scope on screen, so a key runs one action and never two. The ? cheat sheet, the keyboard guide and the shortcut column of the command palette all read the registry. Resolved clashes: Skip occurrence is now Shift+K (in a list and in the panel) while Shift+S stays Share project; s schedules in a list and saves in Filter; . opens the focused row's menu or the Actions menu; a adds a subtask in a list and a card in a board column; Shift+↓ / Shift+↑ extend a ticked range (Shift+J / Shift+K no longer do). Shortcut hints live in tooltips, menus and the palette; the keys printed in the app itself (quick add's q, the sidebar's g keys, prompts) return with Show shortcut hints in Settings → General → Keyboard, per device. The palette groups its results under Recent, Tasks, Projects, Labels, Filters, Commands and Settings. (Keyboard shortcuts)
- Built for a phone. Below 768 px a bar at the bottom of the screen switches between Today, Inbox, Upcoming, Search and More (the sidebar as a drawer), and a round + button adds a task from any page as a bottom sheet with the page's defaults and the keyboard up; both step aside while a sheet or a task is open. A task opens as a full-screen page with Back, or a swipe down on its header, to close it. A project's board shows one column at a time with a dot pager and the column's name under the title, and "No section" is a column only while it has open tasks. The Week calendar is a day-by-day list on a phone. The sidebar's project chevrons are full-size touch targets. (Getting started, Installing the app)
- Shorter help pages. Every guide in the app's Help is now under 600 words and opens with a screenshot: the long guides (tasks and projects, views, sharing, time blocking, the assistant, settings, notifications, import, trash, troubleshooting and more) became short overview pages that link to one page per topic, 31 new pages in all, and every old address and section link still lands. The docs check enforces the length and the screenshot. (Help inside the app)
- Rows that read at a glance, and a first run. Every task row is built from the same parts: the date reads "Today · evening · repeats" in one tone, a deadline carries its flag, and the estimate, progress, comments, attachments and project are quiet chips. Completing a task plays a short tick before the row leaves (none under reduced motion), the selection box takes the checkbox's place on hover without shifting the title, and a dragged row lifts over a dotted drop line. Lists, panels and settings show skeletons instead of "Loading…" while local data arrives. The first time an account opens the app, the Inbox shows a three-step card (first task, light or dark, install the app) with Skip all and Show me around, which creates one sample project of six tasks you can delete like any other; the card never returns on that account, on any device. Every empty state names its action with one button, with the key hint only where there is a keyboard. For contributors: the legacy
btn-*,.inputand.kbdclasses are gone and the style lint covers every screen, the core screens have stories and visual baselines, dark surfaces keep a visible hairline, andmake screenscaptures before/after images of the seeded fixture for a pull request. (Getting started, Interface guide)
Added
- Process the Inbox. Process in the Inbox header (or g p) shows one task at a time and a key for each decision: t today, s schedule, m move, a delegate to someone in a shared project, l labels, y Someday, c complete, Delete trash, j skip, k back. Every decision has Undo, tasks captured meanwhile join the end, and it works offline and with Vim keys. (Views)
- Outgoing email (optional). Point the server at an SMTP server in Settings → Server → Outgoing email (or with
OPENTODO_SMTP_*), check it with Send test email, and it can mail what you used to copy by hand. People reset a forgotten password themselves from Forgot password? on the sign-in screen. With open sign-up, a new address is confirmed by email before the account exists. Invitations and project invite links have Send by email, and the Users panel offers Send reset email beside Create reset link. Messages come in the six app languages and never carry task content. Nothing changes without SMTP. Migration0033. (Outgoing email) - Project notes. Every project can carry a note at the top, with headings, lists, check lists and links: the goal, the links you keep looking up, a packing list. Click it or press Shift+P to edit it in place with the task-notes editor; two people can edit at once and keep both changes. Owners, admins and editors can edit; viewers read it. Long notes fold per device, history can restore an earlier version, and the API and exports carry it as the project's
description. (Project notes) - Public links. Share a project's list with anyone, no account needed: Share → Share with a public link creates a link that is view-only or lets people tick items off, optionally named and with an expiry. The page shows open tasks by section with due dates and priorities, never notes, labels or names, and refreshes itself. Ticks reach every device and read Public link in history and activity. A Public badge marks published projects; revoking a link stops it at once. Not available for end-to-end encrypted projects or on the demo. Migration
0032. (Public links) - Repeat and remind from quick add. Type
every Monday,every 2 weeks after completionorremind me 30 min before(alsojeden Montag,erinnere mich…and the other four quick-add languages) and quick add sets the repeat and the reminders, each shown as a chip you can dismiss. A repeating task without a date starts on the rule's first day. Theotcommand line gains--repeat,--remindand--natural. (Quick add, Command-line client) - A month at a glance, and projects on a timeline. Calendar now has Month next to Day and Week (g m): six weeks of due dates with today marked, "+N more" on busy days and the planned total against your day length. Drag a task to another day, or select it and use the arrows, and it keeps its time; q adds a task on the focused day. Projects get a third layout, Timeline (v cycles list, board and timeline): each task is a bar from its start to its deadline, with arrows between tasks that wait for each other. Drag a bar to move its dates, or its ends to set the start and deadline, and use the arrow keys for the same. Both work offline. (Time blocking, Sections and boards)
- Calendar feeds, both ways. Subscribe to the iCal address of your Google, Outlook, Apple, Fastmail or Nextcloud calendars under Settings → Integrations → Calendar feeds. Their events then appear read-only in Day and Week, next to your tasks: timed events as blocks in the calendar's colour, all-day events above the unscheduled lane, and free events as an outline. They share the overlap marker but never count toward the day's total. The Calendars button hides them on a device, and they stay visible offline. The other way, Create feed URL gives you a private address for Google Calendar, Outlook or Apple Calendar that shows your dated tasks, with Rotate and Revoke. The owner turns it on (
OPENTODO_CALENDAR_FEEDS=truepresets it); private network addresses follow the webhooks setting, and the demo refuses it. Migration0031. (Calendar feeds) - Project icons and a sidebar that fits. Give a project an icon from its menu, next to the colours; it shows in the sidebar, the project header and task rows. Drag the sidebar's edge to make it 15 to 22.5 rem wide, or press [ to collapse it to icons and back (on wide screens). (Tasks and projects)
- Change several tasks at once. Tick tasks with x or Space, extend with Shift+↓/↑, tick everything with Ctrl/⌘+A, Shift+click a range, or tap Select on a phone. A bar shows how many are ticked; Actions (or .) completes, sets priority, labels, a date, moves, assigns or trashes them all in one batch that works offline and syncs as ordinary changes. Moves and assignments are shown for review first; everything else applies at once with Undo (also Ctrl/⌘+Z). Works in every task list, the Filter view, saved views and from the search box. (Tasks and projects)
- Duplicate projects and tasks, and start projects from templates. Duplicate… in a project's menu copies its sections, sub-projects and open tasks, optionally moving every date so the work starts on a day you choose; Shift+D (or Duplicate in the task menu) copies a task with its subtasks right below it. Save as template… downloads a project as a small file, and From a template… (under + next to Projects) starts a fresh project from such a file, including the downloads on open-todo.app, with dates counted from your start day. Copies are made on your device and work offline; completed tasks, comments, reminders and assignees stay behind. (Templates)
- Tasks that wait for other tasks. Open a task and choose Blocked by (or press b on a row) to pick the tasks it waits for. While any of them is open, the task is dimmed with a lock and a count, in lists and on boards, and Today keeps it in a folded Blocked group until it's ready. Blocks lists what waits for a task. Completing the last blocker unblocks it on every device, and in a shared project the assignee gets an "is ready to start" notification. Filter with
blockedandunblocked. Calendar apps see the links asDEPENDS-ON, and CSV and Linear imports bring them along. Two people can't make tasks wait for each other, even offline. (Tasks and projects) - Attachments on tasks and comments. Add files and links to a task from the new Attachments row in the task panel (pick, paste a screenshot or drop files), or attach files while writing a comment. Files added offline are listed at once and upload on the next sync; every device sees them as soon as the server has stored them. Images get thumbnails, task rows show a paperclip with the count, and the installed app takes photos and documents from the phone's share sheet. The browser extension can add a screenshot of the page. Backups and the new Download export with files (ZIP) include the files, and importing that ZIP brings them back. Encrypted accounts encrypt the files on the device too. The owner sets a size limit per file and a total per account under Settings → Administration → Attachments, and can turn attachments off. (Attachments)
- Search and commands on Ctrl+K. One box (Ctrl/⌘+K, or the magnifying glass in the header) finds any task by title or notes, any project, label, saved view or Settings section, and runs any command by name: go to a view, act on the selected task, use everything in the current project's, view's, label's or section's menu, create things, sync, toggle Vim keys. Filter queries like
@errand & p1list their tasks right there. It ranks what you pick often first, works offline, and searches only on your device, also for encrypted accounts. (Search and commands)
Your to-do list, on your own server.
Try the demo in your browser. When you like it, install OpenTodo on your server and import your tasks.