Files
mail/crates/flectar-mail-core/Cargo.toml
T

121 lines
4.5 KiB
TOML

[package]
name = "flectar-mail-core"
version = "0.2.29"
edition = "2024"
license = "AGPL-3.0-only"
repository = "https://github.com/flectar/mail"
homepage = "https://flectar.com"
publish = false
[features]
# Keep the protocol/database core lean by default. Hosts that expose semantic
# search opt in explicitly; mail-only applications should never compile or
# link an unused model runtime.
default = []
local-embeddings = [
"dep:candle-core",
"dep:candle-nn",
"dep:candle-transformers",
"dep:tokenizers",
"dep:hf-hub",
]
[dependencies]
tokio = { workspace = true, features = ["process"] }
serde.workspace = true
serde_json.workspace = true
thiserror.workspace = true
anyhow.workspace = true
tracing.workspace = true
chrono.workspace = true
# email protocols
async-imap = { version = "0.12", default-features = false, features = ["runtime-tokio"] }
jmap-client = { version = "0.4.2", default-features = false, features = ["async", "ring"] }
lettre = { version = "0.11", default-features = false, features = ["smtp-transport", "tokio1", "hostname"] }
# full_encoding pulls in encoding_rs so non-UTF-8 header/body charsets
# (GB2312/GBK/Big5, Shift-JIS, EUC-KR, ...) decode correctly instead of
# turning into U+FFFD replacement chars. Default features are empty in 0.11.
mail-parser = { version = "0.11", features = ["full_encoding"] }
mail-builder = "0.4"
# TLS
tokio-rustls = "0.26"
rustls = "0.23"
# The operating system verifies server certificates, as for reqwest. Mozilla's
# bundled roots are the fallback when a Linux system has no CA bundle.
rustls-platform-verifier = "0.7"
webpki = { package = "rustls-webpki", version = "0.103" }
webpki-roots = "1"
futures = "0.3"
# storage
rusqlite = { version = "0.41", features = ["backup", "bundled", "functions"] }
# Local embeddings use Candle's CPU backend only: no MKL, CUDA, Metal, or
# Accelerate runtime. Match Candle's tokenizer version so the opt-in feature
# links one tokenizer implementation instead of two.
candle-core = { version = "0.11", optional = true }
candle-nn = { version = "0.11", optional = true }
candle-transformers = { version = "0.11", optional = true }
tokenizers = { version = "0.23", default-features = false, features = ["fancy-regex"], optional = true }
hf-hub = { version = "1", default-features = false, features = ["rustls-tls"], optional = true }
# auth
base64 = "0.23"
sha2 = "0.10"
url = "2"
percent-encoding = "2"
# CalDAV (HTTP + multistatus XML); rustls keeps the no-native-TLS property
reqwest = { version = "0.13", default-features = false, features = ["rustls", "http2", "form", "json", "stream"] }
quick-xml = { version = "0.42", features = ["encoding"] }
async-trait = "0.1"
# misc
ammonia = "4.1.8"
deunicode = "1"
rand = "0.9"
regex = "1"
once_cell = "1"
encoding_rs = "0.8"
tempfile = "3"
ring = "0.17"
# Reads settings from Thunderbird profile exports; flate2 is already linked.
zip = { version = "9.0.4", default-features = false, features = ["deflate-flate2-zlib-rs"] }
# Used only by build.rs, which cargo-machete does not scan.
[package.metadata.cargo-machete]
ignored = ["cfg_aliases"]
[build-dependencies]
cfg_aliases = "0.2"
[dev-dependencies]
tokio = { workspace = true, features = ["test-util"] }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# Cargo cannot evaluate build.rs aliases; this is `rename_noreplace`.
[target.'cfg(any(target_os = "linux", target_os = "android", target_os = "macos", target_os = "ios"))'.dependencies]
rustix = { version = "1", features = ["fs"] }
# This is `desktop`. Mobile hosts inject their storage paths and a
# platform-owned credential store instead.
[target.'cfg(not(any(target_os = "android", target_os = "ios", target_env = "ohos")))'.dependencies]
dirs = "6"
keyring = { version = "3", features = ["sync-secret-service", "apple-native", "windows-native"] }
# This is `secret_service`. keyring reaches the Secret Service through this
# client; the core uses it to create a missing default collection and to explain
# keyring's errors.
[target.'cfg(all(any(target_os = "linux", target_os = "freebsd", target_os = "openbsd"), not(target_env = "ohos")))'.dependencies]
dbus-secret-service = "4"
# connect_tcp turns off SYN resends for loopback connections and checks the
# Windows build first.
[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.61", features = ["Wdk_System_SystemServices", "Win32_Networking_WinSock", "Win32_System_IO", "Win32_System_SystemInformation"] }
[target.'cfg(all(any(target_os = "linux", target_os = "freebsd", target_os = "openbsd"), not(target_env = "ohos")))'.dev-dependencies]
dbus = "0.9"