๐Ÿ”” 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-ring feature, enabled by default)
    • Rustls with aws crypto (requires rustls-aws feature)
    • Native TLS (requires native-tls feature)
  • Discovery support:
  • Multi-account watch: every configured account at once, each reconnecting on its own
  • Interactive wizard: carillon configure turns 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

Sponsoring

nlnet

Special thanks to the NLnet foundation and the European Commission that have been financially supporting the project for years:

This program is part of Pimalaya, free software funded entirely by grants and donations. If you find it useful, consider sponsoring its development:

GitHub Ko-fi Buy Me a Coffee Liberapay thanks.dev PayPal