cfait

trougnoufGPL-3.0活跃维护

用 Rust 写的命令行待办工具,通过 CalDAV 同步任务,让你在终端里管理 TODO 列表。

Take control of your TODO list

v1.2.1发布于 2026-10-18 00:03 UTC211star +3 / 7 天5fork同步于 2026-11-11 00:02 UTC

怎么上手

由 README 提炼,执行前请确认
cargo install cfait
cargo install cfait --features gui --bin cfait-gui
硬件要求按 README 说明

README 未说明硬件要求;提供 Linux、FreeBSD、Android、Windows、macOS 及 Cargo 安装包,Android 版可从 F-Droid 或 Google Play 获取

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

离线优先的终端、桌面与手机待办管理器,用键盘快速记录并同步到 CalDAV

用 Rust 写的命令行待办工具,通过 CalDAV 同步任务,让你在终端里管理 TODO 列表。

核心能力

  • 用一行语法创建任务,如 @时间 !优先级 @@地点
  • 支持层级标签、阻塞依赖与父子任务树
  • 可开始/暂停任务计时并设置预计时长与周期目标
  • 动态别名即时定义并保存复用
  • 内置每日笔记与 [[wiki]] 页面,经 CalDAV VJOURNAL 同步

容易踩的坑

默认使用本地 Local 集合,跨设备同步需自备标准 CalDAV 服务器;GUI 需通过 --features gui 单独编译安装;macOS 二进制由第三方 Martin Stut 提供,非官方发布

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.2.1
  1. v1.2.1最新正式版2026-10-18 · 2026-10-18 00:03 UTC

    [1.2.1] - 2026-10-18

    🚀 Features

    🐛 Bug Fixes

    📚 Documentation

    • (readme) Remove GitLab mirror release links, uploads are not publicly downloadable
    • Move the reference resolution note after the token table so it no longer breaks the table ( https://github.com/trougnouf/cfait/issues/103 )
    • Explain item types (tasks, notes, pages, journal entries) in SPECS, ? help, and CLI

    🧪 Testing

    ⚙️ Miscellaneous Tasks

    • Update dependencies
    • (i18n) Remove space in vi parser_is_page token so the parser can split arguments
    • (journal) Show sub-pages as links in document editors, full tree in the tree editor
    • (i18n) Remove stale help_metadata_note translations breaking android lint
  2. v1.2.02026-10-12 · 2026-10-12 14:22 UTC
    查看更新说明

    [1.2.0] - 2026-10-12

    🚀 Features

    • (parser) Accept compound durations like 2h20m and anchor dateless rem: to now (suggested by wunter8)
    • (sync) Prefer a reachable local (LAN) address over the primary CalDAV URL
    • (trash) Restore a deleted sub-tree to its place in the tree
    • (journal) Group task-parented pages under dimmed context rows and add a header yank button
    • (journal) Group context rows under common task ancestors, align rows and highlight yank state
    • (journal) Merge context rows into an ancestor trie and unyank by pressing yank again

    🐛 Bug Fixes

    • (sync) Send strong entity-tags in If-Match so weak-etag servers stop conflict-copying every save ( https://codeberg.org/trougnouf/cfait/issues/102 )
    • (markdown) Dim uid round-trip comments in raw editors instead of dropping or rendering them plain
    • (markdown) Keep extracted tasks at their typed position via uid-tagged shadow lines
    • (gui) Submit the journal title input instead of leaking Enter to the selected task
    • (gui) Move the selection highlight to the right-clicked task so the highlighted row always reflects the context menu target
    • (store) Resolve uid-prefix references before fuzzy summary matches
    • (journal) Reuse the link yank icon and offer a child-of-yanked button in the header

    🧪 Testing

    ⚙️ Miscellaneous Tasks

    • Update dependencies
  3. v1.1.92026-10-09 · 2026-10-09 12:42 UTC
    查看更新说明

    [1.1.9] - 2026-10-09

    🚀 Features

    • (view) Show start date and recurrence in cfait view and task details ( https://github.com/trougnouf/cfait/issues/84 )
    • (extractor) Serialize journals as is:page and scope subtask extraction by journal context
    • Show today/tomorrow/yesterday relative dates in task lists ( https://git.disroot.org/trougnouf/cfait/issues/11 )
    • (cli) Add cfait login command
    • (tui) Add :settings/:config to edit config.toml in $EDITOR and reload
    • Add :delete-all command with confirmation dialog ( https://github.com/trougnouf/cfait/issues/86 https://github.com/trougnouf/cfait/issues/6 )
    • Watch data and cache dirs for cross-instance change detection
    • (adapter) Honor TZID on DUE, DTSTART and EXDATE
    • (editors) Word navigation and deletion in GUI/TUI text editors ( https://git.disroot.org/trougnouf/cfait/issues/12 )
    • (client) Add a 120s backstop timeout for HTTP requests
    • (client) Merge the 120s HTTP backstop timeout (chore/http-timeout)
    • (android) Save task without leaving the detail screen
    • (tui) Auto-complete smart-input tokens with a navigable suggestion popup
    • (cli) Print version with --version and -V ( https://github.com/trougnouf/cfait/issues/90 )
    • (i18n) Localize task intent descriptions shown in undo and redo
    • (cli) Include the commit hash in --version output
    • (aliases) Warn about useless alias values and enforce integrity in cli
    • (gui) Hint at Nextcloud /remote.php/dav URL in onboarding and 404 errors
    • (gui) Describe recurrence on hover of the repeat icon
    • (cli) Add collection default subcommand to pick the active collection
    • (journal) Hint that a VJOURNAL-capable collection can be created from cfait
    • (cli) Add --plain flag to tree command for copy without UIDs
    • (cli) Add --fields to list/search for scriptable field output ( https://github.com/trougnouf/cfait/issues/92 )
    • Add copy-link action to tasks ( https://github.com/trougnouf/cfait/issues/77 )
    • (search) Add is:recurrent filter for recurring and non-recurring tasks (suggested by montherlant)
    • (config) Add date_format setting for explicit typed-date digit order ( https://github.com/trougnouf/cfait/issues/85 )
    • (hierarchy) Add parent: token, resolve re-parent sync conflicts toward the newest move
    • (gui) Cycle through autocomplete suggestions with repeated tab presses (suggested by Michael)
    • (gui) Highlight the applied suggestion chip and let clicks join the tab cycle
    • Celebrate completed tasks with confetti (GUI, Android) and a terminal bell (TUI), behind the per-device celebrate_completions setting (https://github.com/trougnouf/cfait/discussions/98)
    • (gui) Randomize confetti launch style per burst, from a single party-popper point to spread along the bottom edge (https://github.com/trougnouf/cfait/discussions/98)
    • (android) Randomize confetti launch style per burst and add air drag so some bursts stay in one screen region instead of always covering it (https://github.com/trougnouf/cfait/discussions/98)

    🐛 Bug Fixes

    • (parser) Fall back to rec: format for RRULEs the prettifier can't represent
    • (mobile) Use setOnlyAlertOnce so already-fired alarms don't re-alert (reported by montherlant)
    • (journal) Fall back to walk_or_create_wiki_path for missing links in gui, tui, and android
    • (editor) Keep journal sub-pages out of the parent's markdown buffer
    • (gui) Always yield at least one span per line to avoid iced layout cache panic
    • (store) Snapshot referencing tasks so undoing a delete restores them ( https://github.com/trougnouf/cfait/issues/86 https://github.com/trougnouf/cfait/issues/6 )
    • (gui) Fill delete-all dialog list width so the scrollbar sits at the right edge ( https://github.com/trougnouf/cfait/issues/86 https://github.com/trougnouf/cfait/issues/6 )
    • (android) Stop journal tab from blanking the task list on return
    • (android) Stop journal tab from blanking the task list on return
    • (store) Undo of start-timer and delete no longer
  4. v1.1.82026-09-15 · 2026-09-15 11:05 UTC
    查看更新说明

    [1.1.8] - 2026-09-15

    🚀 Features

    • (android) Custom label, more colors, collection color, rename widget
    • Remote collection import/export with VJOURNAL support; move sidebar tab toggles to advanced settings
    • (widget) Respect fold/unfold state in task list widget; switch off journal tab on task open
    • (gui) Add tooltip and feedback to version copy button in about page ( https://github.com/trougnouf/cfait/issues/78 )
    • (android) Fix entry widget custom color cycling, add collection filter and quick-add to list widget, sync after widget actions
    • (android) Add list auto-indent to create-task description field (suggested by wunter8)
    • Add author Benoit Brummer (Trougnouf) to about and CLI
    • (ci) Mirror releases to GitLab as fallback when disroot is down ( https://codeberg.org/trougnouf/cfait/issues/101 )

    🐛 Bug Fixes

    • Restore nested VTODO comp-filter so sync works with SOGo
    • Gate duration formatter on goal type in list badge
    • (android) Fix widget config not applied and per-instance prefs overwriting
    • (android) Make widget config changes actually trigger recomposition
    • (android) Quick-add widget after journal and auto-switch tab from action bar
    • (android) Guard widget receivers and fix search widget collection picker
    • (android) Prevent widget layout bleed-over between TaskList and TaskEntry
    • Move offline refresh I/O off the iced main thread and add edit-generation guard against async store wipes in GUI and TUI ( https://github.com/trougnouf/cfait/issues/78 )
    • (parser) Preserve dependencies/relations across title edits and resolve dep: with colons in summary
    • (parser) Fix tag alias resolution and retain trigger tags on expansion

    📚 Documentation

    🎨 Styling

    • (tui) Replace hardcoded colors for light themes

    ⚙️ Miscellaneous Tasks

    • (android) Re-enable widgets
    • (android) Ensure config activity finishes even if widget update fails
    • (i18n) Replace enfant with sous-tâche/sous-page in fr.json
    • (android) Localize widget strings and fix text contrast on dark backgrounds
    • (android) Fix widget opacity string crash and add force_sync shortcut to tooltip
  5. v1.1.72026-09-08 · 2026-09-08 23:33 UTC
    查看更新说明

    [1.1.7] - 2026-09-08

    🚀 Features

    • (android) Add quick settings tile for one-tap launch (requested by montherlant)
    • (android) Add task-list home screen widget
    • (android) Deep-link widget rows to the tapped task
    • Aggregate subtree time in duration badge
    • (android) Add checkbox toggles, tree indentation, and background customization to widget
    • Sign release artifacts with GPG
    • Add native Linux tarball to rolling release
    • Add openSUSE RPM spec and OBS service file
    • Allow config to specify data directory
    • (android) Color checkboxes by calendar and fix widget refresh after toggle
    • (android) Add task entry (quick-add) home-screen widget
    • (android) Add journal and search modes to entry widget with per-instance settings

    🐛 Bug Fixes

    • (android) Update widgets after in-app mutations
    • (goals) Dedup overlapping cascade sessions via interval subtraction
    • (goals) Aggregate subtree time and dedup cascade sessions
    • Add --passphrase '' to gpg signing in CI
    • Count goals double-counted midnight-spanning sessions
    • (android) Use Color instead of int for Glance color providers
    • (android) Use Glance state to force widget refresh after checkbox toggle
    • Use children_index for move tree checkbox visibility
    • Delete task tree before cleaning up references

    🚜 Refactor

    • (android) Switch widget from snapshot file to live API

    📚 Documentation

    ⚡ Performance

    • (sync) Skip companion-event cleanup on delete when events disabled; compact journal once per sync

    🧪 Testing

    • (sync) Pin no-conflict-copy on failed move with pending update

    ⚙️ Miscellaneous Tasks

    • (android) Fix widget config layout
    • (android) Fix widget config crash and text color logic
    • (android) Use Glance default loading layout for widget
    • (android) Disable widgets for release

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Cfait -- Take control of your TODO list


    Cfait is built for people who want keyboard-centric efficiency.

    You can use it comfortably from the command line (TUI), on your desktop (GUI), or on the go with the native Android app. Because it is built entirely offline-first, you can manage your tasks perfectly without ever connecting to a server.

    If you do want to sync your tasks across devices, Cfait connects seamlessly to any standard CalDAV server (Nextcloud, Radicale, Baikal, ...) without locking your data inside a proprietary walled garden. Backed by a shared Rust core, it starts instantly and handles thousands of tasks without stuttering.

    ✨ Highlights

    • ⚡ Think it, type it: No clicking through menus. Type Buy green tea @tomorrow !1 @@dharma_city to create a high-priority task, due tomorrow, at a specific location.
    • 🧠 Deep organization: Go beyond flat lists with hierarchical tags (#gardening:kiwai), blocking dependencies, and parent/child task trees.
    • ⏱️ Time & goals: Start/pause tasks to track time spent. Set estimated durations (~2h) or recurring habit goals (#read:book:=goal:5/y).
    • 🪄 Dynamic aliases: Define shortcuts on the fly. Typing #hiking:=#exercise,@@outside applies the alias instantly and saves it for future use.
    • 📝 Daily notes & wiki pages: Keep a date-anchored journal and link to wiki pages with [[My Page]] — create a hierarchical knowledge base alongside your tasks, synced via the same CalDAV VJOURNAL components.

    📸 Glimpse

    Desktop (GUI & TUI)Mobile (Android)
    Cfait GUI ScreenshotThe Graphical Interface in v1.1.0 (history)Cfait TUI ScreenshotThe Terminal Interface in v1.1.6 (history)Cfait Android ScreenshotThe Android client in v1.1.0 (history)

    📖 Documentation & usage

    Cfait is designed to keep you in flow. Instead of a massive wiki, the app is entirely self-documenting.

    • Everyday usage: Press ? (in the TUI/GUI) or navigate to the Help tab (Android) to open the interactive syntax guide and keyboard shortcut cheat sheet.
    • Configuration: The CLI/TUI configuration file (~/.config/cfait/config.toml) is completely self-documenting. Open it in any text editor to see all available options, headless daemon setup, and UI tweaks.
    • Under the hood: Want to see the exact sorting algorithms, how we handle CalDAV merge conflicts, or how our Markdown subtask extraction works? Read our SPECS.md — it is the ultimate, up-to-date source of truth for Cfait's architecture.

    🚀 Installation

    We offer both Stable and Rolling releases. We highly encourage users to try the rolling release to get the latest features and report bugs!

    (Note: On our releases page, the "Rolling" tag stays pinned at the very top. To find the latest stable version, scroll past it and click "Downloads" on the numbered release).

    • 🐧 Linux: Available on Flathub, the AUR (yay -S cfait), or via .deb / .tar.gz on our Releases page.
    • 👺 FreeBSD: Available in Ports/Packages, install with pkg install cfait
    • 📱 Android: Get it on F-Droid, Google Play, or download the APK.
    • 🪟 Windows: Check the Releases page for binaries.
    • 🍎 MacOS: Download pre-compiled binaries provided by Martin Stut on https://static.stut.de/cfait-macos/
    • ⚙️ Rust (Cargo): cargo install cfait (TUI) or cargo install cfait --features gui --bin cfait-gui (GUI).

    🔐 Verifying release artifacts

    Releases are signed with OpenPGP key 7745 6F7B 3D26 A53C D5ED F0BC 8C37 73BC C31F 2452 (Benoit Brummer). Retrieve it and verify with gpg --keyserver keys.openpgp.org --recv-keys 77456F7B3D26A53CD5EDF0BC8C3773BCC31F2452, then gpg --verify <file>.sig <file>.

    ☁️ CalDAV providers

    You can use the default Local collection entirely offline. But if you want to sync, Cfait works with standard CalDAV servers. We recommend:

    • Self-hosted: Radicale (lightweight and feature-complete, runs on anything including Raspberry Pi) or Nextcloud.
    • Free & managed: Disroot offers a privacy-focused platform with free nextcloud-based CalDAV access.

    🛡️ Privacy Policy

    Cfait does not collect data; data is stored on your device and on your CalDAV server.

    🤗 Community & support

    Have a question, found a bug, or want to contribute?

    If Cfait helps you stay on top of your life, consider supporting development:

    • 💳 Liberapay: https://liberapay.com/trougnouf
    • 💳 Ko-fi: https://ko-fi.com/trougnouf
    • 🏦 Bank (SEPA): BE77 9731 6116 6342
    • ₿ Bitcoin: bc1qc3z9ctv34v0ufxwpmq875r89umnt6ggeclp979
    • Ł Litecoin: ltc1qv0xcmeuve080j7ad2cj2sd9d22kgqmlxfxvhmg
    • Ξ Ethereum: 0x0A5281F3B6f609aeb9D71D7ED7acbEc5d00687CB