[workspace] members = [".", "crates/improvise-formula", "crates/improvise-core", "crates/improvise-protocol", "crates/improvise-io", "crates/improvise-command", "crates/improvise-wasm-client", "crates/improvise-ws-server", "crates/improvise-worker-server", "crates/gp-tree", "crates/improvise-gp", "crates/numtower"] [package] name = "improvise" version = "0.1.0-rc2" edition = "2024" description = "Terminal pivot-table modeling in the spirit of Lotus Improv" license = "Apache-2.0" repository = "https://github.com/fiddlerwoaroof/improvise" homepage = "https://github.com/fiddlerwoaroof/improvise" readme = "README.md" keywords = ["tui", "pivot", "spreadsheet", "data", "improv"] categories = ["command-line-utilities", "visualization"] [[bin]] name = "improvise" path = "src/main.rs" # improvise-i5tk's acceptance criterion: whether the TUI's whole-grid GridCache # is worth narrowing to a viewport is a measurement, not an argument. # `test = false`: it takes seconds by design, and the suite's rule is that no # single test binary exceeds two of them. [[bench]] name = "grid_projection" harness = false test = false [[bench]] name = "reshape_observation" harness = false test = false [[bench]] name = "scale_bisect" harness = false test = false [dependencies] gp-tree = { path = "crates/gp-tree" } improvise-core = { path = "crates/improvise-core" } improvise-formula = { path = "crates/improvise-formula" } improvise-io = { path = "crates/improvise-io" } improvise-command = { path = "crates/improvise-command" } ratatui = "0.30" crossterm = "0.29" serde = { version = "1", features = ["derive"] } # Parses JSON a user's numbers cross, so it must read back the f64 written: per crate, # because each build stands alone (improvise-6yvg, context/code/protocol.md). serde_json = { version = "1", features = ["float_roundtrip"] } anyhow = "1" thiserror = "2" indexmap = "2" chrono = { version = "0.4", features = ["serde"] } flate2 = "1" unicode-width = "^0.2" csv = "1" clap = { version = "4.6.7", features = ["derive"] } enum_dispatch = "0.3.13" [dev-dependencies] # Only `tests/grid_frame_agreement.rs` needs it: that test drives the TUI # widget and the browser client over ONE `GridCache` and asserts they draw # the same grid frame (improvise-anr9). A dev-dependency, so the terminal # binary does not grow a wasm client; `improvise-wasm-client` builds # natively, which is how its own tests already run. improvise-wasm-client = { path = "crates/improvise-wasm-client" } # `test-support` gives `FormulaEntry: From<&str>`, which the tests use; asked for # here, or `-p improvise` alone does not compile (improvise-a61f). improvise-protocol = { path = "crates/improvise-protocol", features = ["test-support"] } # `tests/headless_cli.rs` detaches the binary from any terminal with `setsid`. libc = "0.2" pest = "2.9.3" pest_derive = "2.9.3" pest_meta = "2.9.3" proptest = "1" tempfile = "3" [profile.release] opt-level = 3 lto = true codegen-units = 1 strip = true [profile.profiling] inherits = "release" strip = false debug = 2 # The profile that 'dist' will build with [profile.dist] inherits = "release"