Contributing guide
July 15, 2026 ยท View on GitHub
Thank you for investing your time in contributing to Pimalaya CLI.
Whether you are a human or an AI agent, read these in order before touching the code:
- the Pimalaya README for what the project is and how its repositories stack;
- the Pimalaya CONTRIBUTING guide, which chains to the shared architecture and guidelines;
- the inline header documentation, starting with src/lib.rs: it is the architecture document of this crate;
- the docs/ folder for the development history and living plans.
Everything below documents only what differs from the Pimalaya standards.
Deliberately std
Unlike the io-* protocol libraries, Pimalaya CLI is not no_std and never will be: it exists to talk to a terminal, a filesystem and a human, so it depends on std unconditionally. The #![no_std] and extern crate alloc conventions do not apply here.
Feature matrix
Every tool sits behind its own feature, so binaries pull in only what they use:
cargo build # every tool (default features)
cargo build --no-default-features --features build # build-script helpers only
cargo build --no-default-features --features terminal # clap glue, printer, logger, error report
cargo build --no-default-features --features spinner # cancellable spinner
cargo build --no-default-features --features table # formatted tables
cargo build --no-default-features --features imap # account wizard (pulls in wizard)
The imap, smtp, jmap, caldav and carddav features each enable the wizard feature, since they only add their protocol-specific wizard submodule.