📄 Cargo.toml
[workspace]
resolver = "3"
members = [
    "capture",
    "replay",
    "splatgen",
    "render",
    "sink",
]

# The workspace root is the `kinect-view/` tree from PLAN.md.

[workspace.package]
version = "0.1.0"
edition = "2024"

[workspace.dependencies]
# Internal crates.
capture = { path = "capture" }
replay = { path = "replay" }
splatgen = { path = "splatgen" }
render = { path = "render" }
sink = { path = "sink" }

# Math. glam is pinned to match Brush's workspace: brush-render's public API
# speaks glam, and a different minor would compile a second copy of the
# crate and break type interop.
glam = { version = "0.30", features = ["serde"] }
bytemuck = "1.20"

# Capture.
kinect-one = { git = "https://github.com/Aytixel/kinect-one" }
nokhwa = "0.10"

# Rendering: Brush's renderer as a library (not published to crates.io; it
# lives under crates/brush-render in the Brush repo).
brush-render = { git = "https://github.com/ArthurBrussee/brush" }

# UI / sinks.
eframe = "0.37"
egui = "0.37"
pollster = "1"
# v4l2loopback output (Linux only). Fallback candidate if this proves
# awkward for output queues: edgefirst-v4l2.
v4l2r = "0.0.8"

# Serialization / data for replay datasets.
serde = { version = "1", features = ["derive"] }
image = "0.25"

# Errors / logging (Brush uses tracing + log).
anyhow = "1"
thiserror = "2"
tracing = "0.1"
tracing-subscriber = "0.3"
log = "0.4"

# Async plumbing (kinect-one's API is tokio-based).
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread", "sync", "time"] }