A Cargo-style CLI for SystemVerilog
kiln serves as a bridge across the open-source SystemVerilog toolchain. We model
cargo: one command to check, build, test, format, and document SystemVerilog
projects instead of Makefiles, shell scripts, and per-tool configs scattered around projects.
# macOS and Linux (no Rust required)
curl -fsSL https://raw.githubusercontent.com/tejasprabhune/kiln/main/install.sh | sh
# or via cargo
cargo install kiln-sv
# create and enter a new project
kiln new counter
cd counter
# check with slang, build with verilator
kiln check
kiln build
# write a testbench under tests/ that prints "PASS"
kiln test
kiln test --trace # dumps FST waveforms
kiln wave # opens the most recent one in surfer
# format in place via verible
kiln fmt
kiln fmt --check # exits non-zero if anything changes (good for CI)
# dependencies via bender
kiln add axi --git https://github.com/pulp-platform/axi.git --version 0.39
kiln tree
kiln does not reimplement a parser, simulator, or formatter. It invokes
existing tools as subprocesses and translates their output into consistent diagnostics.
| Tool | Used by |
|---|---|
| Slang | kiln check, kiln doc, kiln lsp |
| Verilator | kiln build, kiln run, kiln test |
| Bender | kiln add, kiln update, kiln tree |
| Verible | kiln fmt |
| Surfer | kiln wave |
Each command tells you clearly if a required tool is missing and how to install it.
kiln install-tools automates the whole setup on macOS and Linux.
A Kiln.toml at the project root describes the design: source globs,
top module, simulation profile (debug or release), lint severity overrides,
and dependencies. There's no build system DSL to learn, just a TOML file.
[package]
name = "counter"
version = "0.1.0"
[design]
sources = ["src/**/*.sv"]
top = "counter"
[lint]
always-comb-blocking = "error"
Builds are content-hash cached under target/kiln/. A recompile only
happens when source files, defines, or the build profile actually change.
Pre-0.1.0. The core workflow — check, build, test, format, wave, deps, doc, LSP — is
implemented and tested. The crate names on crates.io
use the prefix kiln-sv since kiln was already taken.
Source is on GitHub under MIT or Apache-2.0.