Cfait is a powerful, elegant and fast CalDAV task manager, written in Rust.
It features a modern GUI (Graphical UI), an efficient TUI (Terminal UI), and a native Android client.
| Desktop (GUI & TUI) | Mobile (Android) |
|---|---|
The Graphical Interface in v0.3.0 (history) The Terminal Interface in v0.3.0 (history) |
The Android client in v0.3.0 (history) |
Features
- Triple interface: TUI (Terminal), GUI (Windowed), and Native Android.
- Smart input: Add tasks naturally:
Buy cat food !1 @tomorrow ~15msets priority, due date, and duration automatically. - GTD workflow: Mark tasks as in process (
>), cancelled (x), or done. - Duration estimation: Estimate time (
~2h) and filter tasks by duration (~<30m). - Syncs everywhere: Fully compatible with standard CalDAV servers (Radicale, Xandikos, Nextcloud, iCloud, etc.).
- Tag support: Organize tasks using tags (
#gardening) and sub-tags (#gaming:coopis automatically included in#gaming). - Inline Aliases: Define shortcuts on the fly; typing
#groceries=#home,#shoppingapplies the alias immediately and saves it for future use. - Dependencies: Link tasks using RFC 9253 logic (Blocked-by / Child-of).
- Hierarchy support: Create sub-tasks directly from parents, promote children, and organize nested lists.
- Multiple calendars: Seamlessly switch between "Work", "Personal", and other lists, or move tasks between them.
- Offline & local first: Optimistic UI updates mean you never wait for the server. A persistent "Local" calendar allows offline use with a 1-click migration tool to push tasks to a CalDAV server later.
- Sane sorting: Tasks are sorted by Status > Start Date > Due Date > Priority.
Installation
A. Pre-built packages (Recommended for Linux/Windows)
The build pipeline generates binaries for Linux and Windows automatically.
-
Linux (Generic / Debian / Ubuntu):
- Compatibility: Binaries are built on Ubuntu 24.04. They require glibc 2.39 or newer.
- Supported Distros: Ubuntu 24.04+, Linux Mint 22+, Fedora 40+, Debian 13+ (Trixie), Arch Linux.
- Older Distros: If you are on Debian 12 (Bookworm) or Ubuntu 22.04, please build from source.
- Download: Get the
.debor.tar.gzfrom Codeberg Releases.
-
Arch Linux:
# or -
Windows:
- Download the
.ziparchive from Codeberg Releases. - Extract and run
cfait-gui.exe(orcfait.exefor the terminal).
- Download the
-
Android releases will be available on F-Droid and the Play Store starting with v0.3.0
B. macOS
We do not provide pre-built .dmg or .app bundles, but Cfait runs natively on macOS (Apple Silicon & Intel). Please install via Cargo:
# Install Rust (if not installed)
|
# Install Cfait
C. From crates.io (via Cargo)
# Install both TUI and GUI
# Or, install only the TUI
D. From source (Development)
# Run the TUI
# Run the GUI
Configuration
The GUI includes a configuration dialog. The TUI has an onboarding screen to set credentials.
The config file is located at:
- Linux:
~/.config/cfait/config.toml - macOS:
~/Library/Application Support/com.cfait.cfait/config.toml - Windows:
%APPDATA%\cfait\config.toml
= "https://localhost:5232/user/"
= "myuser"
= "mypassword"
# Security: Allow self-signed certificates
# Default: false
= true
= "todo"
# Hide completed tasks globally?
= false
# Hide tags in the sidebar if they only contain completed tasks?
= true
# Sorting: Tasks due more than X months away are sorted by priority only (not date)
# Default: 6
= 6
# Tag Aliases: Automatically expand one tag into multiple
[]
= ["shopping", "home"]
TUI Keybindings
| Context | Key | Action |
|---|---|---|
| Global | Tab |
Switch focus (Tasks ↔ Sidebar) |
q |
Quit | |
| Sidebar (Cals) | Enter |
Set target (Add to view) |
Right |
Focus (Set target + Hide others) | |
Space |
Toggle visibility (Show/Hide layer) | |
* |
Toggle all (Show all / Hide others) | |
| Sidebar (Tags) | Enter |
Toggle tag filter |
m |
Toggle tag match mode (AND / OR) | |
* |
Clear all tags (Show all tasks) | |
| Task List | j / k |
Move down / up |
Space |
Toggle completion | |
s |
Start / Pause (Mark in-process) | |
x |
Cancel task | |
a |
Add task (Type name, press Enter) | |
C |
Create child (Create new task linked as child of current, Shift+c) | |
e |
Edit task title | |
E |
Edit task description (Shift+e) | |
d |
Delete task | |
M |
Move task to another calendar (Shift+m) | |
y |
Yank (Copy ID for linking) | |
b |
Block (Mark current task as blocked by Yanked task) | |
c |
Child (Mark current task as child of Yanked task) | |
r |
Refresh (Force sync) | |
X |
Export (Migrate all tasks from Local to remote, Shift+x) | |
H |
Toggle hide completed tasks | |
/ |
Search / Filter tasks | |
+ / - |
Increase / Decrease priority | |
> / < |
Indent / Outdent (Visual sub-tasks depth) | |
| Sidebar | Enter |
Select calendar / Toggle tag |
1 |
Switch to Calendars view | |
2 |
Switch to Tags view | |
m |
Toggle tag match mode (AND / OR) |
Input Syntax
When adding (a) or editing (e) a task:
!1to!9: Priority (1 is high, 9 is low).@DATEordue:DATE: Due date (2025-12-31,today,tomorrow,1w,2d, 3mo, 4y).^DATEorstart:DATE: Start date. Pushes to bottom until date.~DURATIONorest:DURATION: Estimate (~30m,~1h,~4d).rec:INTERVALor@every X: Recurrence (@daily,@weekly,@monthly,@yearly, or@every 2 weeks, ...).#tag: Tag. Supports hierarchy (#project:backend).- Define Alias:
#alias=#tag1,#tag2(e.g.,#shop=#home,#buy).
- Define Alias:
Advanced Search
The search bar supports specific filters:
#tag: Filter by tag.is:done/is:active/is:ongoing: Filter by status.~<30m: Duration less than 30 mins (using>,>=,<,<=operators andm,h,d,mo,y).!<3: Priority higher than 3 (1 or 2).@<today: Overdue tasks,@<1w: due within 1 week,@>=2d: due at least 2 days from now.
Android Development
Cfait uses a native Android UI (Jetpack Compose) backed by the shared Rust core via UniFFI.
Android will be made available on F-Droid and the Play store starting with v0.3.0.
Prerequisites
- Android Studio (with NDK installed).
- Rust Targets:
- Cargo NDK:
Building & Running
-
Compile Rust Library: Set
ANDROID_NDK_HOMEandANDROID_NDK_ROOTto your NDK path (e.g./opt/android-ndk).# Build the shared libraries (.so) and place them in the Android project -
Generate Kotlin Bindings:
-
Run: Open the
androidfolder in Android Studio and click Run.
Support
If you enjoy using Cfait, consider supporting the developper:
- 💳 Liberapay: https://liberapay.com/trougnouf
- 🏦 Bank (SEPA):
BE77 9731 6116 6342 - ₿ Bitcoin:
bc1qc3z9ctv34v0ufxwpmq875r89umnt6ggeclp979 - Ł Litecoin:
ltc1qv0xcmeuve080j7ad2cj2sd9d22kgqmlxfxvhmg - Ξ Ethereum:
0x0A5281F3B6f609aeb9D71D7ED7acbEc5d00687CB
Mirrors
- Codeberg (Primary with Linux, Android, and cross-compiled Windows builds)
- GitHub (Mirror with Linux and native Windows builds)
- GitLab (Mirror)
Privacy Policy
Cfait does not collect data; data is stored on your device and on your CalDAV server.
License
GPL3
The Graphical Interface in v0.3.0 (
The Terminal Interface in v0.3.0 (
The Android client in v0.3.0 (