README
ΒΆ
__ __
____ ___ ____ _/ /______/ /_ ____ _
/ __ '__ \/ __ '/ __/ ___/ __ \/ __ '/
/ / / / / / /_/ / /_/ /__/ / / / /_/ /
/_/ /_/ /_/\__,_/\__/\___/_/ /_/\__,_/
A powerful, feature-rich email client for your terminal. Built with Go and the Bubble Tea TUI framework, Matcha brings a beautiful, modern email experience to the command line with support for rich content, multiple accounts, and advanced terminal features.

Features
Email Management
- π¬ Inbox & Sent Mail: View and manage emails from both inbox and sent folders
- π§ Multi-Account Support: Manage multiple email accounts with an elegant tabbed interface
- β‘ Smart Caching: Instant inbox display with background refresh for optimal performance
- π Real-time Refresh: Manually refresh your inbox at any time with a single keypress
- βΎοΈ Infinite Scroll: Automatically loads more emails as you scroll through your inbox
- π Search & Filter: Built-in filtering to quickly find emails by subject, sender, or content
- π Rich Email Viewing:
- HTML email rendering with proper formatting
- Markdown support for plain-text emails
- Styled headers and body text
- Proper handling of quoted-printable encoding
- π¬ Reply to Emails: Quick reply with automatic quoting of original message
- ποΈ Delete & Archive: Manage your inbox by deleting or archiving messages
- π Attachment Support:
- Download email attachments to your Downloads folder
- Automatic file opening after download
- Smart filename handling (prevents overwrites with auto-numbering)
- Support for various attachment encodings
Rich Content Display
Matcha supports modern terminal image protocols for displaying images directly in your terminal:
πΌοΈ Image Protocol Support
- Kitty Graphics Protocol: Full support for Kitty, Ghostty, WezTerm, Wayst, and Konsole terminals
- iTerm2 Inline Images: Native support for iTerm2 and Warp terminals
- Inline Email Images: Display images embedded in HTML emails (including CID references)
- Remote Image Fetching: Automatically fetches and displays remote images from URLs
- Data URI Support: Renders base64-encoded inline images
- Smart Fallback: Gracefully falls back to clickable links when images aren't supported
π Terminal Hyperlinks (OSC 8)
- Clickable Links: Full OSC 8 hyperlink support for modern terminals
- Supported Terminals: Kitty, Ghostty, WezTerm, Alacritty, iTerm2, Hyper, VS Code terminal, GNOME Terminal, and more
- Smart Detection: Automatically detects terminal capabilities
- Fallback Mode: Shows plain text URLs in unsupported terminals
Composing Emails
- βοΈ Compose New Emails: Clean, intuitive interface for writing emails
- π Markdown Support: Write emails in Markdown that automatically converts to HTML
- πΌοΈ Inline Images: Embed images in your emails using Markdown syntax
 - π File Attachments: Attach files with an integrated file picker
