Skip to content

kryptic-sh/inbx

inbx

Modal-vim email client. Rust workspace.

CI release License: MIT Website

Sibling to sqeel, buffr, hjkl.

Status

Working CLI + TUI. Real-account dogfood pending.

Providers

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)

Workspace

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

Highlights

  • 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=mutual auto-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 .eml with 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.ics invite 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

CLI

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

Install

macOS (Homebrew)

brew install kryptic-sh/tap/inbx

Arch Linux (AUR)

yay -S inbx-bin

Alpine Linux

apk add --allow-untrusted inbx-*.apk   # download .apk from releases page

Pre-built binaries

Grab the tarball for your platform from the releases page.

Features

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-sitter

Build

cargo build --workspace
cargo test --workspace --all-features

Theme

$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.

hjkl tracking

The composer is built on hjkl-editor runtime::*.

See PLAN.md for full design.

Contributing

See CONTRIBUTING.md or open an issue / PR.

License

MIT

About

Modal-vim email client. Rust.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

 
 
 

Contributors