BSD/Linux terminal email client with support for multiple accounts and Maildir / mbox / notmuch / IMAP / JMAP.
Community links:
mailing lists | #meli
on OFTC IRC | Report bugs and/or feature requests in meli's issue tracker
Main view | Compact main view | Compose with embed terminal editor |
Main repository:
Official mirrors:
- Try an online interactive web demo powered by WebAssembly
cargo install meli
- Download and install pre-built debian package, static linux binary, or
- Install with Nix
See a comprehensive tour of meli
in the manual page meli(7)
.
See also the Quickstart tutorial online.
After installing meli
, see meli(1)
, meli.conf(5)
, meli(7)
and meli-themes(5)
for documentation. Sample configuration and theme files can be found in the docs/samples/
subdirectory. Manual pages are also hosted online.
meli
by default looks for a configuration file in this location: $XDG_CONFIG_HOME/meli/config.toml
You can run meli with arbitrary configuration files by setting the $MELI_CONFIG
environment variable to their locations, i.e.:
MELI_CONFIG=./test_config cargo run
For a quick start, build and install locally:
PREFIX=~/.local make install
Available subcommands for make
are listed with make help
. The Makefile should be POSIX portable and not require a specific make
version.
meli
requires rust 1.39 and rust's package manager, Cargo. Information on how
to get it on your system can be found here: https://doc.rust-lang.org/cargo/getting-started/installation.html
With Cargo available, the project can be built with make
and the resulting binary will then be found under target/release/meli
. Run make install
to install the binary and man pages. This requires root, so I suggest you override the default paths and install it in your $HOME
: make PREFIX=$HOME/.local install
.
You can build and run meli
with one command: cargo run --release
.
Some functionality is held behind "feature gates", or compile-time flags. The following list explains each feature's purpose:
gpgme
enables GPG support vialibgpgme
(on by default)dbus-notifications
enables showing notifications usingdbus
(on by default)notmuch
provides support for using a notmuch database as a mail backend (on by default)jmap
provides support for connecting to a jmap server and use it as a mail backend (off by default)sqlite3
provides support for builting fast search indexes in local sqlite3 databases (on by default)cli-docs
includes the manpage documentation compiled by eithermandoc
orman
binary to plain text inmeli
's command line. Embedded documentation can be viewed with the subcommandmeli man [PAGE]
svgscreenshot
provides support for taking screenshots of the current view ofmeli
and saving it as SVG files. Its only purpose is taking screenshots for the officialmeli
webpage. (off by default)debug-tracing
enables various trace debug logs from various places around themeli
code base. The trace log is printed instderr
. (off by default)
Building with Debian's packaged cargo might require the installation of these
two packages: librust-openssl-sys-dev librust-libdbus-sys-dev
A *.deb
package can be built with make deb-dist
To use the optional notmuch backend feature, you must have libnotmuch5
installed in your system. In Debian-like systems, install the libnotmuch5
packages. meli
detects the library's presence on runtime.
To use the optional gpg feature, you must have libgpgme
installed in your system. In Debian-like systems, install the libgpgme11
package. meli
detects the library's presence on runtime.
To build with JMAP support, prepend the environment variable MELI_FEATURES='jmap'
to your make invocation:
MELI_FEATURES="jmap" make
or if building directly with cargo, use the flag `--features="jmap"'.
Development builds can be built and/or run with
cargo build
cargo run
There is a debug/tracing log feature that can be enabled by using the flag
--feature debug-tracing
after uncommenting the features in Cargo.toml
. The logs
are printed in stderr, thus you can run meli
with a redirection (i.e 2> log
)
Code style follows the default rustfmt profile.
How to run specific tests:
cargo test -p {melib, meli} (-- --nocapture) (--test test_name)
perf record -g target/debug/bin
perf script | stackcollapse-perf | rust-unmangle | flamegraph > perf.svg
Note: cargo-fuzz
requires the nightly toolchain.
cargo +nightly fuzz run envelope_parse -- -dict=fuzz/envelope_tokens.dict