๐ carillon [](https://matrix.to/#/#pimalaya:matrix.org) [](https://fosstodon.org/@pimalaya) [](https://pimalaya.org/sponsor/)
August 29, 2026 ยท View on GitHub
CLI to watch PIM collection changes, written in Rust
Caution
Carillon is v0.x: expect breaking changes between releases until it stabilises.
Table of contents
Features
- Mail backend support: IMAP rfc2177, JMAP rfc8621, Maildir specs
- Calendars and contacts backend support: CalDAV, CardDAV rfc6578
- Watch support: IMAP idle, JMAP event stream, collection poll everywhere else
- Hook support: desktop notification, shell command, or both, on every change
- Simple auth support for IMAP: anonymous, login, plain, oauthbearer, xoauth2, scram-sha-256
- HTTP auth support for JMAP (basic, bearer, raw header) and DAV (basic, bearer)
- TLS support:
- Rustls with ring crypto (requires
rustls-ringfeature, enabled by default) - Rustls with aws crypto (requires
rustls-awsfeature) - Native TLS (requires
native-tlsfeature)
- Rustls with ring crypto (requires
- Discovery support:
- Multi-account watch: every configured account at once, each reconnecting on its own
- Interactive wizard:
carillon configureturns an email address into a tested account
Tip
Carillon is written in Rust and uses cargo features to gate backend support. The default feature set is declared in Cargo.toml.
Installation
Pre-built binary
Not released yet. Until it is, the releases workflow builds one from master on demand, under Artifacts, with the default cargo features.
Cargo
cargo install --locked --git https://github.com/pimalaya/carillon.git
With IMAP support only, which drops the JMAP, Maildir and WebDAV backends:
cargo install --locked --git https://github.com/pimalaya/carillon.git \
--no-default-features \
--features imap,rustls-ring
Nix
If you have the Flakes feature enabled:
nix profile install github:pimalaya/carillon
Or run without installing:
nix run github:pimalaya/carillon
Sources
git clone https://github.com/pimalaya/carillon
cd carillon
nix run
Configuration
The configuration is loaded from the first existing path among:
$XDG_CONFIG_HOME/carillon/config.toml$HOME/.config/carillon/config.toml$HOME/.carillonrc
Override the path with carillon -c <PATH> or CARILLON_CONFIG=<PATH>. Multiple paths can be passed at once, separated by :; the first is the base and the rest are deep-merged on top. The full field reference lives in config.sample.toml.
Run carillon with no command to launch the wizard, carillon configure to run it again later. It discovers from your email address the services your provider publishes, asks which one to watch and how to authenticate, picks the best watch method the server supports, tests the connection, then saves the account or prints it for you to place by hand.
An account declares one backend block (imap, jmap, maildir, caldav, carddav) carrying the collection it watches, how it watches it (watch) and what it fires (hook). Declaring several is allowed, -b/--backend then selecting one.
Usage
Generate an account:
carillon configure
Watch every configured account, until interrupted:
carillon watch
Watch one account:
carillon -a work watch
Check that an account still connects and authenticates, on every backend it declares, before trusting a watch to keep running:
carillon -a work check
Force a backend on an account declaring several:
carillon -b jmap watch
Every command and every flag is documented behind --help. Man pages and shell completions are generated by carillon manual --dir <DIR> and carillon completion --dir <DIR>.
Logs go to stderr, so they can be redirected to a file while the command output stays on stdout:
carillon watch --log-level debug 2>/tmp/carillon.log
Use --log-file <PATH> to append them to a file directly. When --log-level is omitted the RUST_LOG environment variable is consulted, and RUST_BACKTRACE=1 adds the full error backtrace.
License
This project is licensed under either of:
Social
- Chat on Matrix
- News on Mastodon or RSS
- Mail at pimalaya.org@posteo.net
Sponsoring
Special thanks to the NLnet foundation and the European Commission that have been financially supporting the project for years:
- 2022 โ 2023: NGI Assure
- 2023 โ 2024: NGI Zero Entrust
- 2024 โ 2026: NGI Zero Core
- 2026 โ 2027: NGI Zero Commons Fund
This program is part of Pimalaya, free software funded entirely by grants and donations. If you find it useful, consider sponsoring its development:
