[workspace] resolver = "3" members = ["domain", "mime", "gmail", "graph", "discover", "imap", "dav", "sieve", "pop3", "store", "sync", "pgp", "smime", "ai", "cli", "app", "testmail"] [workspace.package] version = "1.0.0" edition = "2024" rust-version = "1.98" license = "GPL-3.0-or-later" repository = "https://github.com/c9dev/penguin-mail" [workspace.dependencies] mailrs-domain = { path = "domain" } mailrs-mime = { path = "mime" } mailrs-gmail = { path = "gmail" } mailrs-graph = { path = "graph" } mailrs-discover = { path = "discover" } mailrs-imap = { path = "imap" } mailrs-dav = { path = "dav" } mailrs-sieve = { path = "sieve" } mailrs-pop3 = { path = "pop3" } mailrs-store = { path = "store" } mailrs-sync = { path = "sync" } mailrs-pgp = { path = "pgp" } mailrs-smime = { path = "smime" } mailrs-ai = { path = "ai" } mailrs-testmail = { path = "testmail" } adw = { package = "libadwaita", version = "0.9.2", features = ["v1_8"] } ammonia = "4.2.0" anyhow = "1.0.104" async-channel = "2.5.0" async-imap = { version = "0.11.3", default-features = false, features = ["runtime-tokio"] } base64 = "0.23.1" # iCalendar and vCard 3 and 4 for CalDAV and CardDAV. It writes back every # property and parameter it does not know, which a PUT of an event the # person did not edit needs. Without its default "jmap" feature it leaves # out JSCalendar, JSContact and their serde and uuid. calcard = { version = "0.3.14", default-features = false } chrono = { version = "0.4.45", default-features = false, features = ["clock", "std", "unstable-locales"] } chrono-tz = { version = "0.10.4", default-features = false, features = ["std"] } rrule = "0.14.0" clap = { version = "4.6.7", features = ["derive"] } dirs = "7.0.0" encoding_rs = "0.8.41" futures = "0.3.34" # `gettext-system` links the C library the desktop already ships, so the # app and the desktop read the same catalogues. gettext-rs = { version = "0.8.0", features = ["gettext-system"] } gtk = { package = "gtk4", version = "0.11.4", features = ["v4_20"] } # The tokenizer behind the sanitizer, which reads mail HTML without a # browser; ammonia already brings it. html5ever = "0.40.1" # The MX and SRV lookups discovery makes, through the system's DNS servers. hickory-resolver = "0.26.3" icalendar = "0.17.13" keyring = "4.2.0" # SMTP submission. Only the protocol: this crate dials and runs TLS itself, # so lettre brings no TLS stack, and without `hostname` no host name. lettre = { version = "0.11.23", default-features = false, features = ["smtp-transport", "tokio1"] } libc = "0.2.189" ksni = "0.3.6" mail-builder = "1.0.0" mail-parser = { version = "0.11.9", features = ["full_encoding"] } notify-rust = "4.18.0" # Secrets through the Secret portal, for a Flatpak build; a build outside # one keeps using `keyring`, which oo7 never touches then. oo7 = "0.6.0" # The Public Suffix List, compiled in, so discovery can tell a registrable # domain from a suffix such as `co.uk` without asking anyone. psl = "2.1.237" pulldown-cmark = "0.13.4" rand = "0.10.2" reqwest = { version = "0.13.5", features = ["json", "form", "query"] } # Reads autoconfig files. It refuses a document type declaration, so a file # cannot expand entities. roxmltree = "0.21.1" rusqlite = { version = "0.40.2", features = ["bundled"] } # reqwest already brings both; discovery's probe uses them directly, with # the platform's certificate store. rustls = "0.23.45" rustls-platform-verifier = "0.7.0" serde = { version = "1.0.229", features = ["derive"] } serde_json = "1.0.151" sha2 = "0.11.0" spellbook = "0.4.2" tempfile = "3.27.0" thiserror = "2.0.20" tokio = { version = "1.53.1", features = ["rt-multi-thread", "macros", "net", "time", "sync", "io-util", "signal", "process", "fs"] } # reqwest already brings it; discovery's probe runs TLS over tokio with it. tokio-rustls = "0.26.5" toml = "1.1.6" tracing = "0.1.44" tracing-subscriber = { version = "0.3.23", features = ["env-filter"] } url = "2.5.8" webkit = { package = "webkit6", version = "0.6.1", features = ["v2_50"] } wiremock = "0.6.5"