Cfait is designed for speed and stability using Rust. It puts you in control of your data with a local-first approach that syncs seamlessly across your devices via CalDAV.
Key Features:
Syncs Everywhere: Compatible with Nextcloud, iCloud, Radicale, and other standard CalDAV servers.
Offline First: Optimistic UI updates mean you never wait for a server response.
Smart Input: Typing "Buy cat food !1 @tomorrow" automatically sets priority and due date.
Productivity: GTD Workflow, Sub-tasks, Dependencies, and Tags.
Changes in version 0.4.9
13 days ago
(Built 12 days ago)
Features:
(store) Group tags (and sort them) in a case-insensitive way in the tags list (requested by Christian Meixner)
Add a (weighted) random task selector ( https://codeberg.org/trougnouf/cfait/issues/17 )
(randomizer) Only pick from is:ready tasks
(sorting) Sort done/canceled tasks by most recently done/canceled first
(core) Send user agent to CalDAV server (suggested by Geoffrey Frogeye)
(android) Add export all data debug option
(core) Detect and reject non-VTODO collections
(core) Move tasks rejected by the CalDAV server to a local recovery calendar
(android) Remember tags and locations when coming back from a task's details
(recurrence) Switch from respawning to recycling + regeneration (compatibility with other clients, https://github.com/trougnouf/cfait/discussions/5 )
Make yanked task clippy/sticky (GUI, TUI)
(gui) Escape exits the input field then clears the yanked task then the search filter then the tags/locations ( https://codeberg.org/trougnouf/cfait/issues/9 )
Condense start-due datetime in task list when a task has the same date but different times
Link done recurrence snapshots to their parent
Bug Fixes:
(rfc5545) Clamp priority to 9 ( https://codeberg.org/trougnouf/cfait/issues/22 )
(android) Show local timezone (not UTC) in tasks list ( https://codeberg.org/trougnouf/cfait/issues/23 )
(android) Add imePadding s.t. keyboard does not hide bottom of settings screen ( https://codeberg.org/trougnouf/cfait/issues/23 )
(recurrence) Preserve both start and due date(time) in recurrence
(migration) Ensure that tasks are present on the server before deleting them from the local store
(core) Propagate newly created href to journal and guard empty DELETE
(android) Ensure task migration message does not repeatedly come up
(gui) Fix auto-scroll (focus to current task) in filtered view