- π₯ Contact Autocomplete: Smart suggestions from your contact history
- πΎ Auto-save Drafts: Never lose your work - drafts are automatically saved
- π¨ Multi-Account Sending: Choose which account to send from with a simple picker
- β©οΈ Reply Threading: Proper email threading with In-Reply-To and References headers
- π¨ Rich Formatting: Send both plain text and HTML versions of your emails
Draft Management
- π Automatic Draft Saving: Drafts are saved when you exit the composer
- π Draft Library: View all your saved drafts in one place
- βΆοΈ Resume Editing: Pick up where you left off by reopening any draft
- ποΈ Draft Cleanup: Delete drafts you no longer need
- β° Time Tracking: See when each draft was last modified
- π Search Drafts: Filter through your drafts by subject or recipient
Account Management
- π€ Multiple Accounts: Configure and manage multiple email accounts
- π Easy Switching: Switch between accounts with keyboard shortcuts or tabs
- βοΈ Provider Presets: Built-in support for:
- Gmail (imap.gmail.com / smtp.gmail.com)
- iCloud (imap.mail.me.com / smtp.mail.me.com)
- Custom IMAP/SMTP: Configure any email provider with custom server settings
- βοΈ Account Settings:
- Add new accounts
- Remove existing accounts
- Edit account details
- Configure separate fetch and send addresses
- π Secure Storage: Credentials stored locally in
~/.config/matcha/config.json
Contact Management
- π Automatic Contact Saving: Email addresses are automatically saved from:
- Emails you receive
- Emails you send
- π Smart Search: Fuzzy search through your contacts while composing
- β‘ Quick Autocomplete: Contact suggestions appear as you type in the "To" field
- πΎ Persistent Storage: Contacts are saved locally for offline access
User Interface
- π¨ Beautiful TUI: Clean, modern terminal interface built with Bubble Tea
- β¨οΈ Vim-like Keybindings: Efficient keyboard navigation (
j/k,h/l, etc.) - π± Responsive Design: Adapts to your terminal window size
- π― Focus Management: Clear visual indication of focused elements
- π Tabbed Interface: Switch between accounts with tab navigation
- π Styled Elements: Color-coded interface elements for better readability
- π¬ Contextual Help: Built-in help text shows available commands for each screen
Advanced Features
- π Automatic Updates: Built-in update checker notifies you of new releases
- β¬οΈ Self-Update Command: Update Matcha with a simple
matcha updatecommand - π― Smart Image Rendering: Automatically calculates terminal cell size for proper image display
- π Debug Mode: Environment variables for debugging image protocol issues
- π§ Flexible Configuration: JSON-based configuration with automatic migration from legacy formats
- π Performance Optimized: Concurrent email fetching for faster inbox loading
- πΎ Email Caching: Instant inbox display on startup with background refresh
Supported Email Providers
Matcha works with any email provider that supports IMAP and SMTP. Here are the built-in presets:
| Provider | IMAP Server | SMTP Server | Notes |
|---|---|---|---|
| Gmail | imap.gmail.com:993 | smtp.gmail.com:587 | Requires app-specific password |
| iCloud | imap.mail.me.com:993 | smtp.mail.me.com:587 | Requires app-specific password |
| Custom | Your server | Your server | Configure any IMAP/SMTP provider |
Using Gmail or iCloud
For Gmail and iCloud, you'll need to generate an app-specific password:
- Gmail: Create an App Password
- iCloud: Generate an app-specific password
Installation
There are several ways to install Matcha:
Package Managers
Homebrew (macOS & Linux)
brew tap floatpane/matcha
brew install matcha
After installation, run:
matcha
Install using Snap
sudo snap install matcha
Build from Source
Matcha is written in Go. To build it manually:
-
Ensure you have Go installed (
go version). -
Clone the repository:
git clone https://github.com/floatpane/matcha.git -
Navigate to the project folder:
cd matcha -
Build the binary:
go build -trimpath -ldflags="-s -w" -o matchaFor an even smaller binary, compress with UPX (install via
brew install upxorapt install upx):upx --best --lzma matcha
[!WARNING] UPX compression does NOT work on macOS ARM builds. See #97
- Run it:
./matcha
Usage
First Launch
On first launch, Matcha will prompt you to configure an email account. You'll need:
- Your email address
- Your password (or app-specific password for Gmail/iCloud)
- Email provider (Gmail, iCloud, or Custom)
Keyboard Shortcuts
Main Menu
β/βorj/k- Navigate menu itemsEnter- Select optionEsc- Go back / ExitCtrl+C- Quit application
Inbox View
β/βorj/k- Navigate emailsβ/βorh/l- Switch between account tabsEnter- Open selected email/- Filter/search emailsr- Refresh inboxd- Delete selected emaila- Archive selected emailEsc- Back to main menu
Email View
β/βorj/k- Scroll email contentr- Reply to emaild- Delete emaila- Archive emailTab- Focus attachmentsEsc- Back to inbox
Attachment View (when focused)
β/βorj/k- Navigate attachmentsEnter- Download and open attachmentTaborEsc- Back to email body
Composer
Tab/Shift+Tab- Navigate fieldsEnter-- On "From" field: Select account (if multiple)
- On "Attachment" field: Open file picker
- On "Send" button: Send email
β/β- Navigate contact suggestions (when typing in "To" field)Esc- Save draft and exit
Settings
β/βorj/k- Navigate accountsEnter- Add new accountd- Delete selected accountEsc- Back to main menu
Updating Matcha
Check for updates and install the latest version:
matcha update
This command will:
- Check for the latest release on GitHub
- Detect your installation method (Homebrew, Snap, or binary)
- Update using the appropriate method
Terminal Compatibility
Image Protocol Support
For the best experience with inline images, use a terminal that supports modern image protocols:
Kitty Graphics Protocol:
iTerm2 Inline Images:
Hyperlink Support (OSC 8)
Clickable links work in:
- Kitty, Ghostty, WezTerm, Alacritty, Foot
- iTerm2, Hyper, Warp
- VS Code integrated terminal
- GNOME Terminal, Tilix (VTE-based terminals)
- tmux, screen (when properly configured)
Configuration
[!WARNING] The passwords are stored in plain text as of right now, make sure your computer is not infected before using Matcha
Configuration is stored in ~/.config/matcha/config.json
Example configuration:
{
"accounts": [
{
"id": "unique-id-1",
"name": "John Doe",
"email": "john@gmail.com",
"password": "app-specific-password",
"service_provider": "gmail",
"fetch_email": "john@gmail.com"
},
{
"id": "unique-id-2",
"name": "Work Email",
"email": "john@company.com",
"password": "password",
"service_provider": "custom",
"fetch_email": "john@company.com",
"imap_server": "imap.company.com",
"imap_port": 993,
"smtp_server": "smtp.company.com",
"smtp_port": 587
}
]
}
Additional Data Locations
- Drafts:
~/.config/matcha/drafts/ - Email Cache:
~/.config/matcha/cache.json - Contacts:
~/.config/matcha/contacts.json
Debugging
Image Protocol Debugging
If images aren't displaying correctly, enable debug logging:
export DEBUG_IMAGE_PROTOCOL=1
export DEBUG_IMAGE_PROTOCOL_LOG=/tmp/matcha-images.log
matcha
Check the log file for detailed information about image rendering.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is distributed under the MIT License. See the LICENSE file for more information.
Credits
Built with:
- Bubble Tea - TUI framework
- Lipgloss - Style definitions
- Bubbles - TUI components
- go-imap - IMAP client
- go-message - Email parsing
- Goldmark - Markdown rendering
- goquery - HTML parsing
Report Bug Β· Request Feature Β· Contributing Guidelines
Made with β₯ for terminal enthusiasts
Documentation
ΒΆ
There is no documentation for this package.