Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Installation

This guide covers installing the JACS Rust CLI and library.

Requirements

  • Rust: Version 1.97 or later (Edition 2024)
  • Cargo: Included with Rust installation

Verify Rust Version

rustc --version
# Should show rustc 1.97.0 or later

If you need to update Rust:

rustup update stable

Installing the CLI

cargo install jacs-cli

At the 2026-07-09 shipped-artifact snapshot, crates.io resolves jacs-cli 0.11.3; the documentation source is 0.13.0. Check the resolved version instead of assuming the source branch has already been published.

From Homebrew (macOS)

brew tap HumanAssisted/homebrew-jacs
brew install jacs

From Source

git clone https://github.com/HumanAssisted/JACS
cd JACS
cargo install --path jacs-cli

Verify Installation

jacs --help

MCP Server

The MCP server is built into the jacs binary. No separate install step needed.

# Start the MCP server (stdio transport)
JACS_CONFIG="$PWD/jacs.config.json" jacs mcp

Using as a Library

Add JACS to your Cargo.toml:

[dependencies]
jacs = "0.11.3"

0.11.3 is the published crate recorded in release/shipped-artifacts.json; source checkout 0.13.0 is not installable from crates.io until its release completes.

With Optional Features

JACS supports several optional features for observability and integrations:

[dependencies]
# Basic library usage
jacs = "0.11.3"

# With OpenTelemetry logging
jacs = { version = "0.11.3", features = ["otlp-logs"] }

# With OpenTelemetry metrics
jacs = { version = "0.11.3", features = ["otlp-metrics"] }

# With OpenTelemetry tracing
jacs = { version = "0.11.3", features = ["otlp-tracing"] }

# With all observability features
jacs = { version = "0.11.3", features = ["otlp-logs", "otlp-metrics", "otlp-tracing"] }

Available Features

FeatureDescription
cli(Deprecated -- use cargo install jacs-cli instead)
otlp-logsOpenTelemetry Protocol logging backend
otlp-metricsOpenTelemetry Protocol metrics backend
otlp-tracingOpenTelemetry Protocol distributed tracing
sqliteLightweight sync SQLite backend (default)
sqlx-sqliteAsync SQLite backend via sqlx (requires tokio)
s3AWS S3 storage; opt-in because it adds cloud HTTP/XML dependencies
agreementsAgreement lifecycle support
a2aAgent-to-Agent protocol support
attestationAttestation support

Platform Support

The Rust crate and the CLI have different distribution models. The jacs crate is source compiled by Cargo; a successful build depends on the Rust target, linker, and system dependencies available to the consumer. The CLI is also published as platform archives.

Observed public artifacts on 2026-07-09:

SurfaceVersionPrebuilt targetsTest evidence
Rust library cratejacs 0.11.3None; crates.io distributes sourceFull source suites run in release CI on Ubuntu and macOS. This does not imply every Rust-supported target.
CLI cratejacs-cli 0.11.3cargo install builds from sourceSource compilation follows the consumer's Rust target and native dependencies.
CLI archivesjacs-cli 0.11.3macOS arm64/x86_64; glibc Linux arm64/x86_64; Windows x86_64The release job builds each target and executes jacs --version on its runner. Full feature suites are not run separately on every archive target.
Browser WASMsource 0.13.0 onlyNo published @jacs/wasm packageSource CI runs Firefox wasm-pack tests and a Chromium/Playwright package smoke on Ubuntu.

There is no basis for a blanket “full support” claim across operating systems. In particular, the Windows x86_64 CLI archive does not imply Windows wheels or native modules for Python, Node, or Go. See Deployment Compatibility for the exact cross-language, architecture, and libc matrix.

WebAssembly Notes

The source-built jacs-wasm package supports both Ed25519 and post-quantum pq2025 signing and verification. The previous claim that WebAssembly lacked post-quantum support was incorrect.

The WASM surface remains browser-specific and omits native filesystem storage, DNS resolution, MCP, and the CLI. It uses encrypted browser persistence, and its private keys live in JavaScript-visible WebAssembly memory. Most importantly for installation, @jacs/wasm was not published to npm at the shipped-artifact observation date; build it from source rather than running the unqualified npm install command until a registry version exists.

Configuration

After installation, initialize JACS:

# Create configuration and agent in one step
jacs init

This creates:

  • ./jacs.config.json - Configuration file
  • Cryptographic keys for your agent
  • Initial agent document

Manual Configuration

Alternatively, create configuration and agent separately:

# Create configuration only
jacs config create

# Create agent with keys
jacs agent create --create-keys true

Environment Variables

JACS respects the following environment variables:

VariableDescriptionDefault
JACS_CONFIG_PATHPath to configuration file./jacs.config.json
JACS_USE_SECURITYEnable/disable security featurestrue
JACS_DATA_DIRECTORYDirectory for document storage./jacs_data
JACS_KEY_DIRECTORYDirectory for cryptographic keys./jacs_keys
JACS_DEFAULT_STORAGEStorage backend (fs, memory)fs
JACS_AGENT_KEY_ALGORITHMKey algorithm (ed25519, pq2025; legacy alias ring-Ed25519)pq2025
JACS_ALLOW_LEGACY_SIGNATURE_CONTENTExplicitly allow payload-only verification of legacy v1 signatures; signer/version/time metadata stays untrusted and emptyfalse
JACS_REJECT_LEGACY_SIGNATURE_CONTENTForce legacy-v1 rejection even if compatibility was requestedfalse
JACS_PAYLOAD_MAX_REPLAY_SECONDSFreshness/nonce retention window for HTTP/RPC payload proofs300
JACS_REQUIRE_SHARED_REPLAY_STOREFail closed unless an application-installed ReplayStore is shared across replicasfalse

Troubleshooting

Build Errors

"edition 2024 is required" Update Rust to version 1.97 or later:

rustup update stable

Missing dependencies on Linux Install build essentials:

# Debian/Ubuntu
sudo apt-get install build-essential pkg-config libssl-dev

# Fedora
sudo dnf install gcc openssl-devel

Runtime Errors

"Configuration file not found" Run jacs init or set JACS_CONFIG_PATH environment variable.

"Key directory does not exist" Create the key directory or run jacs init:

mkdir -p ./jacs_keys

"Permission denied" Ensure you have write permissions to the data and key directories.

Next Steps