tmc is a Rust terminal mail client (MUA) for reading and triaging email over JMAP.
- Fast, keyboard-first email workflow in a terminal UI.
- Unix-friendly composition flow: drafts open in
$EDITOR. - Clear separation of concerns:
tmcreads/manages mail; message submission is external. - Scriptable automation through a JSON-over-stdin/stdout CLI mode.
- Connects to one or more JMAP accounts.
- Lists mailboxes and emails, opens message view, and shows threads.
- Supports read/unread, flag/unflag, move, archive, delete, and mailbox-wide mark-read.
- Supports compose/reply/reply-all/forward draft generation.
- Supports optional mail rules and retention policies.
- Provides
--cliNDJSON mode for integrations and automation.
- Rust toolchain (stable) with Cargo.
- A JMAP server/account.
- An editor available via
$EDITOR(for compose/reply/forward flow). - A non-interactive credential command for
password_command(for examplepass).
cargo buildRelease build:
cargo build --releaseFrom this repository:
cargo install --path .Or use the compiled release binary directly:
./target/release/tmcDefault config path:
$XDG_CONFIG_HOME/tmc/config.toml- Fallback:
~/.config/tmc/config.toml
Example config:
[ui]
editor = "nvim"
page_size = 100
scrolloff = 3
mouse = true
sync_interval_secs = 60
[mail]
archive_folder = "Archive"
deleted_folder = "Trash"
# Optional: override From used for draft generation
# reply_from = "Me <me@example.com>"
[account.personal]
well_known_url = "https://mx.example.com/.well-known/jmap"
username = "me@example.com"
password_command = "pass show email/example.com"
[account.work]
well_known_url = "https://mx.work.com/.well-known/jmap"
username = "me@work.com"
password_command = "pass show email/work.com"Legacy fallback is supported via [jmap] with well_known_url, username, and password_command.
Optional rules file path defaults to rules.toml next to your config; override with --rules=PATH.
cargo runFor all command-line options, run:
tmc --helpcargo test
cargo clippy
cargo fmt -- --check