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

Deployment Compatibility

JACS has several distribution surfaces, and they do not currently ship at the same version or for the same targets. This page distinguishes four different claims:

  • Source-compilable: the repository has a build path for the target. The consumer may still need Rust, a C toolchain, system headers, and network access to dependency registries.
  • Prebuilt: the public registry or GitHub release contained a native artifact for the target at the observation date.
  • CI-tested: project CI compiled or tested source on that runner. A cross-compiled binary is only a build result, not a runtime test.
  • Runtime-smoked: CI executed or imported the packaged artifact on that target. This is narrower than full feature testing.

The shipped rows below come from release/shipped-artifacts.json, observed 2026-09-10 against source 0.13.0 at 743df757. Registry contents can change; run python3 scripts/check-release-matrix.py --online or inspect the registry before choosing a deployment target.

What users could install at the review baseline

SurfaceShipped version/statusPrebuilt targetsCI/runtime evidence and limits
Rust library (jacs)crates.io 0.13.0; publishedsource only; no prebuilt library artifactFull source suites run on Ubuntu and macOS release runners; other Rust targets are not implied. The four storage crates (jacs-duckdb, jacs-redb, jacs-postgresql 0.1.20; jacs-surrealdb 0.1.21) are published against jacs 0.13.0.
CLI (jacs-cli)crates.io and GitHub Releases 0.13.0; publishedmacOS arm64; macOS x86_64; Linux x86_64 glibc; Linux arm64 glibc; Windows x86_64Release jobs build each listed target, run a launch smoke, and install the staged archive through the Python and Node CLI installers (sign/verify smoke on Unix only: the trust model refuses to create key files on Windows). cargo install remains a source build.
Python (jacs)PyPI 0.13.0; publishedmacOS arm64; macOS x86_64; Linux x86_64 manylinux_2_28; Linux arm64 manylinux_2_28; Linux x86_64 musllinuxglibc wheels are built inside the pinned manylinux_2_28 images; release candidate smokes install and sign/verify on Ubuntu x86_64 and arm64, macOS x86_64 and arm64, and Alpine x86_64. No Windows or arm64 musllinux wheel is recorded.
Node (@hai.ai/jacs)npm 0.10.1; published behind sourcemacOS arm64; macOS x86_64; Linux x86_64 glibc; Linux x86_64 musl; Linux arm64 glibcSource CI runtime-smokes Node 20 on Ubuntu x86_64. Other listed native binaries are not runtime-smoked here.
Browser (@jacs/wasm)npm unpublished; source only not publishedbrowser source build; release package unavailableSource CI builds wasm32 and runs Firefox plus Chromium/Playwright tests; Safari and Windows-hosted browsers are unverified.
Go (github.com/HumanAssisted/JACS/jacsgo)Go module proxy v0.13.0; publishedmacOS arm64; macOS x86_64; Linux x86_64 glibc; Linux arm64 glibcRelease publishes libjacsgo for each listed target with SHA-256 digests and GitHub attestations; consumer smokes passed on Ubuntu x86_64 and arm64 and macOS x86_64. The macOS arm64 consumer smoke failed only because its Go 1.21 toolchain cannot run on macOS 26 (fixed for the next release).

Declared toolchain baselines

SurfaceDeclared or tested baseline
Rust library, CLI, and WASM sourceRust 1.97; Edition 2024
PythonPython 3.10–3.14 is declared by pyproject.toml; the source release workflow smoke-tests the exact wheel candidate on each version before publication.
Nodenpm 0.10.1 does not declare an engines.node constraint. Current source and release workflows use Node 20, so the previous generic “Node 18+” statement was not a tested support guarantee.
Gogo.mod declares Go 1.21; CGo and a platform C toolchain are also required

Platform decisions

Windows

The observed Windows prebuilt is the x86_64 CLI only. Do not infer Windows Python or Node support from the CLI artifact: PyPI 0.13.0 has no Windows wheel, npm 0.10.1 has no Windows .node binary, and the Go bindings have no Windows CGo linker directive or native asset. The browser/WASM source may be portable at the WebAssembly level, but no Windows browser runtime lane was recorded.

Linux libc and architecture

“Linux” is not one ABI:

  • Python glibc wheels are tagged manylinux_2_28; systems with glibc older than 2.28 cannot use those wheels. The observed musllinux wheel is x86_64 only.
  • Node 0.10.1 ships x86_64 glibc and musl binaries, plus an arm64 glibc binary. It does not ship arm64 musl.
  • CLI 0.13.0 ships glibc Linux x86_64 and arm64 archives. No musl CLI archive is recorded in the shipped inventory.
  • A source build is a separate claim. It may work on additional targets when the required compiler, linker, libc headers, Rust dependencies, and system libraries are available, but that is not prebuilt support.

Containers, Lambda, and serverless platforms

A container orchestrator does not remove the native ABI requirement. Match the image architecture and libc to an actual wheel, .node file, CLI archive, or Go shared library. For example, the observed Python musllinux wheel supports an x86_64 Alpine-style image, while its glibc wheels require glibc 2.28 or newer.

This x86_64 example deliberately requires a prebuilt musllinux wheel instead of silently falling back to an undocumented source build:

FROM --platform=linux/amd64 python:3.12-alpine
RUN python -m pip install --only-binary=:all: "jacs==0.13.0"
ENV JACS_KEYCHAIN_BACKEND=disabled
WORKDIR /app
COPY . /app
CMD ["python", "main.py"]

AWS Lambda, Vercel, Cloudflare Workers, Deno, and Bun do not have dedicated runtime-smoke lanes in the recorded matrix. Treat them as unverified. For Lambda or another native serverless runtime, build and test a layer against the exact runtime image and architecture; do not assume a generic Linux artifact is ABI-compatible. Browser-only runtimes require the WASM package, which was not published at the observation date.

For headless native environments, set JACS_KEYCHAIN_BACKEND=disabled and supply key passwords through the deployment platform's secret mechanism. Do not bake passwords or private keys into an image.

Browser/WASM capability limits

The source-built WASM surface can create both Ed25519 and pq2025 identities, sign and verify JSON, and use encrypted browser persistence. It does not expose native filesystem storage, DNS resolution, MCP, or the native CLI. Browser WebAssembly memory is JavaScript-visible; source compatibility is not a claim of hardware-backed key isolation. See the WASM package security caveats before using it for long-lived signing keys.

Building from source

Source builds require the full repository because the language bindings use path dependencies on the Rust crates:

git clone https://github.com/HumanAssisted/JACS.git
cd JACS

# Python development build
python -m pip install maturin
(cd jacspy && maturin develop --release)

# Node development build
(cd jacsnpm && npm ci && npm run build)

# Go native library + module
make -C jacsgo build

# Browser package
make build-wasm

Rust 1.97 or newer is required. Native language bindings also require their language toolchain, a C linker, and platform system dependencies. A successful source build on one machine does not add that target to the published-artifact matrix.