Cargo.toml
Rama main · réplica de lectura del repositorio original.
[workspace]
resolver = "2"
members = [
"crates/hoard-core",
"crates/hoard-deflate",
"crates/hoard-server",
"crates/hoard-cli",
"crates/hoard-admin",
"crates/hoard-agent",
"crates/hoard-desktop",
"crates/hoardd",
"crates/hoard-manifest",
"crates/hoard-installer",
]
# The benchmark harness is a development tool and is never published, so it is
# not a member either. A member missing from a clean clone doesn't just fail to
# build itself: `cargo build --workspace` aborts before compiling anything, so
# the whole tree, server included, stops building. Excluded, its absence goes
# unnoticed; it carries its own `[workspace]` table to still build standalone.
exclude = ["crates/hoard-pruebas"]
[workspace.package]
edition = "2021"
version = "1.3.0"
authors = ["insider <raileonoliva@gmail.com>"]
license = "AGPL-3.0"
# Self-hosted app, never published to crates.io. Marking the members private
# also tells cargo-deny to apply `allow-wildcard-paths` to our intra-workspace
# path deps (the exemption is skipped for publishable crates).
publish = false
[workspace.dependencies]
# Async runtime
tokio = { version = "1", features = ["full"] }
# HTTP server
axum = { version = "0.7", features = ["multipart"] }
tower = "0.4"
tower-http = { version = "0.5", features = ["trace", "cors", "compression-gzip", "compression-zstd"] }
# HTTP client.
#
# TLS is rustls, not the OpenSSL-backed default, and that is a portability fix
# rather than a preference. With `default-tls` the binary links the build
# machine's libssl, which carries that machine's OPENSSLDIR baked in
# (`/usr/lib/ssl` on Ubuntu). The `.deb` gets away with it because it runs on
# the same family, but the AppImage bundles that libssl and travels: on
# Arch-derived systems (SteamOS, Bazzite) keep nothing at `/usr/lib/ssl`, so
# every handshake dies with `certificate verify failed` plus a `stat
# (/usr/lib/ssl/certs)` in the error, and the app can reach nothing at all.
#
# Both root stores are on, and both are load-bearing: webpki ships the Mozilla
# roots inside the binary so a handshake works on any distro whatever it keeps
# on disk, and the native store is what still lets a self-hosted server with a
# private CA in the system trust be reached. reqwest merges the two.
reqwest = { version = "0.12", default-features = false, features = [
"json",
"multipart",
"stream",
"charset",
"http2",
"gzip",
"zstd",
"system-proxy",
"rustls-tls-native-roots",
"rustls-tls-webpki-roots",
] }
# Database
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "migrate", "time", "uuid"] }
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"
# CLI args
clap = { version = "4", features = ["derive", "env"] }
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
# File-rotating tracing layer for `hoard sync run` (so the Windows Task
# Scheduler service leaves a tail-able log behind; macOS launchd already
# redirects via the plist). Also used by hoard-desktop.
tracing-appender = "0.2"
# Error handling
anyhow = "1"
thiserror = "1"
# Crypto
argon2 = "0.5"
blake3 = "1"
sha2 = "0.10"
hex = "0.4"
rand = "0.8"
base64 = "0.22"
# CLI password prompt (login Cloud sin echo)
rpassword = "7"
# Compression
async-compression = { version = "0.4", features = ["tokio", "zstd", "gzip"] }
tokio-tar = "0.3"
# Synchronous zstd for the embedded Ludusavi catalog. Already in the tree as
# a transitive dep of async-compression, so this costs no extra build.
zstd = "0.13"
# Time
time = { version = "0.3", features = ["serde", "serde-well-known", "formatting", "parsing", "macros"] }
# UUID
uuid = { version = "1", features = ["v4", "serde"] }
# YAML (Ludusavi manifest)
serde_yaml = "0.9"
# Misc
tokio-stream = "0.1"
figment = { version = "0.10", features = ["toml", "env"] }
directories = "5"
indicatif = "0.17"
tokio-util = { version = "0.7", features = ["io"] }
futures = "0.3"
bytes = "1"
regex = "1"
strsim = "0.11"
# Process & filesystem watching (Phase 4)
sysinfo = { version = "0.32", default-features = false, features = ["system"] }
notify = "6"
notify-debouncer-mini = "0.4"
# Native OS notifications from `hoardd` (ADR 0021 D.14.1). Mind the names:
# `notify` above watches the filesystem and `notify-rust` tells the user, and they
# have nothing to do with each other. It was already in the tree as a transitive
# dependency of `tauri-plugin-notification`, so the service and the app take
# exactly the same path to `org.freedesktop.Notifications`.
notify-rust = "4"
# Object-safe async traits (`hoard-server` BlobStore abstraction).
async-trait = "0.1"
# HKCU registry access. `hoard-agent` writes the user PATH with it; `hoardd`
# writes the Run entry that starts the service at logon when the Task Scheduler
# refuses to register a task without an elevated console.
winreg = "0.52"
# Test-only, used by per-crate `[dev-dependencies]` blocks.
tempfile = "3"
# Property-based testing with automatic shrinking. Test-only; drives the
# kernel reconciler's invariant suite (ADR 0021, Slice 2): random tick
# sequences that shrink to a minimal counterexample when an invariant breaks.
proptest = "1"
# ZIP writer for cloud account exports (server, `cloud` feature). No default
# features: game saves are already compressed, so export entries are `Stored`
# (no re-deflate): we only need the archive container, not compression.
zip = { version = "2", default-features = false }
# Smaller, slightly faster release binaries (desktop bundle, server, sidecar).
# Thin LTO + one codegen unit trade release-build time for output quality;
# strip drops the symbol table; panics still print message and file:line, which
# is what we actually read in the field.
[profile.release]
lto = "thin"
codegen-units = 1
strip = true