1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[]
= "errand"
= "0.1.3"
= "2024"
# Own license line, not workspace: errand predates the serval adoption and is
# published MIT/Apache (founding convention); serval's workspace default is MPL.
= "MIT OR Apache-2.0"
= "Async small-web (smolweb) transport: gemini, gopher, finger, spartan, nex, guppy, and titan in one scheme-routed fetch, plus titan-upload and misfin-send write companions. Bytes in, bytes out, no HTTP, host-agnostic."
= "https://github.com/mark-ik/serval"
# Override serval's workspace-wide publish = false: errand is a published crate.
= true
= ["gemini", "gopher", "smolweb", "nex", "guppy"]
= ["network-programming"]
= "README.md"
[]
= "src/lib.rs"
[]
# No features. The `parse` module (gemtext/gopher/nex/feed) compiles
# unconditionally: the dep-free parsers cost nothing, and the feed parser's
# quick-xml is light enough to keep as a plain dependency rather than a gate. (A
# cargo feature added in a sibling repo is invisible to its dependents until the
# crate is pushed, which made a `parse-feed` gate impractical in this workspace.)
= []
[]
= "2.5"
# The Guppy protocol transaction (spec v0.4.4: acks, retransmission, chunk
# reassembly) lives in its own spec-faithful crate; errand adapts its response.
# The three protocol crates are workspace members under protocols/ (adopted
# 2026-07-10 with errand), each keeping its own published crate identity.
= { = true }
# Spartan and nex transactions live in their spec-faithful sibling crates.
= { = true }
= { = true }
# Misfin send delegates to the misfin crate's client, on the same ring
# provider this crate builds rustls with (no C toolchain).
= { = "0.0.3", = false, = ["client", "ring"] }
= { = "1", = false, = ["net", "io-util", "time"] }
# TLS for gemini: rustls 0.23 on the ring provider, with a trust-on-first-use
# verifier (capsules are conventionally self-signed). aws-lc-rs is left off so the
# crate builds without a C toolchain.
= { = "0.23", = false, = ["ring", "std", "tls12"] }
= { = "0.26", = false, = ["ring", "tls12"] }
# SHA-256 of leaf certificates for TOFU pinning. Already in the cone (rustls's
# ring provider); declared directly because `tofu` now uses it.
= "0.17"
# RSS / Atom feed parsing (`parse::feed`). A light pure-Rust XML reader; kept an
# unconditional dep (the cross-repo feature wall made a `parse-feed` gate
# impractical, and quick-xml is small relative to the rustls/tokio cone).
= "0.39"
# Host-neutral tracing facade: errand only *emits* structured events on the
# load-bearing fetch op; the consuming app installs the subscriber. No dep on any
# app or diagnostics registry.
= "0.1"
[]
= { = "1", = false, = ["rt", "macros", "net", "io-util"] }