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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
[]
= "cachekit-rs"
= "0.7.0"
= true
= true
= true
= true
= "Caching for Rust (beta). Supports cachekit.io SaaS, Redis, Memcached, local File, and Cloudflare Workers."
= "../../README.md"
= "https://cachekit.io"
= ["cache", "redis", "encryption", "moka", "cloudflare-workers"]
= ["caching", "web-programming", "cryptography"]
[]
= "cachekit"
[]
= ["cachekitio", "encryption", "l1", "reliability"]
= ["dep:reqwest", "dep:serde_json"]
= ["dep:fred"]
# Memcached backend (native only). rust-memcache is sync (r2d2-pooled, socket
# read/write timeouts); ops run on tokio's blocking pool via spawn_blocking,
# each under a tokio/time budget so a wedged server can't hang callers.
= ["dep:memcache", "tokio/rt", "tokio/time"]
# Local filesystem backend (native only). tokio/rt provides spawn_blocking so
# disk I/O never blocks the async executor; libc provides O_NOFOLLOW/ELOOP
# constants and rustix provides safe flock/geteuid on unix.
= ["tokio/rt", "tokio/sync", "dep:libc", "dep:rustix"]
= ["dep:worker", "dep:js-sys", "dep:getrandom", "dep:serde_json"]
# cachekit-core's `encryption` feature folds aes-gcm in automatically on wasm32
# (`wasm` is a pure alias for `encryption`). No separate `cachekit-core/wasm`
# activation needed. Deliberately version-free: the fact is version-independent,
# and a pinned version in prose is the only part that rots (LAB-866 precedent).
= ["cachekit-core/encryption"]
# tokio/rt provides Handle::try_current + spawn for the L1 stale-while-
# revalidate background refresh (native only — `workers`+`l1` is a compile
# error, so this never reaches wasm32).
= ["dep:moka", "tokio/rt"]
= ["dep:cachekit-macros"]
# Retry with backoff + circuit breaker around backend ops, and cross-process
# cold-miss suppression via LockableBackend. Native only (needs tokio timers).
= ["tokio/time"]
# Opt into ?Send / Rc on native targets (for tokio::task::LocalSet, single-threaded
# runtimes, etc.). Same code paths that wasm32 already uses.
= []
[]
= { = "0.4", = ["messagepack"] }
= { = "1", = ["derive"] }
= "1"
= "2.0"
= "0.1"
= "0.10"
= "1"
= { = "1", = ["derive"] }
= "2"
= "0.4"
= "2"
= { = "1", = ["v4", "js"] }
# `sync` only: runtime-independent primitives for cold-miss single-flight.
# Compiles on wasm32. Features stack per consumer: `reliability` adds `time`
# (native only); the `memcached`/`file` backends add `rt` (spawn_blocking) —
# see the feature declarations above.
= { = "1", = false, = ["sync"] }
# Optional: HTTP backend (native)
= { = "0.12", = true, = false, = ["rustls-tls", "json"] }
= { = "1", = true }
# Optional: Redis backend. `i-scripts` exposes EVAL for the atomic
# compare-and-delete lock release (LockableBackend).
= { = "9", = true, = ["i-scripts"] }
# Optional: Memcached backend. rust-memcache with no default features — the
# `tls` feature would pull openssl into a rustls-only SDK (and the previously
# used async-memcached 0.6 shipped toxiproxy_rust/openssl as runtime deps,
# which is why it was dropped — expert panel, LAB-429). Held at 0.19: 0.20.0
# uses `is_multiple_of`/let-chains and breaks this workspace's 1.85 MSRV.
= { = "0.19", = true, = false }
# Optional: L1 in-process cache
= { = "0.12", = true, = ["sync"] }
# Optional: Cloudflare Workers
= { = "0.4", = true }
= { = "0.3", = true }
= { = "0.2", = true, = ["js"] }
# Optional: proc-macro decorator
= { = "0.7.0", = "../cachekit-macros", = true }
# Optional (file backend, unix only): libc for the O_NOFOLLOW/ELOOP constants
# (std has no portable spelling); rustix for safe flock/geteuid wrappers —
# this workspace forbids `unsafe`, so raw libc calls are off the table.
[]
= { = "0.2", = true }
= { = "1", = true, = false, = ["fs", "process", "std"] }
# Non-optional on wasm32, regardless of features: `SystemTime::now()` panics on
# wasm32-unknown-unknown, so session.rs reads `js_sys::Date::now()` there
# (LAB-1079). Target-gated rather than feature-gated so every wasm32 build of
# session_headers() — workers AND cachekitio — gets the safe clock.
[]
= "0.3"
[]
= "1"
# Native-only test machinery: tokio's rt-multi-thread (and tempfile's fs use)
# cannot build for wasm32, and cargo compiles the whole dev-dep graph whenever
# any integration test compiles — so these must not be in the wasm32 dev graph.
[]
= { = "1", = ["macros", "rt-multi-thread", "sync", "time"] }
= "3"
= "3"
# wasm32 runtime tests (tests/wasm_session_tests.rs) — compile-only CI let the
# SystemTime::now() trap ship in five releases (LAB-1079). Exact-pinned because
# wasm-bindgen-test releases in lockstep with wasm-bindgen, and CI's
# wasm-bindgen-test-runner binary must match the locked wasm-bindgen version
# byte-for-byte (bump this, the lockfile, and the runner pin in ci.yml together).
[]
= "=0.3.71"
[]
= true