tuxedo is a free, open source project & work management project written in Rust and released under MIT. It has 1,672 GitHub stars, 89 forks and 69 open issues, and was last pushed 3 days ago. On this registry it ranks #43 of 62 tracked projects in Project & Work Management, with 5 head-to-head comparisons available. It gained 11 stars over the last 3 tracked days.

What is tuxedo?

What it is

tuxedo is a keyboard-driven terminal UI for todo.txt files. It is written in Rust, released under the MIT license, shipped as a single static binary, and lives in the plain-text todo.txt ecosystem. The project belongs to the business software category of project and work management.

It solves the problem of managing tasks without leaving the terminal or abandoning the todo.txt format. It provides interactive review, editing, filtering, archiving, and a todo.txt-cli-compatible command line for scripted use.

Key capabilities

  • It reads and writes the standard todo.txt format, so tasks stay plain text for other editors or scripts.
  • It combines a TUI and a CLI in one binary, supporting commands such as add, ls, do, pri, and archive, with --json output and $TODO_DIR, $TODO_FILE, and $DONE_FILE support.
  • It rewrites natural-language text entered in the add prompt into canonical todo.txt locally and offline, without contacting an AI service.
  • It uses Vim-style bindings, a command palette, filters, sorting, multi-select, saved searches, themes, and densities.
  • It writes changes atomically, detects external file changes, reloads on the next keypress or within about 250 ms while idle, and archives completed tasks to done.txt.
  • It offers phone capture through a QR code pointing at a local PWA, with captured tasks stored in inbox.txt.
  • It persists filters as plain config lines, so saved searches can be edited by hand.

Who uses it and how

  • Users keep tasks in todo.txt and need terminal review, filtering, and keyboard editing.
  • Automation users invoke CLI commands, use JSON output, or set environment variables from scripts.
  • File-sync users rely on Dropbox or other sync services and need external-change detection.
  • Mobile capture users add tasks from a phone PWA or append lines to inbox.txt via shell commands, iOS Shortcuts, or cron.
  • Terminal users prefer one file in, one file out, and no daemon, database, or cloud.

Getting started

Install it with brew install tuxedo, then run tuxedo for the UI or run tuxedo with a CLI command such as add, ls, do, pri, or archive. The README mentions a video walkthrough and screenshots, but it lists no Docker image, hosted option, or package manager besides Homebrew.

When to use it — and when not to

Use it when you want local, keyboard-driven todo.txt management without a daemon, database, or cloud service, and when plain files are acceptable for backup and sharing. Avoid it if you need built-in sync, collaboration, mobile apps, or a long track record; the facts show no contributors count, 0-year repository age, 69 open issues, and no listed paid products it replaces. Backup, sync, and cross-device access must come from external files or the local capture feature.

project readme (upstream, from github) — read inline

tuxedo

A fast, keyboard-driven terminal UI for todo.txt. Vim-style bindings, atomic writes, instant external-edit detection, and five hand-tuned themes — all in a single static binary.

brew install tuxedo

CI Release License: MIT Rust

tuxedo demo

For a more in-depth walkthrough, please watch this video by @IogaMaster.

Highlights

  • Pure todo.txt. Reads and writes the standard format — every line is plain text you can edit with anything else.
  • TUI and CLI in one binary. Run tuxedo for the interactive UI, or tuxedo for a todo.txt-cli-compatible command line (add, ls, do, pri, archive, …) — scriptable, with --json output and $TODO_DIR / $TODO_FILE / $DONE_FILE support.
  • Natural-language add. Type prose into the add prompt — Pay rent monthly on the first, show 3 days before due, project home — and tuxedo rewrites it to canonical todo.txt for you to review and save. Local, offline, no AI service.
  • Phone capture. Press s for a QR pointing at a tiny PWA on your machine's LAN — type tasks from your phone and they appear in the list. Captures land in a sibling inbox.txt first, so any tool that can append a line (shell, iOS Shortcuts, cron) is also a capture source.
  • Vim keys, no surprises. j / k to move, dd to delete, gg / G to jump, u to undo (50 levels), chord prompts (gg, dd, fp, fc) with a 600 ms window.
  • Command palette. : or Ctrl-P opens a fuzzy palette over every action — type a few letters, hit Enter. Same matcher as / search, ranked so start-of-label hits beat word-boundary hits beat mid-word hits.
  • Atomic, sync-friendly writes. Every change goes through write-temp-then-rename. If another process — Dropbox, an editor, a script — modifies the file, tuxedo reloads on the next keypress (or within ~250 ms while idle) and flashes a notice.
  • Sibling-file archive. A moves completed tasks to done.txt next to your file, atomically.
  • Filter, sort, multi-select. Cycle by +project or @context, sort by priority / due / file order, and bulk-complete or bulk-delete in visual mode.
  • Saved searches. Name the active /-search with fs, then recall it any time by cycling saved filters with ff. Stored as plain filter. lines in the config — hand-editable like everything else.
  • Five themes, three densities. Cycle with T and D. Choices persist across runs and hot-reload when you edit config.toml externally.
  • No daemon, no database, no cloud. One file in, one file out.

