CXPost

April 7, 2026 · View on GitHub

CXPost Logo

License: MIT .NET Platform

A cross-platform terminal email client built on SharpConsoleUI.

⭐ If you find CXPost useful, please consider giving it a star! ⭐

It helps others discover the project and motivates continued development.

GitHub stars

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.

CXPost Dashboard

Quick Start

Option 1: One-line install (Linux/macOS, no .NET required)

curl -fsSL https://raw.githubusercontent.com/nickprotop/cxpost/master/install.sh | bash
cxpost

Windows (PowerShell)

irm https://raw.githubusercontent.com/nickprotop/cxpost/master/install.ps1 | iex

Option 2: Build from source (requires .NET 10)

git clone https://github.com/nickprotop/cxpost.git
cd cxpost
./build-and-install.sh
cxpost

On first run, CXPost will prompt you to configure your email account (IMAP/SMTP).

Features

📬 Multi-AccountUnified inbox across multiple email accounts with per-account folder trees
📎 AttachmentsView attachment metadata, save to disk (quick save or folder picker), send with attachments
🔍 SearchInstant local search + server-side IMAP SEARCH with recent query suggestions
💬 ThreadingJWZ conversation threading via Message-ID/References/In-Reply-To headers
📊 DashboardInteractive account dashboard with stats, sparklines, clickable folders and actions
🖥️ LayoutsClassic, Wide, and Read mode with composable view toggles (F2/F3/F4/F8)
✉️ ComposeReply, reply-all, forward with configurable prefixes. Signature with position control
🗑️ Safe DeleteMove to Trash with 5-second undo. Confirmation dialog for permanent deletes
🔐 CredentialsOS-native keyring (secret-tool/Keychain) with encrypted file fallback
🌐 HTML EmailAngleSharp-based rendering to rich terminal markup with link preservation
IMAP IDLEPush notifications with debounced sync for real-time new mail
📁 Folder DetectionIMAP special-use attributes (RFC 6154) + name heuristics, manual override in settings
🔄 Offline CacheSQLite-backed message/contact storage with lazy body fetching
🎨 Polished UIDepth-based focus dimming, animated transitions, gradient sync progress, row micro-animations
⚙️ Per-Account SettingsSignature, reply-to, auto-bcc, default-cc, sync interval, mark-as-read, folder paths
🖱️ Mouse SupportClick to navigate, click buttons, click attachment save, click breadcrumb

Keyboard Shortcuts

KeyAction
Navigate messages / folders
EnterSelect / activate
Ctrl+NCompose new message
Ctrl+RReply (Ctrl+Shift+R for reply all)
Ctrl+FForward
Ctrl+SSearch messages
Ctrl+UToggle read/unread
Ctrl+DToggle flag
Ctrl+MMove to folder
DelDelete (move to Trash / confirm permanent)
F2Toggle folder tree
F3Toggle preview panel
F4Toggle read mode (full-width reader with message strip)
Ctrl+BToggle message strip in read mode
F5Sync all accounts
F8Toggle layout (Classic ↔ Wide)
Ctrl+,Settings
EscExit read mode / clear search / close dialog
1-9Save attachment #N
Ctrl+1-9Save As attachment #N
ASave all attachments

Configuration

CXPost stores configuration and data in standard OS locations:

LinuxmacOS / Windows
Config~/.config/cxpost/config.yaml%APPDATA%/CXPost/config.yaml
Data~/.local/share/cxpost/%LOCALAPPDATA%/CXPost/
CredentialsOS keyring or encrypted fileOS keyring

Per-Account Settings

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

Global Settings

  • Appearance: Layout (Classic / Wide / Last Used)
  • Behavior: Sync interval, notifications, startup view, confirm before quit

Building from Source

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

Install locally

./build-and-install.sh   # Builds and installs to ~/.local/bin/cxpost

Release

./publish.sh patch       # Bumps version, pushes tag, triggers GitHub Actions

Architecture

CXPost/
├── 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)

Uninstall

cxpost-uninstall.sh
# Or manually:
rm ~/.local/bin/cxpost
rm -rf ~/.config/cxpost ~/.local/share/cxpost  # optional: remove data

License

MIT