Public Rust crates
mxr is shipped as one binary. Most workspace crates stay private on purpose.
Four smaller email contracts are public Rust crates because they are useful outside mxr and have their own conformance story.
Check what mxr consumes
Section titled “Check what mxr consumes”cargo tree -p mxr-search -i mail-querycargo tree -p mxr-sync -i mail-threadingcargo tree -p mxr-mail-parse -i list-unsubscribecargo tree -p mxr-export -i mailbox-formatsWhat you get: the exact registry crate version currently wired into this mxr checkout.
Do not assume the newest crates.io release is the version mxr consumes. Docs-only and metadata patch releases can ship without requiring mxr to move immediately. Check the two surfaces separately:
# Version pinned by this mxr checkout:cargo tree -p mxr-search -i mail-query
# Registry metadata from Cargo's local index/cache:cargo info mail-queryWhat you get: the app-consumed version first, then Cargo’s registry metadata for the package. If you need the release-sensitive newest version, confirm on crates.io as well.
| Crate | Contract | mxr consumer |
|---|---|---|
mail-query | Gmail-style search parser and typed AST | mxr-search |
mail-threading | RFC 5256 / JWZ client-side threading | mxr-sync |
list-unsubscribe | RFC 2369 / RFC 8058 unsubscribe header parsing | mxr-mail-parse |
mailbox-formats | mbox variants and Maildir reader/writer | mxr-export |
Use one directly
Section titled “Use one directly”Add the package you need:
cargo add mail-querycargo add mail-threadingcargo add list-unsubscribecargo add mailbox-formatsWhat you get: the standalone package, not the mxr daemon, store, or provider model.
Know the boundary
Section titled “Know the boundary”The crate owns the portable contract. mxr owns local execution policy.
mail-query, for example, parses Gmail-style search syntax into an AST. mxr then maps that AST onto SQLite, Tantivy, and semantic search. Parser support does not always mean Gmail-identical execution over local data.
Inspect the two sides separately:
cargo info mail-queryrg -n "mail_query|register_filter|QueryNode" crates/searchWhat you get: package metadata from crates.io, then the mxr-specific execution layer that consumes it.
Maintain the docs
Section titled “Maintain the docs”When one of these crates publishes a new patch, update package docs in the standalone crate repo first. Then decide whether mxr needs a dependency bump.
rg -n "mail-query|mail-threading|list-unsubscribe|mailbox-formats" \ Cargo.toml Cargo.lock README.md docs site/src/content/docsWhat you get: every mxr doc or manifest that names the public crates.
Patch claims about mxr’s consumed version only when Cargo.toml or
Cargo.lock changes.