{"id":49220027,"url":"https://github.com/maedana/torudo","last_synced_at":"2026-04-24T02:08:51.317Z","repository":{"id":297709317,"uuid":"997678888","full_name":"maedana/torudo","owner":"maedana","description":"A todo list application for the terminal, using the todo.txt format.","archived":false,"fork":false,"pushed_at":"2026-04-12T05:35:52.000Z","size":3114,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-12T07:20:15.586Z","etag":null,"topics":["cli","linux","rust","task","task-manager","todo","todoapp","todotxt","tui"],"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/maedana.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":"2025-06-07T00:29:33.000Z","updated_at":"2026-04-12T05:35:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"cdb34a85-0250-4a12-8d4d-82febb6d38a9","html_url":"https://github.com/maedana/torudo","commit_stats":null,"previous_names":["maedana/torudo"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/maedana/torudo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maedana%2Ftorudo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maedana%2Ftorudo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maedana%2Ftorudo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maedana%2Ftorudo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maedana","download_url":"https://codeload.github.com/maedana/torudo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maedana%2Ftorudo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32205945,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T01:12:49.758Z","status":"online","status_checked_at":"2026-04-24T02:00:07.115Z","response_time":64,"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","linux","rust","task","task-manager","todo","todoapp","todotxt","tui"],"created_at":"2026-04-24T02:08:48.882Z","updated_at":"2026-04-24T02:08:51.309Z","avatar_url":"https://github.com/maedana.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Torudo\n\n[![Crates.io](https://img.shields.io/crates/v/torudo.svg)](https://crates.io/crates/torudo)\n\nA terminal-based todo.txt viewer and manager written in Rust with TUI interface.\n\n## Features\n\n- Project-based column view with priority sorting\n- **Pick layout** (Todo mode, `v` to toggle): groups todos into `(A)` / `High` / `Low` / `No Energy` columns for GTD next-action pickup; composes with the `n` energy/time filter\n- **GTD modes** (Inbox, Todo, Waiting, Ref, Someday) switchable with `Tab` / `Shift+Tab`\n- **Vimium-like `f` jump**: press `f` to overlay short labels on every visible card and jump selection with one keystroke\n- **External capture** via `torudo inbox add \"...\"` — add items to the inbox from scripts, launchers, or editor bindings without the TUI running\n- Vim integration and real-time file watching\n- URL detection (🔗) and browser open (`o`)\n- Self-update via GitHub Releases (`torudo update`)\n- [crmux](https://github.com/maedana/crmux) / Claude Code integration\n\n## Demo\n![gif][1]\n\n## Installation\n\n### Quick install\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/maedana/torudo/main/install.sh | sh\n```\n\n### From crates.io\n\n```sh\ncargo install torudo --locked\n```\n\n### Build from source\n\n```sh\ngit clone https://github.com/maedana/torudo.git\ncd torudo\ncargo build --release\n```\n\n## Configuration\n\n### Command Line Options\n\n- `--todotxt-dir \u003cPATH\u003e`: Directory containing your todo.txt file (default: `~/todotxt`, fallback: `TODOTXT_DIR` env var)\n- `--nvim-listen \u003cPATH\u003e`: Neovim socket path set by `nvim --listen` (default: `/tmp/nvim.sock`, fallback: `NVIM_LISTEN_ADDRESS` env var)\n\n## Usage\n\n### First Time Setup\n\nWhen you run Torudo for the first time, it will check for the required directory and files:\n\n1. If `~/todotxt` directory doesn't exist, it will ask permission to create it\n2. If `todo.txt` doesn't exist, it will ask permission to create an empty file\n3. If you decline either creation, the application will exit\n\nThis ensures you have control over where your todo files are stored.\n\n### Basic Usage\n\n```bash\n# Run torudo (looks for todo.txt in $TODOTXT_DIR or ~/todotxt)\ntorudo\n\n# Specify todotxt directory\ntorudo --todotxt-dir ~/my-todos\n\n# Run with debug mode for detailed logging\ntorudo -d\n\n# Specify Neovim socket path\ntorudo --nvim-listen /tmp/my-nvim.sock\n```\n\n### Capturing to Inbox from Outside the TUI\n\nThe `torudo inbox add` subcommand appends a new item to `inbox.txt` without requiring the TUI to be running. It is meant for quick capture from launchers, shell scripts, editor keybindings, or anywhere you don't want to open the full UI.\n\n```bash\n# Capture a new task into the inbox\ntorudo inbox add \"(A) Buy milk +grocery @home\"\n\n# Pipe the output through jq to grab the generated id\ntorudo inbox add \"Draft blog post +writing\" | jq -r .id\n\n# Preserve an explicit id (otherwise a UUID is generated)\ntorudo inbox add \"Fix #123 id:my-custom-id\"\n```\n\nThe command prints the added item as JSON in the same format as `torudo current`. When a TUI session is running, the file watcher picks up the change and the Inbox tab updates automatically.\n\n### Updating\n\n```bash\n# Check for updates\ntorudo update --check\n\n# Update to latest version\ntorudo update\n\n# Force re-download\ntorudo update --force\n```\n\n### Keyboard Controls\n\nPress `?` in the TUI or run `torudo -h` to see all keyboard shortcuts.\n\n### Todo.txt Format\n\nTorudo supports the standard todo.txt format:\n\n```\n(A) Call Mom +family @phone\nx 2024-01-15 2024-01-10 (B) Review quarterly report +work @office\n(C) Buy groceries +personal @errands\nLearn Rust programming +learning @coding id:abc123\n```\n\nFeatures supported:\n- Priority levels: `(A)`, `(B)`, `(C)`\n- Completion status: `x` prefix with completion date\n- Creation date: `YYYY-MM-DD` format\n- Projects: `+project_name`\n- Contexts: `@context_name`\n- Unique IDs: `id:unique_identifier` (automatically added if missing)\n- Key/value tags: `key:value` pairs (e.g. `t:2026-05-30`, `due:2026-06-01`) are parsed into a dedicated field; URLs in the description are not misdetected as tags\n\n### Todo Sorting\n\nTodos are automatically sorted within each project column using the following priority:\n\n1. **Priority level**: (A) items first, then (B), then (C)\n2. **File line number**: Within the same priority level, todos maintain their original file order\n\nThis ensures high-priority items are always visible at the top while preserving your intended ordering for items of the same priority.\n\n### Display Features\n\n- **Threshold dates** (`t:YYYY-MM-DD`): future items sort to bottom and render dimmed\n- **Overdue highlighting** (`due:YYYY-MM-DD`): items past due render with a red border\n- **Detail md preview** (Todo / Waiting tabs): top 3 unchecked `- [ ]` from `todos/{id}.md` shown inline on each card\n- **Detail md badge** (Todo / Waiting tabs): right-aligned `{done}/{total} {elapsed}` (e.g. `2/7  5m`) on each card; updates live\n- **Dynamic text wrap** with per-item height calculation\n\n### Vim Integration\n\nIf you have Neovim running with a socket, Torudo can automatically open todo detail files when navigating. Each todo item can have an associated markdown file in `$TODOTXT_DIR/todos/{id}.md`.\n\n### Todo Detail Frontmatter\n\nTodo detail files (`todos/{id}.md`) support YAML frontmatter with a `cwd` field to specify the working directory for `clp`/`cli` claude launch:\n\n```markdown\n---\ncwd: /home/user/src/my-project\n---\n# Task details here\n```\n\nThe `cwd` field is required for `clp`/`cli` — an error is shown if it is not set.\n\n## File Structure\n\nTorudo keeps one todo.txt-format file per GTD mode plus a `done.txt` archive. Each file holds plain todo.txt lines; `todos/{id}.md` holds optional long-form detail for individual items.\n\n```\n~/todotxt/\n├── inbox.txt         # Inbox — capture target (also `torudo inbox add`)\n├── todo.txt          # Todo / Next actions (`x` completes here)\n├── waiting.txt       # Waiting for (`x` also completes here)\n├── ref.txt           # Reference material\n├── someday.txt       # Someday / maybe\n├── done.txt          # Archive of items completed from todo.txt\n└── todos/            # Individual todo detail files\n    ├── abc123.md\n    └── def456.md\n```\n\nOnly `todo.txt` is created at first launch; the other mode files are created lazily the first time something lands in them (e.g. via the `s` send-to prefix or `torudo inbox add`). Completing an item with `x` works in Todo and Waiting modes (completed items are moved to `done.txt`); to complete an item from Inbox / Ref / Someday, send it to Todo first with `st`.\n\n**If you prefer the classic todo.txt / done.txt workflow**, just stay in Todo mode and ignore the other tabs — none of the GTD mode files are created until you write to them, and every existing key (`x`, `hjkl`, `o`, …) behaves exactly as before. GTD is opt-in, not required.\n\n## Development\n\n### Running in Development\n\n```bash\ncargo run\n\n# With debug mode\ncargo run -- -d\n```\n\n### Running Tests\n\n```bash\ncargo test\n```\n\n### Code Quality\n\n```bash\ncargo clippy\ncargo fmt\n```\n\n## Roadmap\n\nIdeas that are on the table but not yet implemented. Order does not imply priority.\n\n- Show PR status for todos linked to a git working tree (new frontmatter field pointing at the working tree path)\n- `torudo w sync` subcommand: when invoked from inside a git working tree, automatically fill the currently selected todo's frontmatter with that path (no more hand-editing)\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Run tests and linting\n5. Submit a pull request\n\n## Acknowledgments\n\n- Inspired by the todo.txt format by Gina Trapani\n- Built with [Ratatui](https://github.com/ratatui-org/ratatui) for the terminal UI\n- Uses [crossterm](https://github.com/crossterm-rs/crossterm) for cross-platform terminal handling\n\n[1]: https://raw.githubusercontent.com/maedana/torudo/main/docs/demo.gif\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaedana%2Ftorudo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaedana%2Ftorudo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaedana%2Ftorudo/lists"}