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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
[]
= "rivet-cli"
= "0.15.0"
= "2024"
= "1.94"
= "MIT"
= "https://github.com/panchenkoai/rivet"
= "Rivet: PostgreSQL/MySQL/SQL Server → Parquet/CSV (local, S3, GCS, Azure). Crate name rivet-cli; binary rivet."
= "README.md"
= "rivet"
= ["dev/", "USER_TEST_PLAN.md", "tests/", ".github/", "docs/gifs/"]
[]
= "rivet"
= "src/lib.rs"
[[]]
= "rivet"
= "src/main.rs"
[[]]
= "rivet-mcp"
= "src/bin/rivet-mcp.rs"
# Dev-only test-data generator. Gated behind the off-by-default `dev-seed`
# feature so `cargo install rivet-cli` (default features) does NOT build or
# install a generically-named `seed` binary on the user's PATH — its default
# run issues `TRUNCATE ... CASCADE` against a local DB (CWE-1188). Dev/docker
# workflows build it with `--features dev-seed`.
[[]]
= "seed"
= "src/bin/seed/main.rs"
= ["dev-seed"]
[]
= "1"
# Part-body MD5 (RustCrypto) + base64 to match GCS's `md5Hash` encoding, so
# integrity can be verified against the object's listing metadata with no
# download (both already in the tree transitively).
= "0.22"
= "0.11"
# `canonical_extension_types` enables Arrow's canonical extension wrappers
# (`arrow_schema::extension::{Uuid, Json}`) — see Cargo dep on `parquet`
# below for the writer-side pairing.
= { = "58", = ["canonical_extension_types"] }
# Direct dep on `arrow-schema` so we can use the `extension` module — the
# `arrow` facade re-exports `DataType` / `Field` but not the `extension`
# submodule. Version is pinned to match `arrow`'s transitive choice.
= { = "58", = ["canonical_extension_types"] }
= { = "0.4", = ["serde"] }
= { = "4", = ["derive", "env"] }
= "1"
= "0.11"
= "0.2"
= "0.4"
# `native-tls` feature wires the same OpenSSL-backed TLS stack the rest of
# the workspace already vendors (see `native-tls = { ... features = ["vendored"] }`
# above) so MySQL configs with `tls.mode: require | verify-ca | verify-full`
# work the same way they do on Postgres. Without this feature, the mysql
# crate panics at connect time with "Client had asked for TLS connection
# but TLS support is disabled" — operator-facing panic, no recoverable error.
= { = "28", = false, = ["minimal", "native-tls", "binlog"] }
= { = "0.55", = ["blocking", "services-fs", "services-s3", "services-gcs", "services-azblob"] }
# `arrow_canonical_extension_types` enables parquet-rs to emit native Parquet
# `LogicalType::Uuid` / `LogicalType::Json` whenever an Arrow field carries the
# corresponding `arrow.uuid` / `arrow.json` extension type metadata. Without
# this flag, those columns would fall back to `String` and our downstream
# autoload story (DuckDB → native UUID, ClickHouse → Nullable(UUID), …)
# stays one cast away. See `src/types/mapping.rs` for the emission site.
= { = "58", = ["arrow", "zstd", "lz4", "flate2", "arrow_canonical_extension_types"] }
= "4"
= {
version = "0.19",
= ["with-chrono-0_4", "with-serde_json-1", "with-uuid-0_8"],
}
= "0.5"
# `vendored` statically links OpenSSL on Linux so `cargo install rivet-cli` works
# on bare systems and our cross-compiled aarch64-unknown-linux-gnu release
# builds don't need `libssl-dev`. On macOS `native-tls` uses the system
# `SecureTransport` framework and the `vendored` flag is a no-op — no OpenSSL
# is ever compiled or linked there.
= { = "0.2", = ["vendored"] }
= "0.10"
= {
version = "0.2",
= ["with-chrono-0_4", "with-serde_json-1", "with-uuid-0_8"],
}
= "0.4"
= "1"
= "0.8"
= { = "0.39", = ["bundled"] }
= { = "1", = ["derive"] }
= "1"
= "0.10"
# JSON Schema generation for `rivet schema config` and the
# `schemas/rivet.schema.json` checked-in artifact (v0.7.3 P0.1/P0.2).
# `derive` feature gives us `#[derive(JsonSchema)]`; the `preserve_order`
# feature keeps Config field order stable across rebuilds so the
# generated schema diff is reviewable.
= { = "1", = ["preserve_order"] }
= "3"
= { = "0.7", = true }
= { = "1.50.0", = ["rt-multi-thread", "net", "time"] }
# MSSQL / SQL Server source driver (async). Bridged to the sync `Source` trait
# via a per-source `tokio` current-thread runtime + `block_on` (ADR-0011 keeps
# `Source` sync). `native-tls` matches the OpenSSL stack the PG/MySQL drivers
# already vendor; `rustls` default is disabled to avoid a second TLS tree.
= { = "0.12", = false, = ["tds73", "chrono", "rustls"] }
# `compat` bridges a tokio `TcpStream` to the `futures-io` traits tiberius'
# `Client::connect` expects.
= { = "0.7", = ["compat"] }
# `TryStreamExt` to consume tiberius' `QueryStream` row-by-row in the MSSQL
# export, so a chunk streams in `batch_size`-row batches instead of
# materialising whole — bounds RSS independent of `chunk_size`. Same 0.3.x
# tiberius already pulls in.
= "0.3"
= "0.16"
# Single reqwest version (0.12) shared with the one reqsign 0.16 / opendal pull
# in. Keeping one HTTP+TLS stack avoids duplicating rustls / hyper / h2 in the
# release binary. `rustls-tls` is selected explicitly so it matches the TLS
# backend opendal already links.
= { = "0.12", = false, = ["blocking", "json", "rustls-tls"] }
= { = "0.8.15", = ["xxh3"] }
= "0.18"
= "0.16"
= "3"
= "0.1"
= "1"
[]
= "0.6"
[]
= "1"
= "1"
= "1"
= "0.10"
= { = "0.8", = ["html_reports"] }
# OPT-3: property-based type round-trip (tests/type_roundtrip/property.rs).
= "1"
# MSSQL type-roundtrip harness (tests/common/mssql.rs) needs the async driver
# directly to seed fixtures — same crates the lib uses, exposed to the
# integration-test crate.
= { = "0.12", = false, = ["tds73", "chrono", "rustls"] }
= { = "1.50.0", = ["rt-multi-thread", "net", "time"] }
= { = "0.7", = ["compat"] }
[[]]
= "hot_paths"
= false
[[]]
= "resource_aware"
= false
[]
= ["jemalloc"]
= ["tikv-jemallocator"]
# Builds the dev-only `seed` test-data generator (see `[[bin]] seed`). Off by
# default so it is never installed by `cargo install rivet-cli`.
= []
[]
= true
= "fat"
= 1
# opt-level 3 (speed), not "s" (size): rivet is CPU-bound on the row→Arrow
# decode path, where `3` measured 11–21% faster than `s` on the pure-Rust
# value-formatting hot loop (criterion `csv_write_batch`, 2026-06-08); the
# zstd-bound Parquet write benefits ~5% (zstd is a C lib, opt-insensitive).
# Costs ~+28% binary size (~14.6 -> ~18.8 MB) — the size-optimised `z` profile
# is kept below as `release-min` for the distributable artifact.
= 3
# Size-optimised profile for distributable artifacts. Use with:
# cargo build --profile release-min --bin rivet
# Inherits everything from `release`, then trades runtime/panic ergonomics for
# a smaller binary. Not used by `cargo bench` / `cargo test`, so criterion's
# unwinding tests and `should_panic` continue to work as before.
[]
= "release"
= "z"
= "abort"
= false
# Profiling: release codegen + debug symbols (no strip) so `sample` / dtrace can
# symbolicate the row->Arrow decode hot path. Not for distribution.
[]
= "release"
= false
= true
= false