Gunnar

nordisk/knut

Cargo.toml

[workspace]
resolver = "2"
members = ["crates/graphar", "crates/knut-build-thing", "crates/graphar-falkordb", "crates/graphar-flight", "crates/knut-flight", "crates/knut-graphdb", "crates/knut-bifrost", "crates/knut-pipelines", "crates/knut-popsim", "crates/knut-popviz", "crates/knut-rel2graph-bench", "crates/knut-thund", "crates/knut-tracing", "crates/knut-wasm-host", "xtask"]
# A real `wasm32-unknown-unknown` guest for the WASM transform host (#6). It only
# ever builds for wasm32 (arrow-on-wasm) and must NOT be pulled into the native
# workspace build/test, so it is excluded. Build it explicitly:
#   cargo build -p knut-bifrost-wasm-guest --target wasm32-unknown-unknown --release
# See crates/knut-bifrost/wasm-guest/README.md.
exclude = ["crates/knut-bifrost/wasm-guest"]

[workspace.package]
# 0.1.5 (2026-08-23). Four of the eleven crates here DRIFTED from their published
# 0.1.4 copies (graphar-falkordb, knut-bifrost, knut-popviz, knut-tracing) and every
# crate shares this one version, so the bump is repo-wide by construction.
#
# knut is also the crate that PROVES today's arrow-59 cascade: its xtask takes
# `nornir = "0.5"` from crates.io, NOT the sibling path, so before nornir 0.5.5
# published, knut resolved the arrow-58 nornir 0.5.4 and carried TWO arrow_array
# majors in one graph (E0271 on iceberg_datafusion's RecordBatch stream). That was
# the original reason the whole cascade started.
version = "0.3.0"
edition = "2024"
authors = ["Ignalina ApS"]
license = "Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/knut"

[workspace.dependencies]
# Serialization
serde = { version = "1", features = ["derive"] }
serde_yaml = "0.9"
serde_json = "1"

# Arrow / Parquet
arrow = { version = "59", features = ["prettyprint"] }
arrow-array = "59"
arrow-schema = "59"
arrow-csv = "59"
parquet = { version = "59", features = ["arrow"] }

# Error handling
thiserror = "2"
anyhow = "1"

# Async + IO
tokio = { version = "1", features = ["full"] }

# Redis / FalkorDB
redis = { version = "0.29", features = ["tokio-comp", "aio"] }

# Arrow Flight SQL
arrow-flight = { version = "59", features = ["flight-sql-experimental"] }
tonic = { version = "0.14", features = ["transport", "tls-ring"] }
futures = "0.3"
prost = "0.14"

# Object storage (S3 / GCS / Azure / S3-compatible: SeaweedFS, RustFS, MinIO)
object_store = { version = "0.13", features = ["aws", "gcp", "azure", "http"] }
bytes = "1"
url = "2"

# Utilities
chrono = { version = "0.4", features = ["serde"] }

# Structured logging / instrumentation — so the file→graph lifecycle emits
# machine-readable events that tests and benchers can drive and assert on.
tracing = "0.1"

# NOTE: no `skade` patch here any more. It used to point at ../skade/skade for
# the delta-ingest CDC work (feat/delta-ingest-cdc), because the equality-delete
# surface (DeltaPlan.delete_files, read_equality_deletes, Table::delete_equality)
# was unpublished. That surface shipped in skade 0.5.0, so the sibling override
# is stale — and a [patch.crates-io] at a ../sibling path is read at
# manifest-load time, which aborts resolution for the WHOLE workspace on any
# checkout that lacks the sibling (i.e. every CI runner and every bare clone).
# Keep it that way: patch only paths that live inside this repo.
[patch.crates-io]
# 2026-10-05 (merge to main): the skade / skade-aegir sibling rows and the facett-pipeline /
# facett-pop git rows are gone — skade 0.6.0, skade-aegir 0.2.0, facett-pipeline 0.2.0 and
# facett-pop 0.2.0 (egui 0.36, with `wire`) are on crates.io since 2026-10-04 and the
# members' requirements already accept them. knut builds from one clone again.
# Local spark-connect fork bumped arrow 56→59 (feat/spark-connect-arrow59).
# Upstream spark-connect 0.2.2 is the newest published release and still pins
# arrow 56, which dragged a whole parallel arrow-56 tree into knut just for the
# spark path. The crate's arrow surface (Arrow-IPC StreamReader → RecordBatch)
# is byte- and API-compatible across arrow 56→59, so the fork is a pure version
# bump with no source changes. This lets knut-bifrost consume spark-connect's
# batches as workspace arrow-59 directly and drop the old IPC round-trip bridge.
# Revert to the crates.io version once spark-connect ships an arrow-59 release.
# Vendored in-tree (vendor/spark-connect-arrow59) so a bare `git clone knut &&
# cargo build --features spark` builds with no external sibling checkout. See
# vendor/spark-connect-arrow59/README.md for the fork rationale + upstream origin.
spark-connect = { path = "vendor/spark-connect-arrow59" }

# orc-rust fork RETIRED 2026-10-02. Its own drop-condition fired: "Revert to the
# crates.io version once orc-rust ships an arrow-59 release." orc-rust 0.9.0 is
# on crates.io and requires arrow ^59.0, so vendor/orc-rust-arrow59 is deleted
# and graphar depends on the registry crate directly.

# ── the datafusion git bridge is GONE, 2026-08-24. Its own drop-condition fired.
#
# It said: "Drop it the day apache publishes a datafusion on arrow 59 (see
# skade/skade-sql/FOLDING-BACK.md, same condition, same one-command check)."
# That day has come. `datafusion 55.0.0` is on crates.io and IS the arrow-59
# line — verified by FOLDING-BACK.md's own test, run against a resolved graph
# rather than guessed at: nornir's Cargo.lock carries `datafusion 55.0.0` from
# `source = "registry+…crates.io-index"` (NOT git) pulling `arrow-array 59.2.0`.
#
# So there is nothing left to bridge. The rev this pinned resolved to 54.1.0 →
# arrow-array v58.4, which is the second `arrow_array` major that produced
# "expected arrow_array::record_batch::RecordBatch, found
# datafusion::arrow::array::RecordBatch" at backend/native.rs:788 and :887.
# `xtask` and `knut-thund` now declare datafusion 55 directly, which is one
# arrow major for the whole workspace with no patch at all.
#
# NOTE for whoever adds the next bridge: a [patch] here is invisible to a
# published consumer — `cargo publish` strips it. skade solved the same problem
# the durable way, by RENAMING its forks (`iceberg-arrow59`,
# `iceberg-datafusion-arrow59`, `iceberg-catalog-rest-arrow59`) and publishing
# them under those names. knut's remaining vendored fork
# (`vendor/spark-connect-arrow59`) keeps upstream's package name and is
# therefore path-only — fine here, not publishable.

# Rickard, 2026-09-05: test artifacts carry line tables only. Full DWARF in every test
# binary was the bulk of a target dir on the day the disks filled; backtraces still show
# file:line.
[profile.test]
debug = "line-tables-only"