Cargo.toml
Rama main · réplica de lectura del repositorio original.
[workspace]
members = [
"crates/ferryman-channel",
"crates/ferryman-core",
"crates/ferryman-server",
"crates/ferryman-cli",
"crates/ferryman-ops",
"crates/ferryman-worker-sdk",
"crates/ferryman-iroh",
"crates/ferryman-hive-rescue",
# A sub-product rather than a part of Ferryman: `ferry-deadman` seals a repo to a
# future drand beacon round, and works on any git repository with no Ferryman
# anywhere. It is in this workspace so it is built, linted and tested with
# everything else rather than rotting in a directory nobody compiles - the lesson
# the tray already taught. Same licence as everything here: it was written under
# MIT and relicensed by its author on the way in, deliberately.
"crates/ferry-deadman",
]
# ferryman-tray is excluded on purpose: it needs desktop libraries (GTK on Linux) that a
# headless agent box does not have, and breaking the build there to compile a tray nobody
# on that machine can see would be the wrong trade. Built per platform in the release job.
exclude = ["crates/ferryman-tray"]
resolver = "2"
[workspace.package]
version = "0.6.3"
edition = "2024"
license = "LicenseRef-Ferryman-Source-Available"
repository = "https://github.com/estejosh/ferryman"
[workspace.dependencies]
anyhow = "1.0"
async-stream = "0.3"
async-trait = "0.1"
# BIP-39 English recovery phrases (24 words for 32 seed bytes). `tiny-bip39` is the
# small, maintained fork of the vetted `bip39` 0.6 with the same word list and the same
# validation, default-features off so it compiles English only and skips the RNG helpers
# Ferryman does not use. Renamed to `bip39` so call sites read as the standard.
bip39 = { package = "tiny-bip39", version = "2.0.0", default-features = false }
chacha20poly1305 = "0.11"
axum = { version = "0.8", features = ["macros", "json"] }
chrono = { version = "0.4", features = ["serde"] }
clap = { version = "4.5", features = ["derive", "env"] }
futures-util = "0.3"
fs2 = "0.4"
hex = "0.4"
hmac = "0.13"
hostname = "0.4"
ed25519-dalek = { version = "3.0", features = ["rand_core", "pkcs8", "pem"] }
keyring = { version = "3.6", features = ["windows-native", "apple-native", "sync-secret-service"] }
pbkdf2 = "0.13"
rpassword = "7.4"
http-body-util = "0.1"
rand = "0.10"
# Held at 0.12 deliberately. 0.13 builds fine, but its `rustls` feature brings
# aws-lc-rs in place of `ring`, and aws-lc-sys wants cmake and a C toolchain -
# a hard stop on the machines least likely to have one, which is exactly the
# machine an agent is asked to install this on unattended. The OTLP exporter
# pulls a 0.13 of its own either way; one duplicate crate is cheaper than a
# native build dependency.
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }
rusqlite = { version = "0.40", features = ["bundled", "chrono"] }
# The OpenTelemetry crates move as a set, and nothing moves until
# `tracing-opentelemetry` does: it decides which `opentelemetry` ends up in the
# graph, and bumping the other three around it only puts two versions of
# `opentelemetry` there, after which the newer SDK's exporter no longer
# satisfies a trait that came from the older API:
#
# the trait `opentelemetry_sdk::trace::SpanExporter` is not implemented
# for `opentelemetry_otlp::SpanExporter`
# no method named `tracer` found for struct `SdkTracerProvider`
#
# The set was held at 0.31 for exactly that reason until tracing-opentelemetry
# 0.33 shipped against 0.32. Dependabot proposes the partial bump, because from
# a single crate's point of view it looks safe; it is not. Move all four or
# none.
opentelemetry = { version = "0.32", features = ["trace"] }
opentelemetry_sdk = { version = "0.32", features = ["rt-tokio"] }
opentelemetry-otlp = { version = "0.32", default-features = false, features = ["http-proto", "reqwest-client"] }
tracing-opentelemetry = "0.33"
serde = { version = "1.0", features = ["derive"] }
serde_jcs = "0.2"
serde_json = "1.0"
hkdf = "0.13"
sha2 = "0.11"
system-idle-time = "1.0"
sysinfo = { version = "0.39", default-features = false, features = ["system"] }
thiserror = "2.0"
tokio = { version = "1.47", features = ["full"] }
toml = "1.1"
tower = "0.5"
tower-http = { version = "0.7", features = ["trace", "request-id", "cors"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
uuid = { version = "1.18", features = ["v4", "serde"] }
wait-timeout = "0.2"
x25519-dalek = { version = "3", features = ["static_secrets"] }
zstd = "0.14.3"
[workspace.lints.rust]
unsafe_code = "forbid"
[workspace.lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }