[workspace] resolver = "3" members = ["crates/*", "apps/*", "xtask"] # Third-party code kept with local fixes (see vendor/README.md); not linted as ours. exclude = ["vendor"] [workspace.package] version = "0.1.6" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.90" authors = ["SolveCraft contributors"] repository = "https://github.com/bherbruck/solvecraft" [workspace.dependencies] # internal solvecraft-geom = { path = "crates/geom" } solvecraft-sketch = { path = "crates/sketch" } solvecraft-kernel = { path = "crates/kernel" } solvecraft-render = { path = "crates/render" } solvecraft-doc = { path = "crates/doc" } solvecraft-io = { path = "crates/io" } solvecraft-engine = { path = "crates/engine" } solvecraft-ui-egui = { path = "crates/ui-egui" } solvecraft-mcp = { path = "crates/mcp" } # foundation thiserror = "2" serde = { version = "1", features = ["derive", "rc"] } serde_json = { version = "1", features = ["float_roundtrip"] } log = "0.4" sha2 = "0.10" # geometry kernel (Apache-2.0; see plan/adr/0001-geometry-kernel.md). Only crates/kernel uses it. truck-modeling = "0.6" truck-shapeops = { version = "0.4", default-features = false } truck-meshalgo = { version = "0.4", default-features = false, features = ["tessellation", "analyzers"] } truck-stepio = { version = "0.3", default-features = false } truck-topology = "0.6" # packages (3MF) zip = { version = "3", default-features = false, features = ["deflate"] } quick-xml = "0.38" # fonts (sketch text outlines; MIT OR Apache-2.0, pure Rust) ttf-parser = { version = "0.25", default-features = false, features = ["std"] } # images image = { version = "0.25", default-features = false, features = ["png"] } # ui egui = "0.36" eframe = { version = "0.36", default-features = false, features = ["persistence"] } # Instant/SystemTime that also work in the browser (std panics on wasm32-unknown-unknown). web-time = "1" egui-wgpu = "0.36" rfd = "0.17" [workspace.lints.rust] unsafe_code = "forbid" [workspace.lints.clippy] dbg_macro = "warn" todo = "warn" too_many_arguments = "allow" type_complexity = "allow" # `!(x > tol)` is our idiom for "not a usable number" (NaN-safe). neg_cmp_op_on_partial_ord = "allow" [profile.dev.package."*"] opt-level = 2 [profile.dev] opt-level = 1 # Tests and lints (`cargo xtask ci`, GitHub CI): quick to build, quick enough to run. Light # optimisation, line tables only (file:line in backtraces), no LTO. Debug assertions are off because # truck's debug-only checks reject valid geometry (seam edges, closed edges); that was the only # reason the tests used to build with --release, which cost most of CI's time. [profile.ci] inherits = "dev" opt-level = 1 debug = "line-tables-only" debug-assertions = false overflow-checks = true incremental = false [profile.ci.package."*"] opt-level = 2 [profile.release] opt-level = 3 lto = "thin" codegen-units = 16 debug = 0 # truck-shapeops with SolveCraft fixes (Apache-2.0, see vendor/truck-shapeops and ATTRIBUTION.md). [patch.crates-io] truck-shapeops = { path = "vendor/truck-shapeops" } truck-stepio = { path = "vendor/truck-stepio" } truck-meshalgo = { path = "vendor/truck-meshalgo" } matext4cgmath = { path = "vendor/matext4cgmath" }