Himalaya: A Powerful CLI Tool for Email Management in Your Terminal

Summary
Himalaya is a robust command-line interface (CLI) tool designed for managing emails directly from your terminal. Built with Rust, it offers multi-accounting, PGP encryption, OAuth 2.0 support, and various backend integrations like IMAP, SMTP, Maildir, and Notmuch, providing a flexible and efficient way to handle your correspondence. This tool distinguishes itself by offering a stateless, command-line approach, ideal for scripting and integration into existing workflows.
Repository Info
Introduction
Himalaya is a powerful, Rust-based command-line interface (CLI) tool designed for efficient email management directly from your terminal. Unlike traditional Terminal User Interfaces (TUIs) that lock your terminal into an event loop, Himalaya operates in a stateless manner, allowing you to interact with your emails using standard shell commands. It supports multi-accounting, various backends including IMAP, Maildir, Notmuch, SMTP, and Sendmail, and advanced features like PGP encryption and OAuth 2.0 authorization. Himalaya is built on email-lib
, part of the broader Pimalaya project, aiming to provide robust Rust tools for email handling.
Installation
Himalaya offers several convenient installation methods:
- Pre-built Binary:
curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | sudo sh # Or for a regular user: curl -sSL https://raw.githubusercontent.com/pimalaya/himalaya/master/install.sh | PREFIX=~/.local sh
- Cargo:
cargo install himalaya # With specific features, e.g., only IMAP: cargo install himalaya --no-default-features --features imap
- Arch Linux:
pacman -S himalaya # Or via AUR with yay: yay -S himalaya-git
- Homebrew:
brew install himalaya
- Scoop:
scoop install himalaya
- Fedora Linux/CentOS/RHEL:
dnf copr enable atim/himalaya dnf install himalaya
- Nix:
nix-env -i himalaya
- From Sources:
git clone https://github.com/pimalaya/himalaya.git cd himalaya cargo build --release
(Binaries will be in
target/release
)
Examples
Interacting with Himalaya is straightforward using its command-line syntax.
Listing Emails:
To list envelopes from a specific account and folder:
himalaya envelope list --account posteo --folder Archives.FOSS --page 2
Composing Messages:
Himalaya allows message composition using your $EDITOR
. Messages are structured with headers (e.g., From
, To
, Subject
) and a body, separated by an empty line. It supports plain text or the MIME Meta Language (MML) for rich content, including attachments.
Example of a plain text message:
From: alice@localhost
To: Bob <bob@localhost>
Subject: Hello from Himalaya
Hello, world!
Example of a message with an attachment using MML:
From: alice@localhost
To: bob@localhost
Subject: How to attach stuff
Regular binary attachment:
<#part filename=/path/to/file.pdf><#/part>
For more detailed examples, refer to the MML documentation.
Why Use Himalaya
Himalaya stands out as an email client for several reasons:
- CLI-First Approach: Its stateless command-line nature makes it highly scriptable and easily integratable into existing workflows, offering a distinct advantage over traditional TUI clients.
- Flexibility and Configuration: Supports multi-accounting with interactive wizard setup or manual TOML-based configuration. It provides extensive options for managing various email services, including detailed guides for Proton Mail, Gmail, Outlook, and iCloud Mail.
- Comprehensive Backend Support: Integrates seamlessly with IMAP, Maildir, Notmuch, SMTP, and Sendmail, ensuring compatibility with a wide range of email systems.
- Security Features: Offers robust PGP encryption options (via shell commands, GPG bindings, or native implementation) and secure OAuth 2.0 authorization flows for services like Gmail and Outlook. It also supports global system keyring for secret management.
- Rust-Powered Performance: Being written in Rust, Himalaya benefits from its performance, memory safety, and reliability.
- Extensible Ecosystem: Serves as a foundation for other interfaces, with existing plugins for Vim, Emacs, and Raycast, demonstrating its adaptability.
Links
- GitHub Repository: https://github.com/pimalaya/himalaya
- Pimalaya Core MML Examples: https://github.com/pimalaya/core/tree/master/mml/examples
- Vim Plugin: https://github.com/pimalaya/himalaya-vim
- Emacs Plugin: https://github.com/dantecatalfamo/himalaya-emacs
- Raycast Extension: https://www.raycast.com/jns/himalaya
- REPL Variant: https://github.com/pimalaya/himalaya-repl