Cargo aliases are a single command argv and cannot chain subcommands, so `cargo verify = ["fmt --all -- --check", "check-all", "test-all"]` tried to run a literal subcommand named "fmt --all -- --check" and always errored. The pre-commit hook already runs the three checks as separate commands, so it was unaffected. Drop the broken alias, drop the matching RustRover run configuration, and reword every doc that told readers to run `cargo verify` to instead run fmt/check-all/test-all as three commands.
3.8 KiB
Nuncio
A local-first mail, calendar, and contacts engine written in Rust.
Status: pre-alpha, under active reconstruction (2026-07-26). Nuncio began as an AI-generated proof of concept. A forensic assessment found that while several library-layer components are genuinely well-built, the end-to-end product did not work and much of the prior documentation was inaccurate. The project is being rebuilt engine-first. It is not usable yet, and published pre-1.0 releases are non-functional — do not install them. See the live roadmap (source:
docs/ROADMAP.md) for the plan anddocs/adr/0001-engine-first-grpc-architecture.mdfor the architecture decision.
What Nuncio is
A background daemon (nunciod) owns all state, credentials, and protocol logic
(IMAP/SMTP, then JMAP, CalDAV, CardDAV), and publishes a versioned gRPC API over
loopback. User interfaces are separate native client projects that consume that
API — they hold no business logic and no data of their own. This makes feature
parity across clients a property of the published contract rather than a matter of
discipline.
The only client in this repository is nuncio-cli, which serves as the reference
API consumer and the driver for end-to-end tests. Native GUIs (macOS/Windows), a
TUI, and an MCP bridge will live in separate repositories once the engine and its
API are solid.
Workspace layout
Engine libraries composed by the daemon:
| Crate | Role |
|---|---|
crates/nuncio-core |
Domain models, event bus, IPC/API layer, cross-cutting services |
crates/nuncio-store |
SQLite (WAL) persistence, FTS search, ciphers, corruption recovery, keyring vault |
crates/nuncio-mail |
IMAP, JMAP, SMTP protocol engines and MIME handling |
crates/nuncio-cal |
iCalendar, CalDAV, CardDAV, recurrence, scheduling |
crates/nuncio-contacts |
Contacts store, CardDAV sync, vCard |
crates/nuncio-filter |
NSQL declarative filter language (parser, validator, engine) |
crates/nunciod |
The daemon binary — owns state and serves the API |
crates/nuncio-cli |
Reference API client + E2E driver |
The former nuncio-tui, nuncio-gui, and nuncio-mcp shells have been moved to
_reference/ (out of the workspace) and will be rebuilt as separate client
repositories (roadmap Phase 5).
Build & test
cargo build --workspace # build everything
cargo check-all # clippy, all targets, warnings-as-errors (the gate)
cargo test-all # run the whole test suite
cargo test -p nuncio-store # test a single crate
There is no cargo verify alias (Cargo aliases can't chain subcommands). Run the
full local gate as three separate commands — cargo fmt --all -- --check,
cargo check-all, cargo test-all — which is exactly what the pre-commit hook runs.
Cargo aliases are defined in .cargo/config.toml.
Documentation
- Roadmap — live rendered page — the visual plan to a client-ready backend (GitHub Pages)
docs/ROADMAP.md— authoritative roadmap and target architecture (source for the page above)docs/STORY-WORKFLOW.md— how contributors execute a roadmap story (gates, patterns, review flow)docs/HANDOFF.md— development handoff: current state, branches, and the M1–M7 story indexdocs/BACKLOG.md— engineering-ready Phase 0 / Phase 1 storiesdocs/adr/— architecture decision recordsdocs/ARCHITECTURE.md— technical architecture
License
MIT OR Apache-2.0.