Modal-vim email client. Rust workspace.
Sibling to sqeel, buffr, hjkl.
Working CLI + TUI. Real-account dogfood pending.
| Provider | Status | Path |
|---|---|---|
| Generic IMAP + SMTP | Working | TLS + STARTTLS, app password / OAuth2 |
| Gmail / Workspace | Working | OAuth2 (XOAUTH2 SASL) over IMAP + SMTP |
| Microsoft 365 / Outlook | Working | OAuth2 IMAP/SMTP, or native MS Graph |
| Fastmail / Stalwart | Working | JMAP (basic + Bearer auth) |
crates/
inbx-core state, models, sync engine
inbx-net IMAP / SMTP / JMAP / Graph / OAuth2 / Sieve / IDLE
inbx-store Maildir + SQLite + FTS5 + outbox
inbx-config TOML config + XDG + keyring + theme
inbx-render HTML sanitize + remote-content gate + auth + PGP
inbx-contacts address book + autocomplete + CardDAV
inbx-ical calendar invite display + RSVP
inbx-composer hjkl-editor wrapper, MIME builder, templates
apps/
inbx CLI + TUI binary (ratatui)
inbx-sync background sync daemon
- TUI with vim navigation (j/k, h/l, gg/G, Tab) and a modal composer overlay
(
c/r/R/f, Ctrl-S send, Ctrl-D save draft); animated splash screen on startup (skip with any key) - Auth — app password via OS keyring, OAuth2 (Gmail + Microsoft) with PKCE + auth-code loopback flow, refresh tokens stored in the keyring
- Render — HTML sanitized via ammonia, remote content blocked by default, tracker pixels surfaced, SPF/DKIM/DMARC + phishing heuristics, PGP / S/MIME presence detection
- PGP — sign/encrypt via rpgp; gnupg keyring or inbx-managed key source; WKD
public key lookup; Autocrypt 1.1 header harvest;
prefer-encrypt=mutualauto-encrypt on replies - Read receipts — RFC 8098 MDN (Message Disposition Notification) support
- Search + threading — SQLite FTS5 over subject / from / to / body, JWZ §2 threading with mailing-list bracket-tag stripping
- Import/export — mbox and single
.emlwith flag round-trip - Sync — IMAP IDLE watch loop, offline outbox queue with exponential backoff, Microsoft Graph delta sync
- Server-side filters — ManageSieve client (RFC 5804) + vacation responder wizard
- Calendar —
.icsinvite parsing + METHOD:REPLY for accept/decline - Mailbox ops — UID STORE flags (
mark read/unread/star/trash), UID MOVE/COPY (RFC 6851), EXPUNGE, mailbox CRUD, SUBSCRIBE - Address book — frecency-ranked, harvest-on-send, CardDAV pull
- Templates — RFC 5322 files under
$XDG_DATA_HOME/inbx/<acct>/templates/ - List-Unsubscribe — RFC 8058 one-click
inbx accounts add [--oauth gmail|microsoft]
inbx accounts test
inbx accounts edit --imap-port 143 ...
inbx accounts remove [--purge]
inbx fetch [--folder INBOX] [--all] [--bodies] [--notify]
inbx watch [--folder INBOX] [--bodies] # IDLE loop
inbx list [--folder INBOX] [--limit 50]
inbx show <uid>
inbx headers <uid>
inbx body <uid>
inbx search <query>
inbx thread <thread-id>
inbx mark {read|unread|star|unstar|trash} --uid 42 43 44
inbx flag --uid 42 --add "\\Seen"
inbx mv --from INBOX --to Archive --uid 42
inbx cp --from INBOX --to Backup --uid 42
inbx expunge
inbx folder create|delete|rename|subscribe NAME
inbx draft new|reply|forward|save
inbx send [--attach PATH]...
inbx template list|save|show|use|remove
inbx contacts list|search|add|harvest|card-dav --url ...
inbx ical show|reply
inbx unsubscribe <uid>
inbx outbox list|drain|remove
inbx export [--format mbox|eml] [--uid ...]
inbx import --folder NAME [path.mbox | path.eml]
inbx oauth login|set-client|logout
inbx graph folders|fetch|send # Microsoft 365 (also via default [transport])
inbx jmap folders|fetch|send|watch|push # Fastmail / Stalwart (also via default [transport])
inbx sieve list|get|put|activate|delete|vacation
inbx pgp keygen|list|export|sign|verify|encrypt|decrypt|lookup-wkd
inbx # ratatui TUI (default — no subcommand)
inbx tui # equivalent alias
inbx sync [--account NAME] [--bodies] [--notify] # alias for inbx-sync daemon
inbx completion fish > ~/.config/fish/completions/inbx.fish
macOS (Homebrew)
brew install kryptic-sh/tap/inbxArch Linux (AUR)
yay -S inbx-binAlpine Linux
apk add --allow-untrusted inbx-*.apk # download .apk from releases pagePre-built binaries
Grab the tarball for your platform from the releases page.
| Feature | Crates | Description |
|---|---|---|
tree-sitter |
inbx, inbx-render |
Syntax highlighting for text/x-patch / text/x-diff bodies via hjkl-bonsai 0.5. Grammars loaded on demand at runtime. |
Enable with:
cargo build --features tree-sittercargo build --workspace
cargo test --workspace --all-features
$XDG_CONFIG_HOME/inbx/theme.toml — RGB triples for focused border, unfocused
border, status bg/fg, unread accent, highlight. Partial overrides fall back to a
built-in dark palette.
The composer is built on hjkl-editor
runtime::*.
See PLAN.md for full design.
See CONTRIBUTING.md or open an issue / PR.
MIT