Screens

Empty state • cell-bowtie mark and quick-start when the file has no tasks empty
List • list of todos, optionally grouped empty
Archive • completed tasks grouped by completion date archive
Filter sidebar activefp cycles projects with j/k, fc cycles contexts; saved searches list under a SAVED heading with live match counts filter
Command palette: or Ctrl-P opens a fuzzy palette over every action command palette
Help? opens the full keybindings overlay help
How to generate the screenshots and demo

The screenshots in the table above are checked-in SVGs. Regenerate them with:

mise run screenshots

The hero GIF at the top is recorded with vhs from docs/demo.tape. Regenerate it with:

mise run demo

Themes

T opens a picker over five built-in themes, including Terminal, which respects your terminal palette.

Muted Slate (default) Dawn
muted slate dawn
Nord Matrix
nord matrix

Custom themes

Beyond the built-ins, tuxedo loads any *.toml file you drop in ${XDG_CONFIG_HOME:-$HOME/.config}/tuxedo/themes/. Each one joins the T picker in sorted filename order. Ready-made themes live in docs/themes/ — copy one in and press T:

mkdir -p ~/.config/tuxedo/themes
curl -o ~/.config/tuxedo/themes/gruvbox-dark-soft.toml \
  https://raw.githubusercontent.com/webstonehq/tuxedo/main/docs/themes/gruvbox-dark-soft.toml
Theme file format and field reference

A theme file is one key = value per line. name is the label shown in the picker; every other field is a color value. All fields are required: a file missing one, carrying an unparseable color, or whose name collides with another theme is skipped with a warning at startup.

Color values accept two forms:

  • #rrggbb — a solid hex color (case-insensitive).
  • reset or transparent — inherits the terminal emulator's own background color. Useful for bg, panel, and statusbar when you want your terminal's opacity, blur, or wallpaper to show through while keeping a custom text palette. Both keywords are case-insensitive and behave identically (same effect as the built-in Terminal theme).
Field Colors
name label shown in the T picker (the only non-color field)
bg window background
panel filter and detail panel background
border panel and modal borders
fg primary text
dim secondary / muted text
accent logo, headings, hints, and selection markers
cursor current row, and the highlighted row in the T picker
selection set to the same value as selected
statusbar status bar background
status_fg status bar text
mode_fg / mode_bg mode chip text / background
pri_a pri_b pri_c pri_d priorities A through D
pri_other priorities E through Z
project +project tags
context @context tags
due due: date
overdue past-due date
today date due today
done completed tasks
selected selected-row background (visual mode) and the active filter
matched search-match highlight

Install

Homebrew (macOS, Linux)

brew install tuxedo

Prebuilt binaries

Download the archive for your platform from the latest release and put tuxedo on your PATH.

Targets: x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-apple-darwin, aarch64-apple-darwin, x86_64-pc-windows-msvc. Each archive ships with a .sha256 checksum.

From source

cargo install --git https://github.com/webstonehq/tuxedo

Or clone and build:

git clone https://github.com/webstonehq/tuxedo
cd tuxedo
cargo build --release
./target/release/tuxedo [FILE]

Requires the Rust 2024 edition (recent stable toolchain).

Usage

tuxedo is two things in one binary: an interactive TUI, and a one-shot command line. With no subcommand it launches the TUI; with a recognized subcommand it runs the command line and exits.

tuxedo [FILE]      # launch the TUI on FILE (created if missing)
tuxedo             # TUI on the default file (see resolution below)
tuxedo --sample    # open the bundled sample file in the temp dir
tuxedo <command>   # run a one-shot CLI command — see "Command-line interface"
tuxedo update      # print upgrade instructions for your install
tuxedo --help
tuxedo --version

When a newer release is available, the status bar shows ↑ (tuxedo update) next to the version. The check runs in the background, is cached at $XDG_CACHE_HOME/tuxedo/latest_version.json for 24 h, and fails silently when offline. Set TUXEDO_NO_UPDATE_CHECK=1 to disable.

Which file tuxedo opens

Both the TUI and the CLI resolve the todo file the same way, in order:

  1. An explicit FILE argument (TUI only).
  2. $TODO_FILE, if set.
  3. $TODO_DIR/todo.txt, if $TODO_DIR is set.
  4. ./todo.txt in the current directory, if it exists.
  5. Otherwise the TUI shows a first-run prompt — press c to create ./todo.txt here, or `s

readme truncated — read the full docs on github

Frequently asked questions

Is tuxedo free to use?

tuxedo is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does tuxedo do?

A fast, keyboard-driven terminal UI for todo.txt.

What is tuxedo written in?

tuxedo is primarily written in Rust. Its source is publicly available at https://github.com/webstonehq/tuxedo, and it has 1,672 GitHub stars.