symphony_instruments = "0.3.0"
symphony_operators = "0.2.1"
symphony_motifs = "0.2.5"
symphony_external_api = { version = "0.3.0", features = ["instruments", "motifs"] }
# AI Developer - Only gets AI dependencies
[dependencies]
symphony_instruments = "0.3.0"
# Pulls: tokio, serde_json, reqwest, tch (PyTorch), candle-core
# Size: ~45MB
# UI Developer - Only gets UI dependencies
[dependencies]
symphony_motifs = "0.2.5"
# Pulls: tauri, wry, css-color, web-sys
# Size: ~23MB
# Data Engineer - Minimal dependencies
[dependencies]
symphony_operators = "0.2.1"
# Pulls: csv, regex, serde
# Size: ~8MB
# AI Developer
[dependencies]
symphony_external_api = { version = "0.3.0", features = ["instruments"] }
# Still pulls: ALL potential dependencies (features don't eliminate unused deps)
# Size: ~76MB (full dependency tree)
# Problem: Rust features are additive, not subtractive
# If any dependency in your tree enables "motifs", you get UI dependencies too
Winner: Separate Crates - True dependency isolation
# AI extension development
cargo build # Only compiles AI-related crates
# Time: ~45 seconds (clean build)
# Incremental: ~3 seconds
# When other extension types update, no recompilation needed
# Even with features, larger codebase to analyze
cargo build --features="instruments"
# Time: ~67 seconds (clean build)
# Incremental: ~5 seconds
# Any change to shared code triggers recompilation of entire crate
Winner: Separate Crates - Faster builds, better incremental compilation