{"id":45296863,"url":"https://github.com/cxrlos/ratatoist","last_synced_at":"2026-02-27T08:01:06.709Z","repository":{"id":339696540,"uuid":"1162830985","full_name":"cxrlos/ratatoist","owner":"cxrlos","description":"Keyboard-driven terminal UI for Todoist. Vim motions, async Rust, threaded comments, priority management all without leaving your terminal","archived":false,"fork":false,"pushed_at":"2026-02-25T05:21:48.000Z","size":198,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-25T09:57:37.716Z","etag":null,"topics":["cli","gtd","nvim","nvim-plugin","productivity","ratatui","rust","rust-crate","terminal","todo-app","todoist","todoist-api","todoist-tasks","todolist","vim"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cxrlos.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-20T18:46:33.000Z","updated_at":"2026-02-25T05:20:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cxrlos/ratatoist","commit_stats":null,"previous_names":["cxrlos/ratatoist"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/cxrlos/ratatoist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cxrlos%2Fratatoist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cxrlos%2Fratatoist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cxrlos%2Fratatoist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cxrlos%2Fratatoist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cxrlos","download_url":"https://codeload.github.com/cxrlos/ratatoist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cxrlos%2Fratatoist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29851221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T22:37:40.667Z","status":"online","status_checked_at":"2026-02-26T02:00:06.774Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","gtd","nvim","nvim-plugin","productivity","ratatui","rust","rust-crate","terminal","todo-app","todoist","todoist-api","todoist-tasks","todolist","vim"],"created_at":"2026-02-21T04:04:09.592Z","updated_at":"2026-02-26T07:02:56.721Z","avatar_url":"https://github.com/cxrlos.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\u003cpre\u003e\n░█▀▄░█▀█░▀█▀░█▀█░▀█▀░█▀█░▀█▀░█▀▀░▀█▀\n░█▀▄░█▀█░░█░░█▀█░░█░░█░█░░█░░▀▀█░░█░\n░▀░▀░▀░▀░░▀░░▀░▀░░▀░░▀▀▀░▀▀▀░▀▀▀░░▀░\n\u003c/pre\u003e\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Rust-000000?style=for-the-badge\u0026logo=rust\u0026logoColor=white\" alt=\"Rust\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Todoist-E44332?style=for-the-badge\u0026logo=todoist\u0026logoColor=white\" alt=\"Todoist\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Terminal-4D4D4D?style=for-the-badge\u0026logo=gnometerminal\u0026logoColor=white\" alt=\"Terminal\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eYour Todoist inbox, without leaving the terminal.\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://crates.io/crates/ratatoist-core\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/v/ratatoist-core?style=for-the-badge\u0026label=core\u0026color=9ccfd8\" alt=\"core on crates.io\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/ratatoist-tui\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/v/ratatoist-tui?style=for-the-badge\u0026label=tui\u0026color=9ccfd8\" alt=\"tui on crates.io\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/ratatoist-tui\"\u003e\n    \u003cimg src=\"https://img.shields.io/crates/d/ratatoist-tui?style=for-the-badge\u0026label=downloads\u0026color=c4a7e7\" alt=\"crates.io downloads\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MSRV-1.85-orange?style=for-the-badge\u0026logo=rust\u0026logoColor=white\" alt=\"MSRV 1.85\"\u003e\n  \u003ca href=\"https://github.com/cxrlos/ratatoist/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/cxrlos/ratatoist?style=for-the-badge\u0026color=eb6f92\" alt=\"GitHub stars\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003c!-- video later --\u003e\n\n- **Fast** — incremental delta sync, real-time WebSocket updates, exponential-backoff retries\n- **Vim-native** — `j`/`k`/`h`/`l`, folds, modal editing; standard arrow-key mode also available\n- **Polished** — threaded comments, priority indicators, human-readable dates, 10 built-in themes\n- **Secure** — token never logged, config file permissions validated\n\n## Packages\n\n| Crate                                      | Description                                  |\n| ------------------------------------------ | -------------------------------------------- |\n| [`ratatoist-core`](crates/ratatoist-core/) | Todoist Sync API client, config, logging     |\n| [`ratatoist-tui`](crates/ratatoist-tui/)   | Terminal UI binary (installs as `ratatoist`) |\n| [`ratatoist-nvim`](crates/ratatoist-nvim/) | Neovim plugin — coming soon                  |\n\n## Quick start\n\n```sh\ngit clone https://github.com/cxrlos/ratatoist.git\ncd ratatoist\ncargo install --path crates/ratatoist-tui\n```\n\nRun the guided setup (validates your token and optionally writes a shell alias):\n\n```sh\nratatoist --new-user\n```\n\nOr configure manually (token from [Todoist settings](https://app.todoist.com/app/settings/integrations)):\n\n```sh\nmkdir -p ~/.config/ratatoist\necho 'api_token = \"your-token\"' \u003e ~/.config/ratatoist/config.toml\nchmod 600 ~/.config/ratatoist/config.toml\nratatoist\n```\n\n## Features\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eNavigation and views\u003c/strong\u003e\u003c/summary\u003e\n\n- Dual input modes: Vim (Normal/Visual/Insert) and Standard (arrows/Enter)\n- Project tree with workspaces, folders, and favorites pinned to top\n- Folder expand/collapse (`Space` in Projects pane)\n- Task hierarchy with foldable subtask trees (`Space`, `za`/`zR`/`zM`)\n- Task detail pane with scrollable content, comments, and metadata\n- StatsDock: overdue / today / week / P1–P4 counts; click to filter tasks (`f`)\n- Active / Done / Both task filter cycling (`f`)\n- Sort cycling: default / priority / due date / created (`o`)\n- Splash screen with ASCII art and terminal-adaptive progress bar\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eTask operations\u003c/strong\u003e\u003c/summary\u003e\n\n- Complete / uncomplete (`x`) with optimistic UI — instant feedback, reverts on error\n- Quick-add (`a`) with multi-field form: content, priority, due date, project\n- Inline field editing in detail pane (`i` / `Enter`)\n- Priority picker popup with visual selector\n- Star / unstar projects (`s`)\n- View completed tasks per project (Done / Both filter fetches from API)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eComments and collaboration\u003c/strong\u003e\u003c/summary\u003e\n\n- Multi-user comment threads with per-user colors\n- Consecutive same-user message collapsing\n- Attachment display with file type metadata\n- Add comments from the detail pane (`c`)\n- Collaborator name resolution from API\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eTheming\u003c/strong\u003e\u003c/summary\u003e\n\n- 10 built-in themes: Rose Pine, Gruvbox Dark, Dracula, Nord, One Dark, Solarized Dark, Catppuccin Mocha, Tokyo Night, Monokai, Material Dark\n- Theme picker in Settings (`,` → theme)\n- Custom themes: drop any Base16 JSON file into `~/.config/ratatoist/themes/`\n- Theme and idle timeout preferences persisted across sessions\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDeveloper experience\u003c/strong\u003e\u003c/summary\u003e\n\n- Structured JSON logging (`--debug`)\n- Error popups with context and suggestions\n- Dimmed background overlay on popups\n- Keybinding cheatsheet (`?`)\n- `--new-user` onboarding: token entry + shell alias setup\n- `--idle-forcer` flag for testing idle timeout (adds 5 s option)\n\n\u003c/details\u003e\n\n## Requirements\n\n- Rust 1.85+ (edition 2024)\n- A [Todoist](https://todoist.com) account with API token\n- A true-color terminal (Alacritty, iTerm2, WezTerm, Kitty, etc.)\n\n## Documentation\n\n|                                                             |                                                    |\n| ----------------------------------------------------------- | -------------------------------------------------- |\n| [TUI keybindings and usage](crates/ratatoist-tui/README.md) | Full key reference for both Vim and Standard modes |\n| [Core library API](crates/ratatoist-core/README.md)         | Using the Todoist client in your own Rust projects |\n| [Changelog](CHANGELOG.md)                                   | Version history                                    |\n\n## Development\n\n```sh\ncargo run -p ratatoist-tui              # run TUI\ncargo run -p ratatoist-tui -- --debug   # with debug logs\ncargo build --workspace --release       # build all\n./scripts/format.sh                     # format code\ncargo clippy --workspace                # lint\ncargo test --workspace                  # test\n```\n\n## Roadmap\n\n- [ ] Delete task with confirmation\n- [ ] Global search (`/`) with ranked results\n- [ ] Move task between projects\n- [ ] Undo / redo stack\n- [ ] Calendar and Board views\n- [ ] Neovim plugin\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcxrlos%2Fratatoist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcxrlos%2Fratatoist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcxrlos%2Fratatoist/lists"}