james.maes a268fd5a00 Merge pull request #431 from KofTwentyTwo/story/wire-contacts-sync
feat(contacts): drive contacts sync from stored CardDAV accounts
2026-08-14 21:48:47 -05:00

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 and docs/adr/0001-engine-first-grpc-architecture.md for 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

License

MIT OR Apache-2.0.

S
Description
Local-first, engine-first mail, calendar & contacts engine in Rust: a daemon (nunciod) that owns all state and publishes a versioned gRPC API. Pre-alpha, under active reconstruction.
https://nuncio.mx Readme
8.1 MiB
0 Stars 2 Watchers 0 Forks
Languages
Rust 95.5%
TypeScript 3.8%
CSS 0.6%