repositories / smith
smith
There are many coding harnesses - but this one is fast
owned by admin
Cargo.toml
Raw[workspace]
members = [
"smith",
"smith-core",
"smith-ai",
"smith-ui",
"smith-tui",
"smith-rpc",
"smith-harness",
"smith-cli",
"smith-alloc",
"smith-bench",
"plugins/echo",
"xtask",
]
resolver = "3"
# Bare cargo commands operate on host crates; wasm guest crates build
# only under their target (`cargo x check`, `smith plugin build`).
default-members = [
"smith",
"smith-core",
"smith-ai",
"smith-ui",
"smith-tui",
"smith-rpc",
"smith-harness",
"smith-cli",
"smith-alloc",
"smith-bench",
"xtask",
]
[workspace.package]
edition = "2024"
version = "0.1.0"
license = "Apache-2.0"
# Dependency tiers — law in .system/RULES.md (Dependencies); concrete map lives here.
# vocabulary: ecosystem IR, sanctioned once, facade-exempt.
# engines: one owning crate each, app vocabulary at boundaries, one stack per concern.
# leaf: small utilities, direct use.
# dev: tests and benches only.
# build tools (cargo-machete, cargo-deny, cargo-audit, wasm-tools):
# xtask-installed --locked, never crate deps.
[workspace.dependencies]
# vocabulary
serde = { version = "1.0.228", features = ["derive"] } # Wasmtime requires this serde_core-era minimum
serde_json = { version = "1.0.120", features = ["preserve_order"] } # ureq's shared JSON minimum; Value: Eq
futures = "0.3.31" # Wasmtime's shared futures minimum
thiserror = "2"
tracing = "0.1"
url = "2"
# engines
ureq = { version = "~3.4", default-features = false, features = [
"rustls",
] } # smith-harness, http stack; tilde pin: the chunk-gap timeout uses ureq::unversioned
ciborium-io = { version = "0.2.2", default-features = false } # smith-core, bounded CBOR sink
ciborium-ll = { version = "0.2.2", default-features = false } # smith-core, CBOR session codec
# smith-harness: Wasmtime hosts components; guest wit-bindgen must align with its
# component tooling release, not independently chase latest.
# Wasmi or Wasmer remain alternatives only after component compatibility and
# Smith workload benchmarks justify replacing Wasmtime.
wasmtime = { version = "49.0.2", default-features = false, features = [
"runtime",
"component-model",
"cranelift",
"demangle",
] } # smith-harness, wasm plugin engine
# plugins/echo: guest component bindings aligned with Wasmtime's release set.
wit-bindgen = { version = "=0.62.0", default-features = false, features = ["macros"] }
tracing-subscriber = { version = "0.3", features = ["env-filter"] } # smith-cli, log output
ignore = "0.4.18" # search stack; WalkBuilder::require_git API
ratatui = "0.30" # smith-tui, terminal stack (widgets)
crossterm = "0.29" # smith-tui, terminal stack (backend)
# leaf utilities
crc32fast = "1.3.0" # smith-core, frame checksum; hash API; runtime-dispatched, pure Rust
renamore = { version = "0.3.2", default-features = false } # smith-core, portable atomic no-clobber rename
dirs = "7"
getrandom = { version = "0.4.3", default-features = false } # smith, session-id entropy
fs2 = "0.4.3" # Windows ARM64 requires the winapi 0.3 backend
nix = { version = "0.31.3", features = ["signal"] } # unix, smith-core process handling; libc compatible with Wasmtime
clap = { version = "4", features = ["derive", "env"] }
# dev
insta = "1"
archunit = "0.0.2"
assert_cmd = "2"
predicates = "3"
proptest = "1"
criterion = "0.8"
portable-pty = "0.9.0" # smith-cli, portable observer TUI e2e terminal
gungraun = "0.20.0" # smith-bench, callgrind instruction budgets; runner installed by xtask
# Mutation-testing profile: lean debug build, many rebuilds.
[profile.mutants]
inherits = "test"
debug = "none"
strip = "debuginfo"
[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1
strip = "symbols"
panic = "abort"
# Benches keep symbols: callgrind attributes instructions to functions.
[profile.bench]
inherits = "release"
debug = "line-tables-only"
strip = false
[profile.release.package."*"]
opt-level = 3