From 43492f3a4dd6ad1e27590b1466419d1570604d3d Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Thu, 30 Apr 2026 17:18:53 +0200 Subject: [PATCH 1/5] Add workspace dependency audit table Systematic audit of all 42 external dependencies across the five workspace Cargo.toml files, documenting why each is used, transitive dep counts, unique deps, enabled vs available features, and whether all enabled features are needed. Identifies several actionable savings (unused deps, unnecessary feature flags). Co-Authored-By: Claude Opus 4.6 --- audit.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 audit.md diff --git a/audit.md b/audit.md new file mode 100644 index 00000000..6c87a5e7 --- /dev/null +++ b/audit.md @@ -0,0 +1,50 @@ +## Dependency audit + +| Crate | Why we use it | Total transitive deps | Unique deps | Features enabled | Unused features | All enabled features needed? | +|---|---|---|---|---|---|---| +| `csscolorparser` 0.8.3 | Parses CSS color strings (named colors, hex, `rgb()`, `hsl()`, etc.) into normalized hex values. Used in `src/plot/scale/colour.rs` for `color_to_hex()` and `parse_to_srgb()`, called from the parser and color interpolation pipeline. | 16 (itself + 15) | 5: `phf` v0.13, `phf_generator`, `phf_macros`, `phf_shared`, `uncased`. Note: `palette` already pulls `phf` v0.11, so we carry two major versions. | `default` = `named-colors` + `std` | `cint`, `rust-rgb`, `serde` | Yes. `named-colors` is required because users write color names like `'red'` in queries. | +| `palette` 0.7.6 | Color space conversions. Used in `src/plot/scale/colour.rs` for `Srgb`, `LinSrgb`, `Oklab`, `Mix`, `FromColor`, `IntoColor` — converting between sRGB, linear RGB, and Oklab for perceptually uniform color interpolation. | 19 (itself + 18) | 8: `approx`, `by_address`, `fast-srgb8`, `palette_derive`, `phf` v0.11, `phf_generator` v0.11, `phf_macros` v0.11, `phf_shared` v0.11. | `default` = `named_from_str` + `std` + `approx` | `bytemuck`, `rand`/`random`, `serde`/`serializing`, `wide`, `libm`, `find-crate` | **No.** `named_from_str` (which enables `named` + `phf`) provides named color lookup from `palette`, but named colors are parsed by `csscolorparser` instead — no palette named-color API is used. Switching to `default-features = false, features = ["std", "approx"]` would drop the `phf` v0.11 family (4 crates). | +| `regex` 1.12.3 | Regular expressions. Used in `src/format.rs` for label formatting. | 5 (itself + 4) | 0. All deps (`aho-corasick`, `memchr`, `regex-automata`, `regex-syntax`) are shared with `tree-sitter`, `arrow-string`, etc. | `default` = `std` + `perf` + `unicode` | `logging`, `perf-dfa-full`, `pattern` | Yes. Standard defaults, already fully activated by other crates. | +| `chrono` 0.4.44 | Date/time types and arithmetic. Used pervasively: `NaiveDate`, `NaiveDateTime`, `NaiveTime`, `Datelike`, `Timelike` in formatting (`src/format.rs`), break computation (`scale/breaks.rs`), date/datetime transforms, type conversions, and the SQLite reader. | 5 (itself + 4) | 0. The unique entries (`iana-time-zone`, `windows-core`, etc.) are platform timezone crates intrinsic to `chrono` itself; already pulled in via `arrow-array`. | `default` = `clock` + `std` + `oldtime` + `wasmbind` | `arbitrary`, `serde`, `rkyv`, `unstable-locales`, `defmt` | Yes. Standard defaults, already fully activated by `arrow-array` and `rusqlite`. | +| `rand` 0.8.6 | Random number generation. Used in `src/plot/layer/position/jitter.rs` for `Rng` to add random jitter to point positions. | 34 (itself + 33) | 2: `rand_chacha`, `rand_core` v0.6. Note: `rand` v0.9 also exists in the tree via `proptest` (which is itself unused). | `default` = `std` + `std_rng` | — | Yes. Standard defaults for a single-callsite dep. | +| `const_format` 0.2.36 | Compile-time string concatenation. Used in `src/naming.rs` via `concatcp!` to build `const` prefix/suffix strings like `"__ggsql_const_"` from `GGSQL_PREFIX` + `"const_"`. | 8 (itself + 7) | 3: `const_format_proc_macros`, `konst`, `konst_macro_rules`. | `default` (empty) | `fmt`, `derive`, `assert`, `more_str_macros` | Yes, though the dep could be eliminated by inlining the ~10 string constants as literals (minor DRY tradeoff). | +| `uuid` 1.23.1 | UUID generation. Used in `src/naming.rs` for `Uuid::new_v4()` to generate a process-wide session ID, ensuring temp table names are unique across concurrent processes. | 3 (itself + 2) | 0. Its deps (`getrandom`, `cfg-if`) are shared. | `default` + `v4` | `v1`/`v3`/`v5`/`v6`/`v7`/`v8`, `serde`, `borsh`, `fast-rng`, `js` | Yes. `v4` is the only version needed. | +| `tree-sitter` 0.26.8 | Core parser for the ggsql language. Used in `src/parser/` to parse queries into a CST (via `tree-sitter-ggsql` grammar), and in `src/reader/data.rs` and `src/execute/cte.rs` for tree navigation. | 21 (itself + 20) | 2: `streaming-iterator`, `tree-sitter-language`. Everything else (`regex`, `cc`, `serde_json`, `memchr`, etc.) is already in the workspace tree. | `default` = `std` | `bindgen`, `wasm` (+ `wasmtime-c-api`) | Yes. `std` enables regex performance features and unicode support in `regex-syntax`, both needed for parsing. | +| `tokio` 1.52.1 | Async runtime. Used in `ggsql-jupyter` for `#[tokio::main]`, `tokio::select!`, and `tokio::signal::ctrl_c()`. Not a dep of the core `ggsql` crate. Workspace declares it with `default-features = false`; `full` is activated by `zeromq` (Jupyter's ZeroMQ transport) and `ggsql-wasm`. | 19 (itself + 18) | 1: `tokio-macros`. All other deps (`mio`, `parking_lot`, `socket2`, `signal-hook-registry`, etc.) are shared. | `full` (activated by transitive deps) | `io-uring`, `tracing`, `taskdump` | Yes. The Jupyter kernel needs `rt-multi-thread`, `macros`, `net`, `signal`, `sync` at minimum; `full` is pulled in by `zeromq` regardless. | +| `tracing` 0.1.44 | Structured logging. Used extensively in `ggsql-jupyter` (kernel lifecycle, message handling, execution, comms, errors). Not a dep of the core `ggsql` crate. | 10 (itself + 9) | 1: `tracing-attributes` (proc-macro for `#[instrument]`). | `default` = `std` + `attributes` | `log`, `async-await`, `valuable`, `max_level_*`, `release_max_level_*` | Yes. Standard defaults. | +| `tracing-subscriber` 0.3.23 | Tracing output configuration. Used in `ggsql-jupyter/src/main.rs` for `tracing_subscriber::fmt()` and `EnvFilter`. Not a dep of the core `ggsql` crate. | 25 (itself + 24) | 5: `matchers`, `nu-ansi-term`, `sharded-slab`, `thread_local`, `tracing-log`. | `default` + `env-filter` + `registry` | `json`, `chrono`, `time`, `parking_lot`, `serde`, `valuable` | Yes. `fmt` and `env-filter` are both used directly. `ansi` provides colored log output. | +| `arrow` 56.2.0 | Arrow columnar format — the in-memory data representation. Used pervasively across the crate: `DataType` for schema/type logic, `Array`/`ArrayRef`/`RecordBatch` for data, and `arrow::compute` for sorting/casting. | 67 (itself + 66) | 4: `arrow-arith`, `arrow-ord`, `arrow-row`, `arrow-string` (arrow sub-crates not used by other workspace members). All third-party deps are shared. | `ipc` (explicit), plus `ffi` and `prettyprint` (activated by `duckdb`, not by us) | `csv`, `json`, `ipc_compression`, `chrono-tz`, `force_validate`, `pyarrow`, `test_utils` | No. The `ipc` feature (which pulls in `flatbuffers`) is declared but no code uses Arrow IPC — no `arrow::ipc` imports exist anywhere in the workspace. The ggsql `ipc` feature flag is empty (`ipc = []`). Removing it would drop `flatbuffers` as a direct dep (though `duckdb` also pulls it in). | +| `parquet` 56.2.0 | Parquet file reader. Used in `src/reader/data.rs` via `ParquetRecordBatchReaderBuilder` to read `.parquet` files into Arrow record batches. | 66 (itself + 65) | 8: `byteorder`, `integer-encoding`, `ordered-float`, `paste`, `seq-macro`, `snap`, `thrift`, `twox-hash`. | `arrow` + `snap` (with `default-features = false`) | `brotli`, `flate2`/`lz4`/`zstd` (other compression codecs), `async`/`tokio`, `json`, `serde`, `cli`, `object_store`, `encryption`, `crc`, `simdutf8` | Yes. `arrow` is essential (parquet → Arrow conversion). `snap` enables Snappy decompression, a common parquet codec needed to read user files. Defaults are disabled, avoiding unnecessary compression libs. | +| `bytes` 1.11.1 | Zero-copy byte buffer. Used in `src/reader/data.rs` to wrap embedded parquet bytes via `Bytes::from_static()` for the parquet reader. Also used in `ggsql-jupyter`. | 1 (itself only) | 0. Already in the workspace tree via `arrow-buffer`. | `default` = `std` | `serde` | Yes. Only `std` is enabled, which is the minimum. | +| `rusqlite` 0.38.0 | SQLite database driver. Used in `src/reader/sqlite.rs` for executing SQL queries via `Connection` and converting SQLite values to Arrow arrays. | 24 (itself + 23) | 2: `hashlink`, `libsqlite3-sys`. | `bundled`, `chrono`, `functions`, `window` (plus `default` = `cache`) | `blob`, `backup`, `load_extension`, `serde_json`, `url`, `uuid`, `vtab`, `trace`, `hooks`, `serialize`, `jiff`, `time`, `buildtime_bindgen` | No. `bundled` and `chrono` are needed (bundled SQLite, date type conversions). `functions` and `window` are **not used** — no `create_scalar_function` or `create_window_function` calls exist. They could be removed. | +| `odbc-api` 13.1.0 | ODBC database driver. Used in `src/reader/odbc.rs` for executing SQL queries over ODBC connections, converting ODBC types (dates, timestamps, etc.) to Arrow arrays. | 30 (itself + 29) | 57: `winit` (full windowing library) plus all its platform deps (`objc2-*`, `ndk`, `jni`, `xkbcommon-dl`, etc.), `odbc-sys`, `widestring`, and others. | `default` = `odbc_version_3_80` + `prompt` | `derive`, `iodbc`, `narrow`, `wide` | **No.** The `prompt` feature enables ODBC driver connection prompts via a native window (`winit`) but is **never used** — no prompt/driver-connect calls exist. Disabling it (via `default-features = false, features = ["odbc_version_3_80"]`) would drop ~55 unique deps including the entire `winit` tree. | +| `toml_edit` 0.22.27 | Parses Snowflake `connections.toml` config files. Used in `src/reader/odbc.rs` (behind the `odbc` feature flag) to resolve Snowflake connection names and detect Posit Workbench OAuth tokens. | 15 (itself + 14) | 3: `toml_datetime`, `toml_write`, `winnow`. | `default` = `parse` + `display` | `perf`, `serde`, `unbounded` | Yes. Both `parse` (reading TOML) and `display` (not strictly needed but harmless — 1 small crate) are enabled. | +| `serde` 1.0.228 | Serialization framework. `Derive(Serialize, Deserialize)` is used on all AST types in `src/plot/` — `Plot`, `Layer`, `Scale`, `Facet`, `Projection`, `Mappings`, etc. | 8 (itself + 7) | 0. All deps (`serde_core`, `serde_derive`, `proc-macro2`, `quote`, `syn`, `unicode-ident`) are shared. | `default` + `derive` | `rc`, `unstable` | Yes. `derive` is essential (proc-macro for `#[derive(Serialize, Deserialize)]`). `std` is baseline. | +| `serde_json` 1.0.149 | JSON serialization. Used throughout `src/writer/vegalite/` to build the Vega-Lite JSON output (`json!`, `Map`, `Value`). | 9 (itself + 8) | 1: `zmij`. | `default` + `preserve_order` (which enables `indexmap`) | `arbitrary_precision`, `float_roundtrip`, `raw_value`, `unbounded_depth` | Yes. `preserve_order` ensures JSON key order is stable, which matters for deterministic Vega-Lite output. | +| `plotters` 0.3 | Reserved for a future native rendering writer. Declared as an optional dep behind the `plotters` feature flag, which is **not** in default features. No writer implementation exists — only a `cfg` gate in `src/lib.rs`. | N/A (never compiled) | N/A | N/A (optional, never enabled) | All | No. Same as `postgres` — could be removed until implemented. | +| `postgres` 0.19 | Reserved for a future PostgreSQL reader. Declared as an optional dep behind the `postgres` feature flag, which is **not** in default features. No driver implementation exists yet — only connection string parsing in `src/reader/connection.rs`. | N/A (never compiled) | N/A | N/A (optional, never enabled) | All | No. The crate is never compiled or used. It could be removed from `Cargo.toml` until a driver is actually implemented. | +| `proptest` 1.11.0 | Property-based testing framework. Declared as a dev-dependency of the core crate but **never used** — no `proptest!` macros or imports exist anywhere in the codebase. | 31 (itself + 30) | 5: `quick-error`, `rand_xorshift`, `rusty-fork`, `unarray`, `wait-timeout`. | `default` = `std`, `fork`, `timeout`, `bit-set` | `attr-macro`, `handle-panics`, `hardware-rng`, `no_std` | No. Unused — could be removed entirely. | +| `thiserror` 1.0.69 | Error derive macro. Used in `src/lib.rs` for `#[derive(thiserror::Error)]` on `GgsqlError`. | 7 (itself + 6) | 1: `thiserror-impl` (its own proc-macro). All other deps (`proc-macro2`, `quote`, `syn`) are shared. | (none — no feature flags) | — | Yes. Note: v2 also exists in the tree from a transitive dep, so we carry two major versions. | +| `anyhow` 1.0.102 | Ergonomic error handling. Used in `ggsql-cli` (main return type) and `ggsql-jupyter` (kernel, executor, message handling). Not a dep of the core `ggsql` crate. | 1 (itself only) | 0. | `default` = `std` | `backtrace` | Yes. Only `std` is enabled. | +| `clap` 4.6.1 | CLI argument parser. Used in `ggsql-cli/src/main.rs` for `Parser`, `Subcommand`, and `ValueEnum` derives. Not a dep of the core `ggsql` crate. | 21 (itself + 20) | 13: `anstream`, `anstyle`, `anstyle-parse`, `anstyle-query`, `anstyle-wincon`, `clap_builder`, `clap_derive`, `clap_lex`, `colorchoice`, `is_terminal_polyfill`, `once_cell_polyfill`, `strsim`, `utf8parse`. | `default` + `derive` | `cargo`, `env`, `unicode`, `wrap_help`, `string` | Yes. `derive` is needed for the proc-macro. Default features (`color`, `help`, `usage`, `error-context`, `suggestions`) are all standard CLI niceties. | +| `termimad` 0.31.3 | Terminal markdown rendering. Used in `ggsql-cli/src/main.rs` for the `ggsql docs` subcommand to render embedded syntax docs with ANSI formatting. Not a dep of the core `ggsql` crate. | 49 (itself + 48) | 24: `crossterm`, `crossbeam` family, `lazy-regex`, `minimad`, `crokey`, `signal-hook`, `derive_more`, `coolor`, `winapi`, etc. | `default` = `special-renders` | — | Yes. The `special-renders` feature is the only optional one and is harmless (no extra deps). The dep cost is inherent to terminal rendering. | +| `sprintf` 0.4.3 | C-style printf formatting. Used in `src/format.rs` for `sprintf!` to support user-specified format strings (e.g., `%.2f`). | 7 (itself + 6) | 0. All deps are shared. | (none — no feature flags) | — | Yes. | +| `jsonschema` 0.44.1 | JSON Schema validation (dev-dependency). Used in `src/writer/vegalite/mod.rs` to validate generated Vega-Lite specs against a vendored schema in tests. | 149 (itself + 148) | 36: `reqwest` v0.13, `rustls`, TLS crates, `fancy-regex`, `fraction`, `referencing`, platform cert crates, etc. | `default` = `resolve-http` + `resolve-file` + `tls-aws-lc-rs` | `arbitrary-precision`, `resolve-async` | **No.** `resolve-http` pulls in `reqwest` + `rustls` + TLS platform crates for HTTP-based schema resolution, but the schema is vendored via `include_str!`. Using `default-features = false, features = ["resolve-file"]` would drop ~30 unique deps. | +| `tempfile` 3.27.0 | Temporary file/directory creation (dev-dependency). Used in `src/reader/odbc.rs` tests for `tempdir()`. | 7 (itself + 6) | 0. All deps are shared. | `default` = `getrandom` | `nightly` | Yes. | +| `ureq` 3.3.0 | HTTP client (dev-dependency). Used in a single test (`test_vendored_schema_matches_upstream`) to check that the vendored Vega-Lite schema matches upstream. | 35 (itself + 34) | 2: `ureq-proto`, `utf8-zero`. | `default` = `rustls` + `gzip` | `brotli`, `charset`, `cookies`, `json`, `native-tls`, `socks-proxy` | Yes. Minimal use but appropriate for a dev-dep that makes a single HTTP request. | +| `duckdb` 1.4.4 | DuckDB database driver — the default SQL backend. Used in `src/reader/duckdb.rs` for executing SQL queries via `Connection`, and for Arrow-based virtual table access via `ArrowVTab`. | 168 (itself + 167) | 50: mostly `libduckdb-sys`, networking (`quinn`, `reqwest`), serialization (`rkyv`, `borsh`), archive (`tar`, `zip`, `zopfli`), and Windows platform crates. | `bundled`, `vtab-arrow` (which activates `vtab` + `num`) | `chrono`, `serde_json`, `url`, `r2d2`, `uuid`, `polars`, `json`, `parquet`, `calamine`, `loadable-extension`, `buildtime_bindgen` | Yes. `bundled` compiles DuckDB from source (required for distribution). `vtab-arrow` is needed for `ArrowVTab` used in `reader/duckdb.rs` to pass Arrow record batches to DuckDB. | +| `zeromq` 0.4.1 | ZeroMQ messaging library for the Jupyter kernel. Used in `ggsql-jupyter/src/kernel.rs` for `RouterSocket`, `PubSocket`, `RepSocket`, `Socket`, `SocketRecv`, `SocketSend` — the five ZMQ sockets required by the Jupyter messaging protocol. | 54 (itself + 53) | 4: `async-trait`, `asynchronous-codec`, `dashmap` v5, `hashbrown` v0.14. | `default` = `tokio-runtime` + `all-transport` (which enables `tcp-transport` + `ipc-transport`) | `async-dispatcher`, `async-dispatcher-macros`, `async-dispatcher-runtime`, `async-std`, `async-std-runtime` | Yes. `tokio-runtime` is needed (the kernel uses tokio). `all-transport` enables both TCP and IPC, which are both valid Jupyter transport types (determined by the connection file). | +| `hmac` 0.12.1 | HMAC message authentication. Used in `ggsql-jupyter/src/kernel.rs` for `Hmac` and `Mac` to sign Jupyter protocol messages with the session key from the connection file. | 8 (itself + 7) | 0. All deps (`crypto-common`, `digest`, `block-buffer`, etc.) are shared. | `default` (empty — no features enabled) | `reset`, `std` | Yes. Minimal configuration, only core HMAC functionality needed. | +| `sha2` 0.10.9 | SHA-256 hashing. Used in `ggsql-jupyter/src/kernel.rs` as `Sha256` — the hash algorithm for Jupyter HMAC message signing (`Hmac`). | 10 (itself + 9) | 1: `cpufeatures`. | `default` = `std` | `asm`, `asm-aarch64`, `compress`, `force-soft`, `force-soft-compact`, `loongarch64_asm`, `oid` | Yes. Standard defaults. | +| `hex` 0.4.3 | Hex encoding. Used in `ggsql-jupyter/src/kernel.rs` for `hex::encode()` to convert HMAC signatures to hex strings for Jupyter message frames. | 1 (itself only) | 0. | `default` = `std` (which enables `alloc`) | `serde` | Yes. Minimal dep with no transitive cost. | +| `tokio-test` 0.4.5 | Async test utilities (dev-dependency). Declared but **never used** — no `tokio_test` imports exist anywhere in the crate (the Jupyter kernel's tests are Python-based, not Rust). | 21 (itself + 20) | 1: `tokio-stream`. | `default` (no features) | — | **No.** Unused — could be removed entirely. | +| `zeromq` 0.4.1 | ZeroMQ messaging library for the Jupyter kernel. Used in `ggsql-jupyter/src/kernel.rs` for `RouterSocket`, `PubSocket`, `RepSocket`, `Socket`, `SocketRecv`, `SocketSend` — the five ZMQ sockets required by the Jupyter messaging protocol. | 54 (itself + 53) | 4: `async-trait`, `asynchronous-codec`, `dashmap` v5, `hashbrown` v0.14. | `default` = `tokio-runtime` + `all-transport` (`tcp-transport` + `ipc-transport`) | `async-dispatcher`, `async-dispatcher-macros`, `async-dispatcher-runtime`, `async-std`, `async-std-runtime` | Yes. `tokio-runtime` is needed (the kernel uses tokio). `all-transport` enables both TCP and IPC, both valid Jupyter transports (determined by the connection file). | +| `hmac` 0.12.1 | HMAC message authentication. Used in `ggsql-jupyter/src/kernel.rs` for `Hmac` and `Mac` to sign Jupyter protocol messages with the session key from the connection file. | 8 (itself + 7) | 0. All deps (`crypto-common`, `digest`, `block-buffer`, etc.) are shared. | `default` (empty — no features enabled) | `reset`, `std` | Yes. Minimal configuration, only core HMAC functionality needed. | +| `sha2` 0.10.9 | SHA-256 hashing. Used in `ggsql-jupyter/src/kernel.rs` as `Sha256` — the hash algorithm for Jupyter HMAC message signing (`Hmac`). | 10 (itself + 9) | 1: `cpufeatures`. | `default` = `std` | `asm`, `asm-aarch64`, `compress`, `force-soft`, `force-soft-compact`, `loongarch64_asm`, `oid` | Yes. Standard defaults. | +| `hex` 0.4.3 | Hex encoding. Used in `ggsql-jupyter/src/kernel.rs` for `hex::encode()` to convert HMAC signatures to hex strings for Jupyter message frames. | 1 (itself only) | 0. | `default` = `std` (which enables `alloc`) | `serde` | Yes. Minimal dep with no transitive cost. | +| `wasm-bindgen` 0.2.118 | WebAssembly/JS interop. Used in `ggsql-wasm/src/lib.rs` for `#[wasm_bindgen]` attribute macros, `JsValue`, and `prelude::*` — the core binding layer for exposing Rust functions to JavaScript. | 12 (itself + 11) | 3: `wasm-bindgen-macro`, `wasm-bindgen-macro-support`, `wasm-bindgen-shared`. | `default` = `std` | `enable-interning`, `serde`, `serde-serialize`, `spans`, `strict-macro` | Yes. Only `std` is needed. | +| `wasm-bindgen-futures` 0.4.68 | Bridges Rust futures to JS Promises. Used in `ggsql-wasm/src/lib.rs` implicitly — async `#[wasm_bindgen]` methods (`register_parquet`, `register_builtin_datasets`) need this to convert Rust futures to JS Promises. | 23 (itself + 22) | 0. All deps shared with `wasm-bindgen` and `js-sys`. | `default` = `std` | `futures-core-03-stream` | Yes. Required for any async wasm-bindgen function. | +| `js-sys` 0.3.95 | JavaScript standard library bindings. Used in `ggsql-wasm/src/lib.rs` for `js_sys::Array`, `js_sys::Reflect`, `js_sys::Float64Array`, `js_sys::Uint8Array` — type-safe access to JS objects for column data conversion. | 22 (itself + 21) | 0. All deps shared with `wasm-bindgen`. | `default` = `std` + `unsafe-eval`; `futures` activated by `wasm-bindgen-futures` | — | Yes. Standard defaults for wasm interop. | +| `csv` 1.4.0 | CSV parsing library. Declared as a dependency but **never used** — no `csv` imports exist in the crate. CSV parsing is handled on the JS side via `convert_csv()` bridge function. | 6 (itself + 5) | 1: `csv-core`. | `default` (no features) | — | **No.** Unused — could be removed entirely. | +| `sqlite-wasm-rs` 0.5.2 | SQLite VFS for WebAssembly (wasm32-only). Used in `ggsql-wasm/src/lib.rs` for `sqlite_wasm_rs::MemVfsUtil` and `WasmOsCallback` to initialize an in-memory VFS so `rusqlite` works in the browser. | ~1 (itself + `rsqlite-vfs`) | 1: `rsqlite-vfs`. | `default` (no features) | `bindgen`, `sqlite3mc` | Yes. Minimal — just the core VFS shim needed for browser SQLite. | +| `cc` 1.2.60 | C compiler driver (build-dependency). Used in `tree-sitter-ggsql/bindings/rust/build.rs` via `cc::Build` to compile the generated `parser.c` into a static library linked into the Rust crate. Also pulled in transitively by `ring` (via `rustls`/`reqwest`/`jsonschema`). | 6 (itself + 5) | 3: `find-msvc-tools`, `jobserver`, `shlex`. | `parallel` (activated by `ring`, not by tree-sitter-ggsql directly) | — | Yes. `parallel` is harmless — enables parallel compilation of C files via jobserver. The 3 unique deps (`jobserver`, `shlex`, `find-msvc-tools`) are all build-time only. | From 95283ddf188ee29308983977a1fbeebec259a626 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Thu, 30 Apr 2026 17:21:37 +0200 Subject: [PATCH 2/5] Add dependency audit recommendations Prioritised list of actionable findings from the workspace dependency audit, ordered by effort-to-impact ratio. Co-Authored-By: Claude Opus 4.6 --- audit-recommendations.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 audit-recommendations.md diff --git a/audit-recommendations.md b/audit-recommendations.md new file mode 100644 index 00000000..61851145 --- /dev/null +++ b/audit-recommendations.md @@ -0,0 +1,21 @@ +## Dependency audit recommendations + +Ordered by effort-to-impact ratio (easiest wins first). + +- **Remove `proptest`** (dev-dep in `src/Cargo.toml`). Never imported anywhere — no `proptest!` macros or imports exist. Drops 31 transitive deps (5 unique). One-line removal. + +- **Remove `csv`** (dep in `ggsql-wasm/Cargo.toml`). Never imported — CSV parsing is handled on the JS side via the `convert_csv()` bridge. Drops 6 transitive deps (1 unique). One-line removal. + +- **Remove `tokio-test`** (dev-dep in `ggsql-jupyter/Cargo.toml`). Never imported — the Jupyter kernel's tests are Python-based. Drops 21 transitive deps (1 unique). One-line removal. + +- **Disable `prompt` feature on `odbc-api`**. Change to `default-features = false, features = ["odbc_version_3_80"]`. No prompt/driver-connect calls exist anywhere. Drops ~55 unique deps including the entire `winit` windowing library and its platform backends (`objc2-*`, `ndk`, `jni`, `xkbcommon-dl`, etc.). + +- **Disable `resolve-http` on `jsonschema`** (dev-dep in `src/Cargo.toml`). Change to `default-features = false, features = ["resolve-file"]`. The Vega-Lite schema is vendored via `include_str!`, so HTTP resolution is never used. Drops ~30 unique deps (`reqwest`, `rustls`, TLS platform crates). + +- **Disable `named_from_str` on `palette`**. Change to `default-features = false, features = ["std", "approx"]`. Named color lookup is done by `csscolorparser`, not `palette` — only color space math (`Srgb`, `LinSrgb`, `Oklab`, `Mix`) is used. Drops 4 unique deps (the `phf` v0.11 family). + +- **Remove `functions` and `window` features from `rusqlite`**. No `create_scalar_function` or `create_window_function` calls exist. Zero dep savings but a cleaner feature surface. + +- **Remove `ipc` feature from `arrow`** (and the empty `ipc = []` feature flag in `src/Cargo.toml`). No `arrow::ipc` imports exist anywhere. Marginal savings — `flatbuffers` is still pulled in by `duckdb`. + +- **Remove `postgres` and `plotters`** placeholder deps. Both are optional deps behind feature flags with no implementation. No compiled impact today, but removing them avoids confusion and keeps the manifest honest until drivers are actually written. From cfdd38da026187098ee3c0b51ea0e71bd2dbc1d3 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Thu, 30 Apr 2026 17:30:55 +0200 Subject: [PATCH 3/5] Trim unused dependencies and unnecessary feature flags - Remove `proptest` (unused dev-dep), `tokio-test` (unused dev-dep), `csv` (unused dep in ggsql-wasm) - Remove placeholder deps with no implementation: `postgres`, `plotters`, `ggplot2` feature flags - Disable `prompt` on `odbc-api` (drops ~55 winit deps) - Disable `resolve-http` on `jsonschema` (drops ~30 reqwest/rustls deps) - Disable `named_from_str` on `palette` (drops phf v0.11 family) - Remove unused `functions`/`window` features from `rusqlite` - Remove unused `ipc` feature from `arrow` and empty `ipc` feature flag Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 1878 ++------------------------------------ Cargo.toml | 15 +- ggsql-cli/Cargo.toml | 8 +- ggsql-jupyter/Cargo.toml | 2 - ggsql-wasm/Cargo.toml | 1 - src/Cargo.toml | 15 +- src/lib.rs | 2 +- 7 files changed, 108 insertions(+), 1813 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d97a8601..0ba61d9d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,31 +49,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-activity" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" -dependencies = [ - "android-properties", - "bitflags 2.11.1", - "cc", - "jni 0.22.4", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "num_enum", - "thiserror 2.0.18", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -174,7 +149,6 @@ dependencies = [ "arrow-buffer", "arrow-cast", "arrow-data", - "arrow-ipc", "arrow-ord", "arrow-row", "arrow-schema", @@ -302,7 +276,7 @@ version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3aa9e59c611ebc291c28582077ef25c97f1975383f1479b12f3b9ffee2ffabe" dependencies = [ - "bitflags 2.11.1", + "bitflags", ] [[package]] @@ -381,28 +355,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "aws-lc-rs" -version = "1.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" -dependencies = [ - "cc", - "cmake", - "dunce", - "fs_extra", -] - [[package]] name = "base64" version = "0.22.1" @@ -424,12 +376,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.11.1" @@ -457,24 +403,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-buffer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" -dependencies = [ - "hybrid-array", -] - -[[package]] -name = "block2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" -dependencies = [ - "objc2", -] - [[package]] name = "borrow-or-share" version = "0.2.4" @@ -545,12 +473,6 @@ version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - [[package]] name = "byteorder" version = "1.5.0" @@ -563,20 +485,6 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -[[package]] -name = "calloop" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" -dependencies = [ - "bitflags 2.11.1", - "log", - "polling", - "rustix 0.38.44", - "slab", - "thiserror 1.0.69", -] - [[package]] name = "cast" version = "0.3.0" @@ -595,12 +503,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfg-if" version = "1.0.4" @@ -613,17 +515,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "chacha20" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "rand_core 0.10.1", -] - [[package]] name = "chrono" version = "0.4.44" @@ -677,43 +568,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" -[[package]] -name = "cmake" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" -dependencies = [ - "cc", -] - -[[package]] -name = "cmov" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - [[package]] name = "comfy-table" version = "7.1.2" @@ -725,21 +585,6 @@ dependencies = [ "unicode-width 0.2.2", ] -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "const-oid" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" - [[package]] name = "const-random" version = "0.1.18" @@ -799,68 +644,12 @@ dependencies = [ "crossterm", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", -] - -[[package]] -name = "core-text" -version = "20.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" -dependencies = [ - "core-foundation 0.9.4", - "core-graphics", - "foreign-types", - "libc", -] - [[package]] name = "cpufeatures" version = "0.2.17" @@ -870,15 +659,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - [[package]] name = "crc32fast" version = "1.5.0" @@ -976,13 +756,13 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.11.1", + "bitflags", "crossterm_winapi", "derive_more", "document-features", "mio", "parking_lot", - "rustix 1.1.4", + "rustix", "signal-hook", "signal-hook-mio", "winapi", @@ -1013,15 +793,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-common" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" -dependencies = [ - "hybrid-array", -] - [[package]] name = "csscolorparser" version = "0.8.3" @@ -1029,47 +800,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "199f851bd3cb5004c09474252c7f74e7c047441ed0979bf3688a7106a13da952" dependencies = [ "num-traits", - "phf 0.13.1", + "phf", "serde", "uncased", ] -[[package]] -name = "csv" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde_core", -] - -[[package]] -name = "csv-core" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" -dependencies = [ - "memchr", -] - -[[package]] -name = "ctutils" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" -dependencies = [ - "cmov", -] - -[[package]] -name = "cursor-icon" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" - [[package]] name = "dashmap" version = "5.5.3" @@ -1128,50 +863,11 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", - "crypto-common 0.1.7", + "block-buffer", + "crypto-common", "subtle", ] -[[package]] -name = "digest" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" -dependencies = [ - "block-buffer 0.12.0", - "const-oid", - "crypto-common 0.2.1", - "ctutils", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - [[package]] name = "displaydoc" version = "0.2.5" @@ -1183,15 +879,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "dlib" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" -dependencies = [ - "libloading", -] - [[package]] name = "document-features" version = "0.2.12" @@ -1201,12 +888,6 @@ dependencies = [ "litrs", ] -[[package]] -name = "dpi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" - [[package]] name = "duckdb" version = "1.4.4" @@ -1215,7 +896,7 @@ checksum = "8685352ce688883098b61a361e86e87df66fc8c444f4a2411e884c16d5243a65" dependencies = [ "arrow", "cast", - "fallible-iterator 0.3.0", + "fallible-iterator", "fallible-streaming-iterator", "hashlink 0.10.0", "libduckdb-sys", @@ -1225,24 +906,6 @@ dependencies = [ "strum 0.27.2", ] -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[package]] -name = "dwrote" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" -dependencies = [ - "lazy_static", - "libc", - "winapi", - "wio", -] - [[package]] name = "email_address" version = "0.2.9" @@ -1268,12 +931,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - [[package]] name = "fallible-iterator" version = "0.3.0" @@ -1309,15 +966,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" -[[package]] -name = "fdeflate" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" -dependencies = [ - "simd-adler32", -] - [[package]] name = "filetime" version = "0.2.27" @@ -1341,7 +989,7 @@ version = "25.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" dependencies = [ - "bitflags 2.11.1", + "bitflags", "rustc_version", ] @@ -1356,12 +1004,6 @@ dependencies = [ "zlib-rs", ] -[[package]] -name = "float-ord" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" - [[package]] name = "fluent-uri" version = "0.4.1" @@ -1373,12 +1015,6 @@ dependencies = [ "serde", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "foldhash" version = "0.1.5" @@ -1392,98 +1028,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] -name = "font-kit" -version = "0.14.3" +name = "form_urlencoded" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ - "bitflags 2.11.1", - "byteorder", - "core-foundation 0.9.4", - "core-graphics", - "core-text", - "dirs", - "dwrote", - "float-ord", - "freetype-sys", - "lazy_static", - "libc", - "log", - "pathfinder_geometry", - "pathfinder_simd", - "walkdir", - "winapi", - "yeslogic-fontconfig-sys", + "percent-encoding", ] [[package]] -name = "foreign-types" -version = "0.5.0" +name = "fraction" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872" dependencies = [ - "foreign-types-macros", - "foreign-types-shared", + "lazy_static", + "num", ] [[package]] -name = "foreign-types-macros" -version = "0.2.3" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fraction" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872" -dependencies = [ - "lazy_static", - "num", -] - -[[package]] -name = "freetype-sys" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7edc5b9669349acfda99533e9e0bcf26a51862ab43b08ee7745c55d28eb134" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures-channel" @@ -1565,7 +1132,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -1592,7 +1159,6 @@ dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "rand_core 0.10.1", "wasip2", "wasip3", ] @@ -1611,9 +1177,6 @@ dependencies = [ "odbc-api", "palette", "parquet", - "plotters", - "postgres", - "proptest", "rand 0.8.6", "regex", "rusqlite", @@ -1653,14 +1216,13 @@ dependencies = [ "clap", "ggsql", "hex", - "hmac 0.12.1", + "hmac", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "tempfile", "thiserror 1.0.69", "tokio", - "tokio-test", "tracing", "tracing-subscriber", "uuid", @@ -1672,7 +1234,6 @@ name = "ggsql-wasm" version = "0.3.0" dependencies = [ "arrow", - "csv", "getrandom 0.2.17", "ggsql", "js-sys", @@ -1684,35 +1245,6 @@ dependencies = [ "wasm-bindgen-futures", ] -[[package]] -name = "gif" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "h2" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "half" version = "2.7.1" @@ -1790,12 +1322,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - [[package]] name = "hex" version = "0.4.3" @@ -1808,16 +1334,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "hmac" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" -dependencies = [ - "digest 0.11.2", + "digest", ] [[package]] @@ -1859,15 +1376,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" -[[package]] -name = "hybrid-array" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" -dependencies = [ - "typenum", -] - [[package]] name = "hyper" version = "1.9.0" @@ -1878,7 +1386,6 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", "http", "http-body", "httparse", @@ -2061,20 +1568,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "jpeg-decoder", - "num-traits", - "png", -] - [[package]] name = "indexmap" version = "2.14.0" @@ -2121,80 +1614,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys 0.3.1", - "log", - "thiserror 1.0.69", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.18", - "walkdir", - "windows-link", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.117", -] - -[[package]] -name = "jni-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" -dependencies = [ - "jni-sys 0.4.1", -] - -[[package]] -name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote", - "syn 2.0.117", -] - [[package]] name = "jobserver" version = "0.1.34" @@ -2205,12 +1624,6 @@ dependencies = [ "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" version = "0.3.95" @@ -2244,8 +1657,6 @@ dependencies = [ "referencing", "regex", "regex-syntax", - "reqwest 0.13.2", - "rustls", "serde", "serde_json", "unicode-general-category", @@ -2374,7 +1785,7 @@ dependencies = [ "cc", "flate2", "pkg-config", - "reqwest 0.12.28", + "reqwest", "serde", "serde_json", "tar", @@ -2382,16 +1793,6 @@ dependencies = [ "zip", ] -[[package]] -name = "libloading" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" -dependencies = [ - "cfg-if", - "windows-link", -] - [[package]] name = "libm" version = "0.2.16" @@ -2404,7 +1805,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.1", + "bitflags", "libc", "plain", "redox_syscall 0.7.4", @@ -2421,12 +1822,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -2475,16 +1870,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "md-5" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" -dependencies = [ - "cfg-if", - "digest 0.11.2", -] - [[package]] name = "memchr" version = "2.8.0" @@ -2518,40 +1903,10 @@ checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] -[[package]] -name = "ndk" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" -dependencies = [ - "bitflags 2.11.1", - "jni-sys 0.3.1", - "log", - "ndk-sys", - "num_enum", - "raw-window-handle", - "thiserror 1.0.69", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.6.0+11769913" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" -dependencies = [ - "jni-sys 0.3.1", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -2642,369 +1997,102 @@ dependencies = [ ] [[package]] -name = "num_enum" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.6" +name = "odbc-api" +version = "13.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +checksum = "44e14665455e2817ac5b0dd9f65a3dc97e76e8f85eeac6e4301b7cf9da451884" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.117", + "atoi", + "log", + "odbc-sys", + "thiserror 2.0.18", + "widestring", ] [[package]] -name = "objc-sys" -version = "0.3.5" +name = "odbc-sys" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" +checksum = "4ecdb20f7c165083ad1bc9f55122f677725e257716a5bc83e5413d5654b7d6f1" [[package]] -name = "objc2" -version = "0.5.2" +name = "once_cell" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" -dependencies = [ - "objc-sys", - "objc2-encode", -] +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] -name = "objc2-app-kit" -version = "0.2.2" +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.11.1", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", -] +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] -name = "objc2-cloud-kit" -version = "0.2.2" +name = "ordered-float" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" dependencies = [ - "bitflags 2.11.1", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", + "num-traits", ] [[package]] -name = "objc2-contacts" -version = "0.2.2" +name = "outref" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] -name = "objc2-core-data" -version = "0.2.2" +name = "palette" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" dependencies = [ - "bitflags 2.11.1", - "block2", - "objc2", - "objc2-foundation", + "approx", + "fast-srgb8", + "palette_derive", ] [[package]] -name = "objc2-core-foundation" -version = "0.3.2" +name = "palette_derive" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" dependencies = [ - "bitflags 2.11.1", + "by_address", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "objc2-core-image" -version = "0.2.2" +name = "parking_lot" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "lock_api", + "parking_lot_core", ] [[package]] -name = "objc2-core-location" -version = "0.2.2" +name = "parking_lot_core" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ - "block2", - "objc2", - "objc2-contacts", - "objc2-foundation", + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", ] [[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.2.2" +name = "parquet" +version = "56.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" -dependencies = [ - "bitflags 2.11.1", - "block2", - "dispatch", - "libc", - "objc2", -] - -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", -] - -[[package]] -name = "objc2-metal" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" -dependencies = [ - "bitflags 2.11.1", - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.11.1", - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", -] - -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-system-configuration" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" -dependencies = [ - "objc2-core-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" -dependencies = [ - "bitflags 2.11.1", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.11.1", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", -] - -[[package]] -name = "odbc-api" -version = "13.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44e14665455e2817ac5b0dd9f65a3dc97e76e8f85eeac6e4301b7cf9da451884" -dependencies = [ - "atoi", - "log", - "odbc-sys", - "thiserror 2.0.18", - "widestring", - "winit", -] - -[[package]] -name = "odbc-sys" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ecdb20f7c165083ad1bc9f55122f677725e257716a5bc83e5413d5654b7d6f1" - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "openssl-probe" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "orbclient" -version = "0.3.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c6933ddbbd16539a7672e697bb8d41ac3a4e99ac43eeb40c07236bd7fcb2dd" -dependencies = [ - "libc", - "libredox", -] - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "outref" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" - -[[package]] -name = "palette" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" -dependencies = [ - "approx", - "fast-srgb8", - "palette_derive", - "phf 0.11.3", -] - -[[package]] -name = "palette_derive" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" -dependencies = [ - "by_address", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.18", - "smallvec", - "windows-link", -] - -[[package]] -name = "parquet" -version = "56.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dbd48ad52d7dccf8ea1b90a3ddbfaea4f69878dd7683e51c507d4bc52b5b27" +checksum = "f0dbd48ad52d7dccf8ea1b90a3ddbfaea4f69878dd7683e51c507d4bc52b5b27" dependencies = [ "ahash 0.8.12", "arrow-array", @@ -3034,62 +2122,23 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pathfinder_geometry" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" -dependencies = [ - "log", - "pathfinder_simd", -] - -[[package]] -name = "pathfinder_simd" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4500030c302e4af1d423f36f3b958d1aecb6c04184356ed5a833bf6b60435777" -dependencies = [ - "rustc_version", -] - [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", -] - [[package]] name = "phf" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", + "phf_macros", + "phf_shared", "serde", ] -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.6", -] - [[package]] name = "phf_generator" version = "0.13.1" @@ -3097,20 +2146,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ "fastrand", - "phf_shared 0.13.1", -] - -[[package]] -name = "phf_macros" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" -dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.117", + "phf_shared", ] [[package]] @@ -3119,23 +2155,14 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn 2.0.117", "uncased", ] -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "phf_shared" version = "0.13.1" @@ -3146,26 +2173,6 @@ dependencies = [ "uncased", ] -[[package]] -name = "pin-project" -version = "1.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "pin-project-lite" version = "0.2.17" @@ -3184,122 +2191,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" -[[package]] -name = "plotters" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" -dependencies = [ - "chrono", - "font-kit", - "image", - "lazy_static", - "num-traits", - "pathfinder_geometry", - "plotters-backend", - "plotters-bitmap", - "plotters-svg", - "ttf-parser", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" - -[[package]] -name = "plotters-bitmap" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ce181e3f6bf82d6c1dc569103ca7b1bd964c60ba03d7e6cdfbb3e3eb7f7405" -dependencies = [ - "gif", - "image", - "plotters-backend", -] - -[[package]] -name = "plotters-svg" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" -dependencies = [ - "plotters-backend", -] - -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "polling" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix 1.1.4", - "windows-sys 0.61.2", -] - -[[package]] -name = "postgres" -version = "0.19.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aacf632d0554ff75f58183694f41dc8999c8a3a43a386994d0ec2d034f1dfbe1" -dependencies = [ - "bytes", - "fallible-iterator 0.2.0", - "futures-util", - "log", - "tokio", - "tokio-postgres", -] - -[[package]] -name = "postgres-protocol" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56201207dac53e2f38e848e31b4b91616a6bb6e0c7205b77718994a7f49e70fc" -dependencies = [ - "base64", - "byteorder", - "bytes", - "fallible-iterator 0.2.0", - "hmac 0.13.0", - "md-5", - "memchr", - "rand 0.10.1", - "sha2 0.11.0", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc729a129e682e8d24170cd30ae1aa01b336b096cbb56df6d534ffec133d186" -dependencies = [ - "bytes", - "fallible-iterator 0.2.0", - "postgres-protocol", -] - [[package]] name = "potential_utf" version = "0.1.5" @@ -3346,25 +2237,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "proptest" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" -dependencies = [ - "bit-set", - "bit-vec", - "bitflags 2.11.1", - "num-traits", - "rand 0.9.4", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "rusty-fork", - "tempfile", - "unarray", -] - [[package]] name = "ptr_meta" version = "0.1.4" @@ -3385,12 +2257,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quinn" version = "0.11.9" @@ -3494,17 +2360,6 @@ dependencies = [ "rand_core 0.9.5", ] -[[package]] -name = "rand" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" -dependencies = [ - "chacha20", - "getrandom 0.4.2", - "rand_core 0.10.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -3543,43 +2398,13 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "rand_core" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" - -[[package]] -name = "rand_xorshift" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" -dependencies = [ - "rand_core 0.9.5", -] - -[[package]] -name = "raw-window-handle" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags", ] [[package]] @@ -3588,18 +2413,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ - "bitflags 2.11.1", -] - -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 2.0.18", + "bitflags", ] [[package]] @@ -3715,45 +2529,6 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "reqwest" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" -dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pki-types", - "rustls-platform-verifier", - "serde", - "serde_json", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "ring" version = "0.17.14" @@ -3813,9 +2588,9 @@ version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1c93dd1c9683b438c392c492109cb702b8090b2bfc8fed6f6e4eb4523f17af3" dependencies = [ - "bitflags 2.11.1", + "bitflags", "chrono", - "fallible-iterator 0.3.0", + "fallible-iterator", "fallible-streaming-iterator", "hashlink 0.11.0", "libsqlite3-sys", @@ -3855,29 +2630,16 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.11.1", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags", "errno", "libc", - "linux-raw-sys 0.12.1", + "linux-raw-sys", "windows-sys 0.61.2", ] @@ -3887,7 +2649,6 @@ version = "0.23.39" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" dependencies = [ - "aws-lc-rs", "log", "once_cell", "ring", @@ -3897,18 +2658,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pki-types" version = "1.14.0" @@ -3919,40 +2668,12 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-platform-verifier" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" -dependencies = [ - "core-foundation 0.10.1", - "core-foundation-sys", - "jni 0.21.1", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls-platform-verifier-android" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" - [[package]] name = "rustls-webpki" version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ - "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -3964,42 +2685,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "rusty-fork" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" -dependencies = [ - "fnv", - "quick-error", - "tempfile", - "wait-timeout", -] - [[package]] name = "ryu" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -4012,29 +2703,6 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" -[[package]] -name = "security-framework" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" -dependencies = [ - "bitflags 2.11.1", - "core-foundation 0.10.1", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.28" @@ -4110,19 +2778,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "digest 0.11.2", + "cpufeatures", + "digest", ] [[package]] @@ -4177,16 +2834,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" -[[package]] -name = "simd_cesu8" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" -dependencies = [ - "rustc_version", - "simdutf8", -] - [[package]] name = "simdutf8" version = "0.1.5" @@ -4211,15 +2858,6 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - [[package]] name = "snap" version = "1.1.1" @@ -4275,17 +2913,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f42444fea5b87a39db4218d9422087e66a85d0e7a0963a439b07bcdf91804006" -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.11.1" @@ -4406,7 +3033,7 @@ dependencies = [ "fastrand", "getrandom 0.4.2", "once_cell", - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] @@ -4548,32 +3175,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "tokio-postgres" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd8df5ef180f6364759a6f00f7aadda4fbbac86cdee37480826a6ff9f3574ce" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator 0.2.0", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf 0.13.1", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.10.1", - "socket2", - "tokio", - "tokio-util", - "whoami", -] - [[package]] name = "tokio-rustls" version = "0.26.4" @@ -4584,28 +3185,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-stream" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-test" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6d24790a10a7af737693a3e8f1d03faef7e6ca0cc99aae5066f533766de545" -dependencies = [ - "futures-core", - "tokio", - "tokio-stream", -] - [[package]] name = "tokio-util" version = "0.7.18" @@ -4695,7 +3274,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.11.1", + "bitflags", "bytes", "futures-util", "http", @@ -4814,12 +3393,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "ttf-parser" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" - [[package]] name = "twox-hash" version = "2.1.2" @@ -4832,12 +3405,6 @@ version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" -[[package]] -name = "unarray" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" - [[package]] name = "uncased" version = "0.9.10" @@ -4847,12 +3414,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - [[package]] name = "unicode-general-category" version = "1.1.0" @@ -4865,21 +3426,6 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-normalization" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" - [[package]] name = "unicode-segmentation" version = "1.13.2" @@ -5014,25 +3560,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" -[[package]] -name = "wait-timeout" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" -dependencies = [ - "libc", -] - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -5048,15 +3575,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.3+wasi-0.2.9" @@ -5075,15 +3593,6 @@ dependencies = [ "wit-bindgen 0.51.0", ] -[[package]] -name = "wasite" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" -dependencies = [ - "wasi 0.14.7+wasi-0.2.4", -] - [[package]] name = "wasm-bindgen" version = "0.2.118" @@ -5168,7 +3677,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags", "hashbrown 0.15.5", "indexmap", "semver", @@ -5194,15 +3703,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-root-certs" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "webpki-roots" version = "1.0.7" @@ -5212,25 +3712,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "weezl" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" - -[[package]] -name = "whoami" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6a5b12f9df4f978d2cfdb1bd3bac52433f44393342d7ee9c25f5a1c14c0f45d" -dependencies = [ - "libc", - "libredox", - "objc2-system-configuration", - "wasite", - "web-sys", -] - [[package]] name = "widestring" version = "1.2.1" @@ -5253,15 +3734,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.61.2", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -5327,15 +3799,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -5345,15 +3808,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.60.2" @@ -5372,21 +3826,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -5420,12 +3859,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -5438,12 +3871,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -5456,12 +3883,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -5486,12 +3907,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -5504,12 +3919,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -5522,12 +3931,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -5540,12 +3943,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -5558,46 +3955,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winit" -version = "0.30.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" -dependencies = [ - "android-activity", - "atomic-waker", - "bitflags 2.11.1", - "block2", - "calloop", - "cfg_aliases", - "concurrent-queue", - "core-foundation 0.9.4", - "core-graphics", - "cursor-icon", - "dpi", - "js-sys", - "libc", - "ndk", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "objc2-ui-kit", - "orbclient", - "pin-project", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.44", - "smol_str", - "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", - "windows-sys 0.52.0", - "xkbcommon-dl", -] - [[package]] name = "winnow" version = "0.7.15" @@ -5616,15 +3973,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi", -] - [[package]] name = "wit-bindgen" version = "0.51.0" @@ -5689,7 +4037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags", "indexmap", "log", "serde", @@ -5741,37 +4089,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.4", -] - -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.11.1", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" - -[[package]] -name = "yeslogic-fontconfig-sys" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503a066b4c037c440169d995b869046827dbc71263f6e8f3be6d77d4f3229dbd" -dependencies = [ - "dlib", - "once_cell", - "pkg-config", + "rustix", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 47cef647..ca3aac45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,22 +33,18 @@ csscolorparser = "0.8.1" tree-sitter = "0.26" # Data container -arrow = { version = "56", default-features = false, features = ["ipc"] } +arrow = { version = "56", default-features = false } # Readers duckdb = { version = "~1.4", features = ["bundled", "vtab-arrow"] } parquet = { version = "56", default-features = false, features = ["arrow", "snap"] } bytes = "1" -postgres = "0.19" -rusqlite = { version = "0.38", features = ["bundled", "chrono", "functions", "window"] } +rusqlite = { version = "0.38", features = ["bundled", "chrono"] } # ODBC -odbc-api = "13" +odbc-api = { version = "13", default-features = false, features = ["odbc_version_3_80"] } toml_edit = "0.22" -# Writers -plotters = "0.3" - # Serialization serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" @@ -58,11 +54,8 @@ clap = { version = "4.4", features = ["derive"] } anyhow = "1.0" thiserror = "1.0" -# Testing -proptest = "1.4" - # Color interpolation -palette = "0.7" +palette = { version = "0.7", default-features = false, features = ["std", "approx"] } # Utilities regex = "1.10" diff --git a/ggsql-cli/Cargo.toml b/ggsql-cli/Cargo.toml index bc8b1d43..3d932b51 100644 --- a/ggsql-cli/Cargo.toml +++ b/ggsql-cli/Cargo.toml @@ -36,18 +36,14 @@ regex.workspace = true ureq = "3" [features] -default = ["duckdb", "sqlite", "vegalite", "ipc", "parquet", "builtin-data", "odbc"] -ipc = ["ggsql/ipc"] +default = ["duckdb", "sqlite", "vegalite", "parquet", "builtin-data", "odbc"] duckdb = ["ggsql/duckdb"] parquet = ["ggsql/parquet"] -postgres = ["ggsql/postgres"] sqlite = ["ggsql/sqlite"] odbc = ["ggsql/odbc"] vegalite = ["ggsql/vegalite"] -ggplot2 = ["ggsql/ggplot2"] builtin-data = ["ggsql/builtin-data"] -all-readers = ["duckdb", "postgres", "sqlite", "odbc"] -all-writers = ["vegalite", "ggplot2"] +all-readers = ["duckdb", "sqlite", "odbc"] # cargo-packager configuration for cross-platform installers [package.metadata.packager] diff --git a/ggsql-jupyter/Cargo.toml b/ggsql-jupyter/Cargo.toml index 9fb5f4b2..714814b9 100644 --- a/ggsql-jupyter/Cargo.toml +++ b/ggsql-jupyter/Cargo.toml @@ -64,6 +64,4 @@ sqlite = ["ggsql/sqlite"] duckdb = ["ggsql/duckdb"] [dev-dependencies] -# Test utilities -tokio-test = "0.4" tempfile = "3.8" diff --git a/ggsql-wasm/Cargo.toml b/ggsql-wasm/Cargo.toml index 79a6543e..1ce69e2f 100644 --- a/ggsql-wasm/Cargo.toml +++ b/ggsql-wasm/Cargo.toml @@ -15,7 +15,6 @@ crate-type = ["cdylib"] wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" js-sys = "0.3" -csv = "1" arrow = { workspace = true } ggsql = { path = "../src", default-features = false, features = ["vegalite", "sqlite", "builtin-data"] } serde_json = "1" diff --git a/src/Cargo.toml b/src/Cargo.toml index e548f4c7..c2b9cb6a 100644 --- a/src/Cargo.toml +++ b/src/Cargo.toml @@ -26,16 +26,12 @@ arrow = { workspace = true } # Readers duckdb = { workspace = true, optional = true } -postgres = { workspace = true, optional = true } rusqlite = { workspace = true, optional = true } odbc-api = { workspace = true, optional = true } toml_edit = { workspace = true, optional = true } parquet = { workspace = true, optional = true } bytes = { workspace = true } -# Writers -plotters = { workspace = true, optional = true } - # Serialization serde.workspace = true serde_json.workspace = true @@ -52,21 +48,16 @@ const_format.workspace = true uuid.workspace = true [dev-dependencies] -jsonschema = "0.44" -proptest.workspace = true +jsonschema = { version = "0.44", default-features = false, features = ["resolve-file"] } tempfile = "3.8" ureq = "3" [features] -default = ["duckdb", "sqlite", "vegalite", "ipc", "parquet", "builtin-data", "odbc"] -ipc = [] +default = ["duckdb", "sqlite", "vegalite", "parquet", "builtin-data", "odbc"] duckdb = ["dep:duckdb"] parquet = ["dep:parquet"] -postgres = ["dep:postgres"] sqlite = ["dep:rusqlite"] odbc = ["dep:odbc-api", "dep:toml_edit"] vegalite = [] -ggplot2 = [] builtin-data = [] -all-readers = ["duckdb", "postgres", "sqlite", "odbc"] -all-writers = ["vegalite", "ggplot2", "plotters"] +all-readers = ["duckdb", "sqlite", "odbc"] diff --git a/src/lib.rs b/src/lib.rs index 84b310ea..a905c8ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,7 +46,7 @@ pub mod util; pub mod reader; -#[cfg(any(feature = "vegalite", feature = "ggplot2", feature = "plotters"))] +#[cfg(feature = "vegalite")] pub mod writer; pub mod execute; From ab40f27a77d34212cfc7b0fa5ea91e21f72e3b24 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 1 May 2026 13:58:58 +0200 Subject: [PATCH 4/5] Revert "Add dependency audit recommendations" This reverts commit 95283ddf188ee29308983977a1fbeebec259a626. --- audit-recommendations.md | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 audit-recommendations.md diff --git a/audit-recommendations.md b/audit-recommendations.md deleted file mode 100644 index 61851145..00000000 --- a/audit-recommendations.md +++ /dev/null @@ -1,21 +0,0 @@ -## Dependency audit recommendations - -Ordered by effort-to-impact ratio (easiest wins first). - -- **Remove `proptest`** (dev-dep in `src/Cargo.toml`). Never imported anywhere — no `proptest!` macros or imports exist. Drops 31 transitive deps (5 unique). One-line removal. - -- **Remove `csv`** (dep in `ggsql-wasm/Cargo.toml`). Never imported — CSV parsing is handled on the JS side via the `convert_csv()` bridge. Drops 6 transitive deps (1 unique). One-line removal. - -- **Remove `tokio-test`** (dev-dep in `ggsql-jupyter/Cargo.toml`). Never imported — the Jupyter kernel's tests are Python-based. Drops 21 transitive deps (1 unique). One-line removal. - -- **Disable `prompt` feature on `odbc-api`**. Change to `default-features = false, features = ["odbc_version_3_80"]`. No prompt/driver-connect calls exist anywhere. Drops ~55 unique deps including the entire `winit` windowing library and its platform backends (`objc2-*`, `ndk`, `jni`, `xkbcommon-dl`, etc.). - -- **Disable `resolve-http` on `jsonschema`** (dev-dep in `src/Cargo.toml`). Change to `default-features = false, features = ["resolve-file"]`. The Vega-Lite schema is vendored via `include_str!`, so HTTP resolution is never used. Drops ~30 unique deps (`reqwest`, `rustls`, TLS platform crates). - -- **Disable `named_from_str` on `palette`**. Change to `default-features = false, features = ["std", "approx"]`. Named color lookup is done by `csscolorparser`, not `palette` — only color space math (`Srgb`, `LinSrgb`, `Oklab`, `Mix`) is used. Drops 4 unique deps (the `phf` v0.11 family). - -- **Remove `functions` and `window` features from `rusqlite`**. No `create_scalar_function` or `create_window_function` calls exist. Zero dep savings but a cleaner feature surface. - -- **Remove `ipc` feature from `arrow`** (and the empty `ipc = []` feature flag in `src/Cargo.toml`). No `arrow::ipc` imports exist anywhere. Marginal savings — `flatbuffers` is still pulled in by `duckdb`. - -- **Remove `postgres` and `plotters`** placeholder deps. Both are optional deps behind feature flags with no implementation. No compiled impact today, but removing them avoids confusion and keeps the manifest honest until drivers are actually written. From cca2d344bdadc8a27b6b423fa39d5b5ecab4f0b6 Mon Sep 17 00:00:00 2001 From: Teun van den Brand Date: Fri, 1 May 2026 13:59:13 +0200 Subject: [PATCH 5/5] Revert "Add workspace dependency audit table" This reverts commit 43492f3a4dd6ad1e27590b1466419d1570604d3d. --- audit.md | 50 -------------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 audit.md diff --git a/audit.md b/audit.md deleted file mode 100644 index 6c87a5e7..00000000 --- a/audit.md +++ /dev/null @@ -1,50 +0,0 @@ -## Dependency audit - -| Crate | Why we use it | Total transitive deps | Unique deps | Features enabled | Unused features | All enabled features needed? | -|---|---|---|---|---|---|---| -| `csscolorparser` 0.8.3 | Parses CSS color strings (named colors, hex, `rgb()`, `hsl()`, etc.) into normalized hex values. Used in `src/plot/scale/colour.rs` for `color_to_hex()` and `parse_to_srgb()`, called from the parser and color interpolation pipeline. | 16 (itself + 15) | 5: `phf` v0.13, `phf_generator`, `phf_macros`, `phf_shared`, `uncased`. Note: `palette` already pulls `phf` v0.11, so we carry two major versions. | `default` = `named-colors` + `std` | `cint`, `rust-rgb`, `serde` | Yes. `named-colors` is required because users write color names like `'red'` in queries. | -| `palette` 0.7.6 | Color space conversions. Used in `src/plot/scale/colour.rs` for `Srgb`, `LinSrgb`, `Oklab`, `Mix`, `FromColor`, `IntoColor` — converting between sRGB, linear RGB, and Oklab for perceptually uniform color interpolation. | 19 (itself + 18) | 8: `approx`, `by_address`, `fast-srgb8`, `palette_derive`, `phf` v0.11, `phf_generator` v0.11, `phf_macros` v0.11, `phf_shared` v0.11. | `default` = `named_from_str` + `std` + `approx` | `bytemuck`, `rand`/`random`, `serde`/`serializing`, `wide`, `libm`, `find-crate` | **No.** `named_from_str` (which enables `named` + `phf`) provides named color lookup from `palette`, but named colors are parsed by `csscolorparser` instead — no palette named-color API is used. Switching to `default-features = false, features = ["std", "approx"]` would drop the `phf` v0.11 family (4 crates). | -| `regex` 1.12.3 | Regular expressions. Used in `src/format.rs` for label formatting. | 5 (itself + 4) | 0. All deps (`aho-corasick`, `memchr`, `regex-automata`, `regex-syntax`) are shared with `tree-sitter`, `arrow-string`, etc. | `default` = `std` + `perf` + `unicode` | `logging`, `perf-dfa-full`, `pattern` | Yes. Standard defaults, already fully activated by other crates. | -| `chrono` 0.4.44 | Date/time types and arithmetic. Used pervasively: `NaiveDate`, `NaiveDateTime`, `NaiveTime`, `Datelike`, `Timelike` in formatting (`src/format.rs`), break computation (`scale/breaks.rs`), date/datetime transforms, type conversions, and the SQLite reader. | 5 (itself + 4) | 0. The unique entries (`iana-time-zone`, `windows-core`, etc.) are platform timezone crates intrinsic to `chrono` itself; already pulled in via `arrow-array`. | `default` = `clock` + `std` + `oldtime` + `wasmbind` | `arbitrary`, `serde`, `rkyv`, `unstable-locales`, `defmt` | Yes. Standard defaults, already fully activated by `arrow-array` and `rusqlite`. | -| `rand` 0.8.6 | Random number generation. Used in `src/plot/layer/position/jitter.rs` for `Rng` to add random jitter to point positions. | 34 (itself + 33) | 2: `rand_chacha`, `rand_core` v0.6. Note: `rand` v0.9 also exists in the tree via `proptest` (which is itself unused). | `default` = `std` + `std_rng` | — | Yes. Standard defaults for a single-callsite dep. | -| `const_format` 0.2.36 | Compile-time string concatenation. Used in `src/naming.rs` via `concatcp!` to build `const` prefix/suffix strings like `"__ggsql_const_"` from `GGSQL_PREFIX` + `"const_"`. | 8 (itself + 7) | 3: `const_format_proc_macros`, `konst`, `konst_macro_rules`. | `default` (empty) | `fmt`, `derive`, `assert`, `more_str_macros` | Yes, though the dep could be eliminated by inlining the ~10 string constants as literals (minor DRY tradeoff). | -| `uuid` 1.23.1 | UUID generation. Used in `src/naming.rs` for `Uuid::new_v4()` to generate a process-wide session ID, ensuring temp table names are unique across concurrent processes. | 3 (itself + 2) | 0. Its deps (`getrandom`, `cfg-if`) are shared. | `default` + `v4` | `v1`/`v3`/`v5`/`v6`/`v7`/`v8`, `serde`, `borsh`, `fast-rng`, `js` | Yes. `v4` is the only version needed. | -| `tree-sitter` 0.26.8 | Core parser for the ggsql language. Used in `src/parser/` to parse queries into a CST (via `tree-sitter-ggsql` grammar), and in `src/reader/data.rs` and `src/execute/cte.rs` for tree navigation. | 21 (itself + 20) | 2: `streaming-iterator`, `tree-sitter-language`. Everything else (`regex`, `cc`, `serde_json`, `memchr`, etc.) is already in the workspace tree. | `default` = `std` | `bindgen`, `wasm` (+ `wasmtime-c-api`) | Yes. `std` enables regex performance features and unicode support in `regex-syntax`, both needed for parsing. | -| `tokio` 1.52.1 | Async runtime. Used in `ggsql-jupyter` for `#[tokio::main]`, `tokio::select!`, and `tokio::signal::ctrl_c()`. Not a dep of the core `ggsql` crate. Workspace declares it with `default-features = false`; `full` is activated by `zeromq` (Jupyter's ZeroMQ transport) and `ggsql-wasm`. | 19 (itself + 18) | 1: `tokio-macros`. All other deps (`mio`, `parking_lot`, `socket2`, `signal-hook-registry`, etc.) are shared. | `full` (activated by transitive deps) | `io-uring`, `tracing`, `taskdump` | Yes. The Jupyter kernel needs `rt-multi-thread`, `macros`, `net`, `signal`, `sync` at minimum; `full` is pulled in by `zeromq` regardless. | -| `tracing` 0.1.44 | Structured logging. Used extensively in `ggsql-jupyter` (kernel lifecycle, message handling, execution, comms, errors). Not a dep of the core `ggsql` crate. | 10 (itself + 9) | 1: `tracing-attributes` (proc-macro for `#[instrument]`). | `default` = `std` + `attributes` | `log`, `async-await`, `valuable`, `max_level_*`, `release_max_level_*` | Yes. Standard defaults. | -| `tracing-subscriber` 0.3.23 | Tracing output configuration. Used in `ggsql-jupyter/src/main.rs` for `tracing_subscriber::fmt()` and `EnvFilter`. Not a dep of the core `ggsql` crate. | 25 (itself + 24) | 5: `matchers`, `nu-ansi-term`, `sharded-slab`, `thread_local`, `tracing-log`. | `default` + `env-filter` + `registry` | `json`, `chrono`, `time`, `parking_lot`, `serde`, `valuable` | Yes. `fmt` and `env-filter` are both used directly. `ansi` provides colored log output. | -| `arrow` 56.2.0 | Arrow columnar format — the in-memory data representation. Used pervasively across the crate: `DataType` for schema/type logic, `Array`/`ArrayRef`/`RecordBatch` for data, and `arrow::compute` for sorting/casting. | 67 (itself + 66) | 4: `arrow-arith`, `arrow-ord`, `arrow-row`, `arrow-string` (arrow sub-crates not used by other workspace members). All third-party deps are shared. | `ipc` (explicit), plus `ffi` and `prettyprint` (activated by `duckdb`, not by us) | `csv`, `json`, `ipc_compression`, `chrono-tz`, `force_validate`, `pyarrow`, `test_utils` | No. The `ipc` feature (which pulls in `flatbuffers`) is declared but no code uses Arrow IPC — no `arrow::ipc` imports exist anywhere in the workspace. The ggsql `ipc` feature flag is empty (`ipc = []`). Removing it would drop `flatbuffers` as a direct dep (though `duckdb` also pulls it in). | -| `parquet` 56.2.0 | Parquet file reader. Used in `src/reader/data.rs` via `ParquetRecordBatchReaderBuilder` to read `.parquet` files into Arrow record batches. | 66 (itself + 65) | 8: `byteorder`, `integer-encoding`, `ordered-float`, `paste`, `seq-macro`, `snap`, `thrift`, `twox-hash`. | `arrow` + `snap` (with `default-features = false`) | `brotli`, `flate2`/`lz4`/`zstd` (other compression codecs), `async`/`tokio`, `json`, `serde`, `cli`, `object_store`, `encryption`, `crc`, `simdutf8` | Yes. `arrow` is essential (parquet → Arrow conversion). `snap` enables Snappy decompression, a common parquet codec needed to read user files. Defaults are disabled, avoiding unnecessary compression libs. | -| `bytes` 1.11.1 | Zero-copy byte buffer. Used in `src/reader/data.rs` to wrap embedded parquet bytes via `Bytes::from_static()` for the parquet reader. Also used in `ggsql-jupyter`. | 1 (itself only) | 0. Already in the workspace tree via `arrow-buffer`. | `default` = `std` | `serde` | Yes. Only `std` is enabled, which is the minimum. | -| `rusqlite` 0.38.0 | SQLite database driver. Used in `src/reader/sqlite.rs` for executing SQL queries via `Connection` and converting SQLite values to Arrow arrays. | 24 (itself + 23) | 2: `hashlink`, `libsqlite3-sys`. | `bundled`, `chrono`, `functions`, `window` (plus `default` = `cache`) | `blob`, `backup`, `load_extension`, `serde_json`, `url`, `uuid`, `vtab`, `trace`, `hooks`, `serialize`, `jiff`, `time`, `buildtime_bindgen` | No. `bundled` and `chrono` are needed (bundled SQLite, date type conversions). `functions` and `window` are **not used** — no `create_scalar_function` or `create_window_function` calls exist. They could be removed. | -| `odbc-api` 13.1.0 | ODBC database driver. Used in `src/reader/odbc.rs` for executing SQL queries over ODBC connections, converting ODBC types (dates, timestamps, etc.) to Arrow arrays. | 30 (itself + 29) | 57: `winit` (full windowing library) plus all its platform deps (`objc2-*`, `ndk`, `jni`, `xkbcommon-dl`, etc.), `odbc-sys`, `widestring`, and others. | `default` = `odbc_version_3_80` + `prompt` | `derive`, `iodbc`, `narrow`, `wide` | **No.** The `prompt` feature enables ODBC driver connection prompts via a native window (`winit`) but is **never used** — no prompt/driver-connect calls exist. Disabling it (via `default-features = false, features = ["odbc_version_3_80"]`) would drop ~55 unique deps including the entire `winit` tree. | -| `toml_edit` 0.22.27 | Parses Snowflake `connections.toml` config files. Used in `src/reader/odbc.rs` (behind the `odbc` feature flag) to resolve Snowflake connection names and detect Posit Workbench OAuth tokens. | 15 (itself + 14) | 3: `toml_datetime`, `toml_write`, `winnow`. | `default` = `parse` + `display` | `perf`, `serde`, `unbounded` | Yes. Both `parse` (reading TOML) and `display` (not strictly needed but harmless — 1 small crate) are enabled. | -| `serde` 1.0.228 | Serialization framework. `Derive(Serialize, Deserialize)` is used on all AST types in `src/plot/` — `Plot`, `Layer`, `Scale`, `Facet`, `Projection`, `Mappings`, etc. | 8 (itself + 7) | 0. All deps (`serde_core`, `serde_derive`, `proc-macro2`, `quote`, `syn`, `unicode-ident`) are shared. | `default` + `derive` | `rc`, `unstable` | Yes. `derive` is essential (proc-macro for `#[derive(Serialize, Deserialize)]`). `std` is baseline. | -| `serde_json` 1.0.149 | JSON serialization. Used throughout `src/writer/vegalite/` to build the Vega-Lite JSON output (`json!`, `Map`, `Value`). | 9 (itself + 8) | 1: `zmij`. | `default` + `preserve_order` (which enables `indexmap`) | `arbitrary_precision`, `float_roundtrip`, `raw_value`, `unbounded_depth` | Yes. `preserve_order` ensures JSON key order is stable, which matters for deterministic Vega-Lite output. | -| `plotters` 0.3 | Reserved for a future native rendering writer. Declared as an optional dep behind the `plotters` feature flag, which is **not** in default features. No writer implementation exists — only a `cfg` gate in `src/lib.rs`. | N/A (never compiled) | N/A | N/A (optional, never enabled) | All | No. Same as `postgres` — could be removed until implemented. | -| `postgres` 0.19 | Reserved for a future PostgreSQL reader. Declared as an optional dep behind the `postgres` feature flag, which is **not** in default features. No driver implementation exists yet — only connection string parsing in `src/reader/connection.rs`. | N/A (never compiled) | N/A | N/A (optional, never enabled) | All | No. The crate is never compiled or used. It could be removed from `Cargo.toml` until a driver is actually implemented. | -| `proptest` 1.11.0 | Property-based testing framework. Declared as a dev-dependency of the core crate but **never used** — no `proptest!` macros or imports exist anywhere in the codebase. | 31 (itself + 30) | 5: `quick-error`, `rand_xorshift`, `rusty-fork`, `unarray`, `wait-timeout`. | `default` = `std`, `fork`, `timeout`, `bit-set` | `attr-macro`, `handle-panics`, `hardware-rng`, `no_std` | No. Unused — could be removed entirely. | -| `thiserror` 1.0.69 | Error derive macro. Used in `src/lib.rs` for `#[derive(thiserror::Error)]` on `GgsqlError`. | 7 (itself + 6) | 1: `thiserror-impl` (its own proc-macro). All other deps (`proc-macro2`, `quote`, `syn`) are shared. | (none — no feature flags) | — | Yes. Note: v2 also exists in the tree from a transitive dep, so we carry two major versions. | -| `anyhow` 1.0.102 | Ergonomic error handling. Used in `ggsql-cli` (main return type) and `ggsql-jupyter` (kernel, executor, message handling). Not a dep of the core `ggsql` crate. | 1 (itself only) | 0. | `default` = `std` | `backtrace` | Yes. Only `std` is enabled. | -| `clap` 4.6.1 | CLI argument parser. Used in `ggsql-cli/src/main.rs` for `Parser`, `Subcommand`, and `ValueEnum` derives. Not a dep of the core `ggsql` crate. | 21 (itself + 20) | 13: `anstream`, `anstyle`, `anstyle-parse`, `anstyle-query`, `anstyle-wincon`, `clap_builder`, `clap_derive`, `clap_lex`, `colorchoice`, `is_terminal_polyfill`, `once_cell_polyfill`, `strsim`, `utf8parse`. | `default` + `derive` | `cargo`, `env`, `unicode`, `wrap_help`, `string` | Yes. `derive` is needed for the proc-macro. Default features (`color`, `help`, `usage`, `error-context`, `suggestions`) are all standard CLI niceties. | -| `termimad` 0.31.3 | Terminal markdown rendering. Used in `ggsql-cli/src/main.rs` for the `ggsql docs` subcommand to render embedded syntax docs with ANSI formatting. Not a dep of the core `ggsql` crate. | 49 (itself + 48) | 24: `crossterm`, `crossbeam` family, `lazy-regex`, `minimad`, `crokey`, `signal-hook`, `derive_more`, `coolor`, `winapi`, etc. | `default` = `special-renders` | — | Yes. The `special-renders` feature is the only optional one and is harmless (no extra deps). The dep cost is inherent to terminal rendering. | -| `sprintf` 0.4.3 | C-style printf formatting. Used in `src/format.rs` for `sprintf!` to support user-specified format strings (e.g., `%.2f`). | 7 (itself + 6) | 0. All deps are shared. | (none — no feature flags) | — | Yes. | -| `jsonschema` 0.44.1 | JSON Schema validation (dev-dependency). Used in `src/writer/vegalite/mod.rs` to validate generated Vega-Lite specs against a vendored schema in tests. | 149 (itself + 148) | 36: `reqwest` v0.13, `rustls`, TLS crates, `fancy-regex`, `fraction`, `referencing`, platform cert crates, etc. | `default` = `resolve-http` + `resolve-file` + `tls-aws-lc-rs` | `arbitrary-precision`, `resolve-async` | **No.** `resolve-http` pulls in `reqwest` + `rustls` + TLS platform crates for HTTP-based schema resolution, but the schema is vendored via `include_str!`. Using `default-features = false, features = ["resolve-file"]` would drop ~30 unique deps. | -| `tempfile` 3.27.0 | Temporary file/directory creation (dev-dependency). Used in `src/reader/odbc.rs` tests for `tempdir()`. | 7 (itself + 6) | 0. All deps are shared. | `default` = `getrandom` | `nightly` | Yes. | -| `ureq` 3.3.0 | HTTP client (dev-dependency). Used in a single test (`test_vendored_schema_matches_upstream`) to check that the vendored Vega-Lite schema matches upstream. | 35 (itself + 34) | 2: `ureq-proto`, `utf8-zero`. | `default` = `rustls` + `gzip` | `brotli`, `charset`, `cookies`, `json`, `native-tls`, `socks-proxy` | Yes. Minimal use but appropriate for a dev-dep that makes a single HTTP request. | -| `duckdb` 1.4.4 | DuckDB database driver — the default SQL backend. Used in `src/reader/duckdb.rs` for executing SQL queries via `Connection`, and for Arrow-based virtual table access via `ArrowVTab`. | 168 (itself + 167) | 50: mostly `libduckdb-sys`, networking (`quinn`, `reqwest`), serialization (`rkyv`, `borsh`), archive (`tar`, `zip`, `zopfli`), and Windows platform crates. | `bundled`, `vtab-arrow` (which activates `vtab` + `num`) | `chrono`, `serde_json`, `url`, `r2d2`, `uuid`, `polars`, `json`, `parquet`, `calamine`, `loadable-extension`, `buildtime_bindgen` | Yes. `bundled` compiles DuckDB from source (required for distribution). `vtab-arrow` is needed for `ArrowVTab` used in `reader/duckdb.rs` to pass Arrow record batches to DuckDB. | -| `zeromq` 0.4.1 | ZeroMQ messaging library for the Jupyter kernel. Used in `ggsql-jupyter/src/kernel.rs` for `RouterSocket`, `PubSocket`, `RepSocket`, `Socket`, `SocketRecv`, `SocketSend` — the five ZMQ sockets required by the Jupyter messaging protocol. | 54 (itself + 53) | 4: `async-trait`, `asynchronous-codec`, `dashmap` v5, `hashbrown` v0.14. | `default` = `tokio-runtime` + `all-transport` (which enables `tcp-transport` + `ipc-transport`) | `async-dispatcher`, `async-dispatcher-macros`, `async-dispatcher-runtime`, `async-std`, `async-std-runtime` | Yes. `tokio-runtime` is needed (the kernel uses tokio). `all-transport` enables both TCP and IPC, which are both valid Jupyter transport types (determined by the connection file). | -| `hmac` 0.12.1 | HMAC message authentication. Used in `ggsql-jupyter/src/kernel.rs` for `Hmac` and `Mac` to sign Jupyter protocol messages with the session key from the connection file. | 8 (itself + 7) | 0. All deps (`crypto-common`, `digest`, `block-buffer`, etc.) are shared. | `default` (empty — no features enabled) | `reset`, `std` | Yes. Minimal configuration, only core HMAC functionality needed. | -| `sha2` 0.10.9 | SHA-256 hashing. Used in `ggsql-jupyter/src/kernel.rs` as `Sha256` — the hash algorithm for Jupyter HMAC message signing (`Hmac`). | 10 (itself + 9) | 1: `cpufeatures`. | `default` = `std` | `asm`, `asm-aarch64`, `compress`, `force-soft`, `force-soft-compact`, `loongarch64_asm`, `oid` | Yes. Standard defaults. | -| `hex` 0.4.3 | Hex encoding. Used in `ggsql-jupyter/src/kernel.rs` for `hex::encode()` to convert HMAC signatures to hex strings for Jupyter message frames. | 1 (itself only) | 0. | `default` = `std` (which enables `alloc`) | `serde` | Yes. Minimal dep with no transitive cost. | -| `tokio-test` 0.4.5 | Async test utilities (dev-dependency). Declared but **never used** — no `tokio_test` imports exist anywhere in the crate (the Jupyter kernel's tests are Python-based, not Rust). | 21 (itself + 20) | 1: `tokio-stream`. | `default` (no features) | — | **No.** Unused — could be removed entirely. | -| `zeromq` 0.4.1 | ZeroMQ messaging library for the Jupyter kernel. Used in `ggsql-jupyter/src/kernel.rs` for `RouterSocket`, `PubSocket`, `RepSocket`, `Socket`, `SocketRecv`, `SocketSend` — the five ZMQ sockets required by the Jupyter messaging protocol. | 54 (itself + 53) | 4: `async-trait`, `asynchronous-codec`, `dashmap` v5, `hashbrown` v0.14. | `default` = `tokio-runtime` + `all-transport` (`tcp-transport` + `ipc-transport`) | `async-dispatcher`, `async-dispatcher-macros`, `async-dispatcher-runtime`, `async-std`, `async-std-runtime` | Yes. `tokio-runtime` is needed (the kernel uses tokio). `all-transport` enables both TCP and IPC, both valid Jupyter transports (determined by the connection file). | -| `hmac` 0.12.1 | HMAC message authentication. Used in `ggsql-jupyter/src/kernel.rs` for `Hmac` and `Mac` to sign Jupyter protocol messages with the session key from the connection file. | 8 (itself + 7) | 0. All deps (`crypto-common`, `digest`, `block-buffer`, etc.) are shared. | `default` (empty — no features enabled) | `reset`, `std` | Yes. Minimal configuration, only core HMAC functionality needed. | -| `sha2` 0.10.9 | SHA-256 hashing. Used in `ggsql-jupyter/src/kernel.rs` as `Sha256` — the hash algorithm for Jupyter HMAC message signing (`Hmac`). | 10 (itself + 9) | 1: `cpufeatures`. | `default` = `std` | `asm`, `asm-aarch64`, `compress`, `force-soft`, `force-soft-compact`, `loongarch64_asm`, `oid` | Yes. Standard defaults. | -| `hex` 0.4.3 | Hex encoding. Used in `ggsql-jupyter/src/kernel.rs` for `hex::encode()` to convert HMAC signatures to hex strings for Jupyter message frames. | 1 (itself only) | 0. | `default` = `std` (which enables `alloc`) | `serde` | Yes. Minimal dep with no transitive cost. | -| `wasm-bindgen` 0.2.118 | WebAssembly/JS interop. Used in `ggsql-wasm/src/lib.rs` for `#[wasm_bindgen]` attribute macros, `JsValue`, and `prelude::*` — the core binding layer for exposing Rust functions to JavaScript. | 12 (itself + 11) | 3: `wasm-bindgen-macro`, `wasm-bindgen-macro-support`, `wasm-bindgen-shared`. | `default` = `std` | `enable-interning`, `serde`, `serde-serialize`, `spans`, `strict-macro` | Yes. Only `std` is needed. | -| `wasm-bindgen-futures` 0.4.68 | Bridges Rust futures to JS Promises. Used in `ggsql-wasm/src/lib.rs` implicitly — async `#[wasm_bindgen]` methods (`register_parquet`, `register_builtin_datasets`) need this to convert Rust futures to JS Promises. | 23 (itself + 22) | 0. All deps shared with `wasm-bindgen` and `js-sys`. | `default` = `std` | `futures-core-03-stream` | Yes. Required for any async wasm-bindgen function. | -| `js-sys` 0.3.95 | JavaScript standard library bindings. Used in `ggsql-wasm/src/lib.rs` for `js_sys::Array`, `js_sys::Reflect`, `js_sys::Float64Array`, `js_sys::Uint8Array` — type-safe access to JS objects for column data conversion. | 22 (itself + 21) | 0. All deps shared with `wasm-bindgen`. | `default` = `std` + `unsafe-eval`; `futures` activated by `wasm-bindgen-futures` | — | Yes. Standard defaults for wasm interop. | -| `csv` 1.4.0 | CSV parsing library. Declared as a dependency but **never used** — no `csv` imports exist in the crate. CSV parsing is handled on the JS side via `convert_csv()` bridge function. | 6 (itself + 5) | 1: `csv-core`. | `default` (no features) | — | **No.** Unused — could be removed entirely. | -| `sqlite-wasm-rs` 0.5.2 | SQLite VFS for WebAssembly (wasm32-only). Used in `ggsql-wasm/src/lib.rs` for `sqlite_wasm_rs::MemVfsUtil` and `WasmOsCallback` to initialize an in-memory VFS so `rusqlite` works in the browser. | ~1 (itself + `rsqlite-vfs`) | 1: `rsqlite-vfs`. | `default` (no features) | `bindgen`, `sqlite3mc` | Yes. Minimal — just the core VFS shim needed for browser SQLite. | -| `cc` 1.2.60 | C compiler driver (build-dependency). Used in `tree-sitter-ggsql/bindings/rust/build.rs` via `cc::Build` to compile the generated `parser.c` into a static library linked into the Rust crate. Also pulled in transitively by `ring` (via `rustls`/`reqwest`/`jsonschema`). | 6 (itself + 5) | 3: `find-msvc-tools`, `jobserver`, `shlex`. | `parallel` (activated by `ring`, not by tree-sitter-ggsql directly) | — | Yes. `parallel` is harmless — enables parallel compilation of C files via jobserver. The 3 unique deps (`jobserver`, `shlex`, `find-msvc-tools`) are all build-time only. |