mxr 0.4.22

A programmable, agent-native email client. One CLI across all your providers.
Documentation
[package]
name = "mxr"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
description = "A programmable, agent-native email client. One CLI across all your providers."
readme = "README.md"
include = [
    "Cargo.toml",
    "Cargo.lock",
    "README.md",
    "LICENSE-MIT",
    "LICENSE-APACHE",
    ".sqlx/**",
    "crates/**",
]

[lib]
name = "mxr"
path = "crates/daemon/src/lib.rs"

[[bin]]
name = "mxr"
path = "crates/daemon/src/main.rs"

[features]
default = ["semantic-local"]
semantic-local = ["local"]
local = [
    "dep:calamine",
    "dep:fastembed",
    "dep:hnsw_rs",
    "dep:sha2",
    "dep:tempfile",
    "dep:undoc",
    "dep:unpdf",
]

[workspace]
resolver = "2"
members = [
    "crates/test-support",
]

[workspace.package]
version = "0.4.22"
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.75"
repository = "https://github.com/planetaryescape/mxr"
homepage = "https://github.com/planetaryescape/mxr"
keywords = ["email", "terminal", "tui", "imap", "gmail"]
categories = ["email", "command-line-utilities"]

[workspace.dependencies]
glob-match = "0.2"
which = "7"

# IMAP (fork with ENABLE/NAMESPACE support, published as mxr-async-imap)
async-imap = { package = "mxr-async-imap", path = "vendor/async-imap", version = "0.10.5" }
async-native-tls = "0.5"

# Async
tokio = { version = "1", features = ["full"] }

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_bytes = "0.11"

# Database
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "uuid", "chrono", "migrate"] }

# Search
tantivy = "0.22"

# TUI
ratatui = "0.29"
crossterm = "0.28"

# Types
uuid = { version = "1", features = ["v5", "v7", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
bitflags = { version = "2", features = ["serde"] }

# Error handling
thiserror = "2"
anyhow = "1"

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

# Async traits
async-trait = "0.1"

# IPC framing
tokio-util = { version = "0.7", features = ["codec"] }
bytes = "1"

# CLI
clap = { version = "4", features = ["derive"] }
clap_complete = "4"

# Futures
futures = "0.3"

# Directories
dirs = "6"

# Config
toml = "0.8"

# Gmail/OAuth
yup-oauth2 = "11"
reqwest = { version = "0.12", features = ["json"] }
axum = { version = "0.8", features = ["ws"] }
tower-http = { version = "0.6", features = ["cors"] }
tower = { version = "0.5", features = ["util"] }
keyring = { version = "3", features = ["apple-native"] }
base64 = "0.22"
mail-parser = "0.9"
url = "2"

# TUI extras
nucleo = "0.5"
unicode-width = "0.2"

# Reader
html2text = "0.14"
regex = "1"
once_cell = "1"

# Compose
serde_yaml = "0.9"
comrak = { version = "0.31", default-features = false, features = ["shortcodes"] }

# SMTP
lettre = { version = "0.11", default-features = false, features = ["tokio1-rustls-tls", "builder", "hostname", "pool", "smtp-transport"] }

# Testing
tempfile = "3"
wiremock = "0.6"
pretty_assertions = "1"
insta = { version = "1", features = ["yaml"] }
assert_cmd = "2"
predicates = "3"

[dependencies]
anyhow = { workspace = true }
async-imap = { workspace = true }
async-native-tls = { workspace = true }
async-std = { version = "1", features = ["default"] }
async-trait = { workspace = true }
axum = { workspace = true }
base64 = { workspace = true }
bitflags = { workspace = true }
bytes = { workspace = true }
calamine = { version = "0.34", optional = true }
chrono = { workspace = true }
clap = { workspace = true }
clap_complete = { workspace = true }
comrak = { workspace = true, default-features = false, features = ["shortcodes"] }
crossterm = { version = "0.28", features = ["event-stream"] }
dirs = { workspace = true }
fastembed = { version = "5.13", optional = true }
futures = { workspace = true }
glob-match = { workspace = true }
hnsw_rs = { version = "0.3.4", optional = true }
html2text = { workspace = true }
keyring = { workspace = true }
lettre = { workspace = true }
mail-parser = { workspace = true }
nucleo = { workspace = true }
once_cell = { workspace = true }
ratatui = { workspace = true }
regex = { workspace = true }
reqwest = { workspace = true }
serde = { workspace = true }
serde_bytes = { workspace = true }
serde_json = { workspace = true }
serde_yaml = { workspace = true }
sha2 = { version = "0.10", optional = true }
sqlx = { workspace = true }
tantivy = { workspace = true }
tempfile = { workspace = true, optional = true }
thiserror = { workspace = true }
throbber-widgets-tui = "0.8.0"
tokio = { workspace = true }
tokio-util = { workspace = true }
toml = { workspace = true }
tower = { workspace = true }
tower-http = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
tui-textarea = "0.7.0"
undoc = { version = "0.1", optional = true }
unicode-width = { workspace = true }
unpdf = { version = "0.2", optional = true }
url = { workspace = true }
uuid = { workspace = true }
which = { workspace = true }
yup-oauth2 = { workspace = true }

[dev-dependencies]
assert_cmd = { workspace = true }
insta = { workspace = true }
mxr-test-support = { path = "crates/test-support" }
predicates = { workspace = true }
pretty_assertions = { workspace = true }
tempfile = { workspace = true }
tokio = { workspace = true, features = ["test-util"] }
tokio-tungstenite = "0.28"
wiremock = { workspace = true }
zip = "2.4"