A cross-platform terminal email client built on SharpConsoleUI.
It helps others discover the project and motivates continued development.
CXPost brings a polished terminal UI to email. Multi-account IMAP with push notifications, offline SQLite caching, conversation threading, rich HTML rendering, attachment support, and a three-pane layout — all without leaving the terminal.
Read. Compose. Manage.
Option 1: One-line install (Linux/macOS, no .NET required)
curl -fsSL https://raw.githubusercontent.com/nickprotop/cxpost/master/install.sh | bash
cxpostWindows (PowerShell)
irm https://raw.githubusercontent.com/nickprotop/cxpost/master/install.ps1 | iexOption 2: Build from source (requires .NET 10)
git clone https://github.com/nickprotop/cxpost.git
cd cxpost
./build-and-install.sh
cxpostOn first run, CXPost will prompt you to configure your email account (IMAP/SMTP).
| 📬 Multi-Account | Unified inbox across multiple email accounts with per-account folder trees |
| 📎 Attachments | View attachment metadata, save to disk (quick save or folder picker), send with attachments |
| 🔍 Search | Instant local search + server-side IMAP SEARCH with recent query suggestions |
| 💬 Threading | JWZ conversation threading via Message-ID/References/In-Reply-To headers |
| 📊 Dashboard | Interactive account dashboard with stats, sparklines, clickable folders and actions |
| 🖥️ Layouts | Classic (vertical split) or Wide (3-column) — toggle with F8 |
| ✉️ Compose | Reply, reply-all, forward with configurable prefixes. Signature with position control |
| 🗑️ Safe Delete | Move to Trash with 5-second undo. Confirmation dialog for permanent deletes |
| 🔐 Credentials | OS-native keyring (secret-tool/Keychain) with encrypted file fallback |
| 🌐 HTML Email | AngleSharp-based rendering to rich terminal markup with link preservation |
| ⚡ IMAP IDLE | Push notifications with debounced sync for real-time new mail |
| 📁 Folder Detection | IMAP special-use attributes (RFC 6154) + name heuristics, manual override in settings |
| 🔄 Offline Cache | SQLite-backed message/contact storage with lazy body fetching |
| 🎨 Polished UI | Gradient backgrounds, clickable breadcrumb, toolbar, status bars, rounded dialogs |
| ⚙️ Per-Account Settings | Signature, reply-to, auto-bcc, default-cc, sync interval, mark-as-read, folder paths |
| 🖱️ Mouse Support | Click to navigate, click buttons, click attachment save, click breadcrumb |
| Key | Action |
|---|---|
↑ ↓ |
Navigate messages / folders |
Enter |
Select / activate |
Ctrl+N |
Compose new message |
Ctrl+R |
Reply (Ctrl+Shift+R for reply all) |
Ctrl+F |
Forward |
Ctrl+S |
Search messages |
Ctrl+U |
Toggle read/unread |
Ctrl+D |
Toggle flag |
Ctrl+M |
Move to folder |
Del |
Delete (move to Trash / confirm permanent) |
F2 |
Attach file (in compose) |
F5 |
Sync all accounts |
F8 |
Toggle layout (Classic ↔ Wide) |
Ctrl+, |
Settings |
Esc |
Clear search / exit edit mode / close dialog |
1-9 |
Save attachment #N |
Ctrl+1-9 |
Save As attachment #N |
A |
Save all attachments |
CXPost stores configuration and data in standard OS locations:
| Linux | macOS / Windows | |
|---|---|---|
| Config | ~/.config/cxpost/config.yaml |
%APPDATA%/CXPost/config.yaml |
| Data | ~/.local/share/cxpost/ |
%LOCALAPPDATA%/CXPost/ |
| Credentials | OS keyring or encrypted file | OS keyring |
Each account can be configured independently via Settings → Edit Account:
- General: Display name, email, username, reply-to, password
- Server: IMAP/SMTP host, port, security (SSL/TLS/None)
- Compose: Signature (with position), auto-bcc, default-cc, reply/forward prefixes
- Sync: Interval, max messages per folder, mark-as-read on view, notifications, folder path overrides
- Appearance: Layout (Classic / Wide / Last Used)
- Behavior: Sync interval, notifications, startup view, confirm before quit
Prerequisites: .NET 10 SDK, optionally ConsoleEx checked out alongside
git clone https://github.com/nickprotop/cxpost.git
cd cxpost
# If ConsoleEx is at ../ConsoleEx, it uses the project reference automatically
# Otherwise it pulls SharpConsoleUI from NuGet
dotnet build
dotnet run --project CXPost./build-and-install.sh # Builds and installs to ~/.local/bin/cxpost./publish.sh patch # Bumps version, pushes tag, triggers GitHub ActionsCXPost/
├── Models/ # Account, MailMessage, MailFolder, AttachmentInfo
├── Services/ # IMAP, SMTP, Cache, Config, Credentials, FolderResolver
├── Coordinators/ # MailSync, MessageList, Compose, Search, Notification
├── Data/ # SQLite repositories, migrations
└── UI/
├── CXPostApp.cs # Main window, layout, event handling
├── Components/ # Dashboard, StatusBar, MessageBar, HtmlConverter
└── Dialogs/ # Compose, Search, Settings, AccountSettings, Confirm
Key technologies: SharpConsoleUI (TUI framework), MailKit (IMAP/SMTP), AngleSharp (HTML parsing), SQLite (offline cache), YamlDotNet (config)
cxpost-uninstall.sh
# Or manually:
rm ~/.local/bin/cxpost
rm -rf ~/.config/cxpost ~/.local/share/cxpost # optional: remove data