0.16.0 (2026-07-21)
- project: add force delete and noninteractive rename flag (c981bd4)
- project: add specific project import options (306734b)
- auth: unify login and timezone flows (ee54ef1)
- config: fail reset when config is missing (a7f8141)
- config: handle missing config in check (062341d)
- config: require existing auth for commands (30f8208)
- config: stop creating config from open (bcba139)
- project: improve project import success and error messages (9b1df33)
0.15.0 (2026-07-16)
- duplicate oAuth login (5494e52)
- remove useless import (723f576)
- restore windows test compatibility (526d58f)
- save timezone for auth token (546892b)
- tasks: build sortable datetimes in config timezone (6d82cda)
0.14.0 (2026-07-14)
- add create reminder to list process (75738b6)
- async version check (e4ffdd0)
- dont select single project automatically (149b8d7)
- reject out of range priorities (f540b89)
- terminal bell on failure for functions without config (07cd4d4)
0.13.0 (2026-07-07)
- auth: add
tod auth api --tokenfor non-interactive API token setup (b4169cd) - interactive edit config (214adb9)
- list remind (0241438)
- list reminders (aa5fa20)
- auth: avoid extra stdout on token config create and tighten visibility (6d2dadc)
- auth: handle config load errors explicitly and guard pre-cleanup by E2E prefix (bb7524a)
- auth: reject empty token and fail unsafe e2e cleanup (d41b651)
- ci: remove trailing space after backslash in auto-merge command (774a6a7)
- dont print debug message for config missing (857ccde)
0.12.1 (2026-05-01)
- config check (adf2a00)
0.12.0 (2026-05-01)
- config open (a562348)
- debug: print build info once at top of verbose output (60d5c6a)
- format: render markdown link text (not brackets) as OSC8 hyperlink (08b825a)
- improve comment termination (bab9679)
- comments: thread config into render_link to respect disable_links (0af0972)
- config: Handle negtive project (f2fb940)
- config: use &Path instead of &PathBuf, propagate error in generate_path, update doc comment (bdef7e3)
- fix shell stderr output (fbd5e12)
0.11.3 (2026-04-27)
- verbose token (e577ca3)
0.11.2 (2026-01-25)
- change section_order type from u32 to i32 (0058f23)
0.11.1 (2025-09-18)
- bump release version (81867a9)
0.11.0 (2025-08-09)
- add tod config about (5b61a35)
- create config at correct path (7d40d12)
0.10.0 (2025-07-14)
- add auto-update (5ebefc5)
- add installation method detection (1423e9c)
- automatically open default web browser when performing oauth (6872f88)
- automatically open default web browser when performing oauth (780c5ba)
- autoopen login for oauth (6872f88)
- autoopen login for oauth (780c5ba)
- use thread_rng (4aba413)
- make config less likely to conflict on disk (4aba413)
- oauth login duplicate prompt (e6ae55f)
- update description (f23f0f8)
0.9.1 (2025-07-02)
- rust 1.88 cleanup (6c811d3)
0.9.0 (2025-06-25)
- dynamic comment height (79bb4f9)
- dynamic max comment length (b1c9bde)
- regex task and comment filtering (68fe4e4)
- reject unknown fields (af6cdb9)
0.8.0 (2025-06-10)
- add reminder to quick add (21c7198)
- prompt user to auth login when unauthorized (f86742a)
- Added
auth loginfor registering withOAuth - Allow user to choose
OAuthorDeveloper Tokenon first run
- Fix regression where project was not being shown while processing by filter
- Move all mock response bodies to
jsonfiles - Add
task_comment_command,task_complete_command, andtask_add_commandexecution config options and associatedshell.rsmodule code - Do not default to UTC when no timezone is found, instead return an error.
- Parallelize fetching of comments
- Add task sort value to verbose output
- Add config to verbose output with token redacted
- Refactor
timemodule, adding better error handling
- Handle
ImageAttachmentcomment/file format - Reject invalid config file with error message
- Ignore
is_deleted: trueattachments/comments - Handle blank
tokenvalue in Config - Fix test cases to be non-timezone-dependent using
FixedTimeProvider
- Handle Workspace projects by making
inbox_projectfield optional on Project struct - Fetch comments every time when processing tasks as
note_countdoes not reliably show comment count
- Remove URL encoding for quick add task
- Add
section create - Modify some functions in
todoistmodule to return structs instead of strings - Add
list deadline - Add deadline to
task edit - Sort tasks based on deadline
- Allow
task createwithout selecting any attributes (thus editing content only) - Expand update instructions to include Homebrew
- Add
project create
- Completing recurring tasks will uncheck child tasks
- Use new endpoints
- Projects
- Sections
- Tasks
- Labels
- Comments
- User data
- Fix formatting of a shortened URL attachment
- Fix brew install
- Add Homebrew support
- Remove Arch User Repository support (hopefully temporarily)
- Show good error when running
config resetbut no config file exists
- Bug fix comments, not all types were supported
- Render attachment URLs in comments
- Make
max_comment_lengthconfigurable - Enable grouping using filters separated by commas
- Refactor main.rs
- Remove configuration file requirement for
config check-version - Render comments in
task nextandlist process
- Add comment count to task formatting
- Fix table of contents links in configuration docs
- Remove config requirement for
shell completions, thank you@WingsZeng
- Add
task comment - Add
commentas a menu option inlist process
- Internal code refactoring
- Add
list import
- Add colors when selecting priority
- Add
sortflag forlistcommands
- Add issue templates
- Refine scripts for releasing new versions
- Added
shell completionsfor generating shell completions with various shells
- Update CI
yamlfile - Added
project delete
- Use multi-select in
task createwhen no flags are used - Standardized language used in inputs
- Added due to multi-select in
task edit - Make all updates selected in multi-select run asynchronously
- Added labels to multi-select in
task edit
- Add multi-select to
task edit, allowing editing of content, description, and priority
- Fetch Timezone from API rather than prompting user
- Pull labels from API if not provided when performing
list label - Show number of tasks completed today when using
list process
- Show sync status errors correctly
- Speed up project empty by prefetching sections for all projects in parallel
- Fix bug where durations larger than u8 were not supported
- Support using
list labelwith projects
- Improve
reqwesterrors - Divide page size (from term size in last commit) by two to fix prompt spacing bug.
- Add
rusty-hookgit hooks - Add ability to schedule tasks in
list process
- Fix
DateTimesorting
- Add
list timebox - Adjust page size of select options based on terminal size
- Don't show spinner for
list labelasynchronous requests - Add
Skipoption totod list label - Sort the tasks returned from
list label - Add configurable terminal bell with
bell_on_successandbell_on_failure
- Put the error channel transmitter in
Config, removing the need to pass around the additional argument in many places - Add
config set-timezone - Format Markdown links as OSC8 links in supported terminals using
supports-hyperlinkscrate. Falls back in unsupported terminal - Added
disable-linksconfiguration option
- Changed file system calls to asynchronous
tokiocalls - Asynchronous errors are now sent to a channel, so they can be printed at the end rather than when the error occurs (which can disrupt the formatting of any menu that the user is currently in)
- Add
autotoproject import, which imports any projects not in config - Add additional instructions to project missing error
- Internal refactoring to use an error struct and provide better errors
- Ask for labels in
list labelwhen labels are not provided. Previously just showed an error - Check Cargo version asynchronously
- Make
list schedulecalls asynchronously - Make
list labelcalls asynchronously - Make
list prioritizecalls asynchronously
- Remove blocking
reqwestclient
- Make
list processcalls asynchronously - Make
project emptycalls asynchronously
- Make
task quick-add--contentflag optional (this feature was lost in the 0.6.0 API change)
- Show project name when printing a task when the task was obtained through a filter (not a project)
- Add
timeoutargument - Add
repeatflag toproject remove
- BREAKING CHANGE Rewrote the external API, both to make it more coherent for the end user and to make it easier to add to from a development perspective. No functionality lost. The main change is that instead of using the
projectorfiltercommand for searching for lists of tasks, we now use thelistcommand that can take either--projector--filterflags. This is a change needed to proceed with planned features - Added short commands for all sub commands and flags
- Switch back to Sync API for completing tasks, because REST API doesn't handle subtasks correctly
- Config path now supports expanding
~into the home directory - Add
config resetcommand that deletes config
- Add spaces in between tasks in
process - Show JSON responses when using
verboseflag
- Don't
processchild tasks when the parent task is in the future - Don't
processparent tasks when child tasks are still unchecked - Disable spinner in test
- Use REST API for completing tasks
- Added more
quickaddexamples - Don't
emptysubtasks - Add delete option to
emptyandprocess - Stopped overwriting verbose in config when using
verboseflag - Print task durations
- Allow custom sorting of tasks through config
- Fix bug that deleted projects in config rather than renaming them
- Add tasks remaining counter to
processsub commands
- Improve timezone parsing to handle offsets
- Add
labelsargument totask create - Fix reversed priorities on
task create
- Improve formatting when labelling tasks
- Sort tasks by value when processing
- Fix
scheduleandprioritize(they were asking for projects rather than filters)
- Add labels to formatted tasks
- Improve task formatting
- Add
filterflag totask list - Remove
scheduledflag fromtask list, thefilterflag covers this use case now. Usetoday & !no time - Add
filterflag totask editandtask next - Add
filter label - Add
filter schedule - Add
filter prioritize
- Add
verboseflag - BREAKING CHANGE changed character flag for
overduefromvtou - Put single quotes around project names when printing them in terminal
- Re-enable
project schedulefor recurring tasks - Add
skip-recurringflag toproject schedule - Display due string when formatting task
- Add
nosectionflag totask create - Add
No sectionoption to section selection - Add
no_sectionsconfig option
- Add details about configuration file
- Fix
spinnersconfig check - Don't prompt for project when there is only one project in configuration file, just use it
task createasks for section when project has sections- Add a
natural_language_onlyoption to config
- Use structs for projects instead storing as a
HashMapin config. This means that projects need to imported again withproject import, sorry for the inconvenience. The tech debt around project handling was slowing down development - Put date picker option first when scheduling
- Remove
project addas onlyproject importcan be used now - Rename Items to Tasks internally
- Add
allflag toproject remove - Add a select and date picker to
project schedule
- Don't
rescheduleoverdue recurring tasks (as it wipes out the recurring data) - Add
autoflag toproject remove
- Fix out of date version text
- Add
overdueflag toproject schedule - Add
dueflag totask create - Add
project rename
- Show item count in
project list - Add remaining task count to
task next
- Add description flag to
task create - Add ability to skip tasks in
project prioritizeandproject empty - Improve naming of priorities in prompt
- Add
version checkto check if Tod is on the latest version
- Add
task edit. Thank you@BobToninho - Improve error when no projects found in config
- Internal refactor of priority code. Thank you,
@titoOdUA - Clarify scheduled flag in help
- Add priority flag to
task create - Add
project import - Remove support for legacy path
- Create random config file for each test
- Speed up CI by improving caching
- Improve formatting of tasks both individually and in lists
- Return an error during complete task if there is no next task in config. Thank you,
@titoOdUA - Add ability to skip a task in
project processcommand. Thank you,@titoOdUA - Refactor to reduce the use of clone by passing references
- Break the whole API and move over to GitHub CLI inspired commands i.e.
task createinstead of-tp. This opens the path to adding many new features and eases the maintenance burden
- Update tod.gif to demonstrate current feel of app
- Check for
TODOanddbg!on CI - Allow completing tasks as one of the options when dating them
- Include overdue tasks in date tasks functionality
- Added ability to date tasks without due dates with
-d
- Removed some
dbg!statements accidentally left in the code
- Prompt for section when moving an item to a project with sections
- Re-releasing due to an HTTP error on publish that could not be redone with the same version number
- Add the flag
xto get the next item one at a time with an interactive prompt - Add additional test coverage
- Improve input prompts with the
inquirelibrary - Update dependencies
- Add the ability to disable spinners in the config file with
"spinners": false
- Resolve new Clippy warnings
- Use a constant for the time in tests
- Add spinners to API requests
- Fix for deprecation of token passed in the request body (using Bearer Token header now), previous versions of Tod do not work now
- Add a message when the config file is created
- Differentiate between no flags and wrong flags when unrecognized input
Todoistremoved their v8 Sync API, this update switches to v9
- Update clap to new major version (it had breaking changes)
- Add a shell script for manual testing that hits the
TodoistAPI
- Fix a bug where the config file is moved, but the path inside the config file is not altered
- Update dependencies
- UPDATE: DO NOT USE THIS VERSION, use 0.2.14 instead, as the config change introduces a bug
- Move config from
~/.tod.cfgto$XDG_CONFIG_HOME/tod.cfg(i.e.~/.config/tod.cfg). Thank you@hyblm! - If the config is in the old location, it will be moved to the new one
- Update dependencies
- List all tasks by using -p (projects) without other flags
- Add support for custom configuration path
- Update dependencies
- Add Dependabot
- Add timezone to test cases
- Update clap and alter deprecated code
- Update to 2021 Edition
- Update dependencies
- Get the timezone from the user and use that for formatting. (Previously defaulted to Pacific)
- Use an Item fixture for test setup
- Update dependencies
- Fix timezone for formatted date times
- Default to Pacific Timezone instead of UTC when no timezone in response (sorry for people not on the Wet Coast, I will be adding time zones to the config shortly)
- Improve publish instructions
- Update dependencies
- Update dependencies
- Use exit code 1 when an error occurs, otherwise 0
- Use the timezone specified by the
Todoistresponse
- Update dependencies
- Adding releases
- Added MIT license
- Git ignore binaries
- Added some philosophical ramblings to README
- Hotfix for moving items to different projects
- Check for the latest version once per day and prompt to update with
cargo install tod - Update dependencies
- Only show the time when a Date Time is today
- Code cleanup around error handling
- Code cleanup around handling
- Sort projects alphabetically when listing
- Additional test coverage
- Publish checklist
- Prioritize overdue items when fetching the next item
- Add an ASCII icon ↻ for when an item is recurring
- Add
--scheduledfeature - Refactor of codebase
- Add pretty assertions and
Mockitoto dev dependencies - Can now use natural language for creating tasks outside of inbox (sends a task to inbox and then moves it to the other project)
- Breaking changes to command line arguments. Switched over to Clap crate for parsing arguments which will help handle additional features
- Add
--completefeature - Set priority of no date to 80
- Set the date as Today when it is... today
- Add
--sortfeature - Add
--prioritizefeature - Don't show items that are not today in the
--nextcommand - Update dependencies
- Color the item content based on the priority assigned
- Print the item description below the content if exists
- Print the date below the description if exists
- Update dependencies
-
Breaking changes to
.tod.cfg(added new keys) -
Fetches the next item from your to-do list based on
- Date
- Time
- Priority
- If it is recurring
Items are ranked by points and the first is returned:
Date is today with no time: 100 Date is today with time in next or last 15 min: 200 Item has no priority: 2 Priority 1: 1 Priority 2: 3 Priority 3: 4 Not recurring: 50 -
Saves the config file rather than deleting and recreating
-
Add tarpaulin for test coverage
-
Add shell script
test.shfor testing -
Increase test coverage
- The first commit!
- Add and remove projects
- Create a task in either inbox or a project