Skip to content

Installation

Install Containment Chamber from source, binary, or container image

Containment Chamber ships as a single statically-linked binary with no runtime dependencies. Choose the installation method that fits your workflow.

Before you configure the server, decide whether you need the stateless Web3Signer-compatible path or the state-backed control-plane path:

ModeConfigure signer_state?Use it for
Stateless Web3Signer-compatibleNoDrop-in signing with filesystem keys, Web3Signer public-key discovery, SQLite/PostgreSQL/DynamoDB anti-slashing, and optional static_auth from config (named policies, an anonymous binding, and static client tokens).
State-backedYesRuntime auth policies and tokens, operator seal/unseal state, DynamoDB-backed key generation and persistent import/lifecycle, and cross-replica control-plane refresh.
  • Build from source: Rust 1.96+ and just (command runner)
  • Docker: Any OCI-compatible runtime (Docker, Podman)
  • Binary download: Linux amd64 or arm64

Choose one installation method:

Terminal window
git clone https://github.com/unforeseen-consequences/containment-chamber
cd containment-chamber
# Development build (fast compilation)
just build-dev
# Production build (optimized)
just build-maxperf

The resulting binary is at:

  • Development: target/debug/containment-chamber
  • Production: target/maxperf/containment-chamber

Install directly from the repository using cargo install:

Terminal window
cargo install --git https://github.com/unforeseen-consequences/containment-chamber --bin containment-chamber

This compiles from source and installs to ~/.cargo/bin/. Requires Rust 1.96+.

Confirm the binary is working:

Terminal window
containment-chamber --version

Generate shell completion scripts for tab-completion of commands and flags:

Terminal window
containment-chamber completions bash > /etc/bash_completion.d/containment-chamber

You should see the version number printed to the console. Head to the Quick Start to configure and run your first signer instance.