Install

delhi is a single self-contained binary. Pick whichever route asks least of you.

From crates.io

Needs a Rust toolchain (rustup.rs), and compiles in a couple of minutes. Installs into ~/.cargo/bin, which rustup already puts on your PATH.

cargo install delhi            # install
cargo install delhi --force    # update to the newest release

--force is how you update: without it, cargo declines to overwrite an existing install.

A prebuilt binary

No Rust needed. Download the archive for your platform from Releases, unpack it, and put delhi somewhere on your PATH. Each archive carries the binary, the examples, the Python wrapper, and both licences, with SHA256SUMS published beside it.

Or let a script do it — it verifies the checksum and unpacks to ~/.local/bin (%LOCALAPPDATA%\delhi\bin on Windows). Neither script edits your shell profile; each reports whether the directory is on PATH and leaves the change to you.

curl -fsSL https://raw.githubusercontent.com/vasanthsarathy/delhi/master/install.sh | sh
irm https://raw.githubusercontent.com/vasanthsarathy/delhi/master/install.ps1 | iex

From source

git clone https://github.com/vasanthsarathy/delhi && cd delhi
cargo install --path crates/delhi

Check it worked

delhi --version
delhi --help

If you installed a prebuilt archive, the examples are beside the binary. If you installed with cargo there is no examples/ directory — but the ten examples are compiled into the binary, so delhi gui can still open them from anywhere.

As a library

The semantics and the language are separate crates, usable without the CLI:

[dependencies]
delhi-lang = "0.1"     # parse, check and query .delhi source
delhi-mb  = "0.1"      # the model checker itself

All the library crates have zero external dependencies. See docs.rs/delhi-lang.

Minimum Rust version

1.78, checked in CI. That is a promise about using delhi — building its own test suite wants something newer, because a test-only dependency does.

A note on version numbers

crates.io history starts at 0.1.4. Versions before that exist as GitHub releases and git tags, but were never published: the binary package was named delhi-cli until 0.1.4, and delhi-gui could not be packaged at all — it reached outside its own directory for the bundled examples, which cargo will not carry into a tarball.

So cargo install delhi@0.1.2 finds nothing, while the prebuilt archives on Releases go back to 0.1.0. From 0.1.4 onward the git tag and the published crate are the same thing.