[workspace] resolver = "2" members = [ "crates/core_model", "crates/data_source", "crates/engine", "crates/extfn", "crates/nl_formula", "crates/pg_model", "crates/verified", ] # pg_improv is its own workspace (pgrx needs pg_config + libclang); see its Cargo.toml. # duckdb_improv too (its loadable-extension duckdb must not unify with # storage_sql's bundled one); see its Cargo.toml. exclude = ["crates/pg_improv", "crates/duckdb_improv"] [workspace.package] version = "0.11.0" edition = "2021" rust-version = "1.97" license = "Apache-2.0 OR MIT" authors = ["Greg Burd "] repository = "https://github.com/gburd/improv" [workspace.dependencies] # Core deps shared across crates. Pinned; bump deliberately. thiserror = "2.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" # Property-based testing (Hypothesis engine; imported as `hegel`). hegeltest = "0.50.1" chrono = { version = "0.4", features = ["serde"] } # Verus's standard library (specs/proofs; erased under plain rustc). Pinned # exactly: it must match the Verus release CI verifies with # (0.2026.10.04.426d8b0; see scripts/verify.sh). MIT. vstd = { version = "=0.0.0-2026-10-04-0306" } # Differential dataflow is the mandated computation engine (see AGENT_STEERING.md). # Version pinning is delicate: DD 0.13.7 pulls timely 0.19/timely_communication # 0.18 (a columnar line that won't compile on rustc 1.97); DD 0.12.0 compiles but # has a merge_batcher UB that aborts under debug assertions. DD 0.13.0 + timely # 0.13.0 is the pre-breakage pair the spike validates. differential-dataflow = "=0.13.0" timely = "=0.13.0" # Storage substrate: the embedded SQLite Mentat fork, from crates.io (Mentat # 1.12+ publishes it as `mentatdb`; the library is still `mentat`). Bump # procedure + benchmark: AGENTS.md "CI / storage-backend pin". mentat = { package = "mentatdb", version = "=1.18.0" } # TUI (Phase 2). ratatui = "0.29" crossterm = "0.28" # Server (Phase 3). axum = "0.7" tokio = { version = "1", features = ["rt-multi-thread", "macros", "net"] } tower = "0.5" # Desktop GUI (Phase 5). egui/eframe — see AGENT_GUI_STEERING §9.1. # Pinned exactly: each egui minor breaks API (H4 moved 0.29 -> 0.37). eframe # keeps the glow (OpenGL) renderer it defaulted to before 0.32, so the # headless screenshot runs on Mesa's software GL, plus what 0.29's defaults # had: AccessKit, the clipboard and links. Not wgpu or system fonts (the # NeXT look ships its own). eframe = { version = "=0.37.0", default-features = false, features = [ "accesskit", "clipboard", "default_fonts", "glow", "links", "wayland", "x11", ] } # Its emoji fonts hold the glyphs Arimo lacks (the error marker ⚠). egui = { version = "=0.37.0", features = ["monochrome_emoji_fonts"] } egui_extras = "=0.37.0" # Command-line parsing for the four binaries, and the man pages and shell # completions generated from the same definitions (G1-G3). clap = { version = "4.6.7", features = ["derive", "env"] } clap_mangen = "0.3.3" clap_complete = "4.6.11"