This doc covers installing a published Tacit toolchain archive and starting an external project. For contributor source builds, see the bottom section.
The first export targets Linux x86_64 only. The compiler binary links statically against LLVM 19 so no LLVM runtime is required on the target host.
Other platforms (macOS, ARM Linux, Windows) are not built or tested by the release script in this stage. Each adds its own static-LLVM toolchain and prebuilt-archive story and is out of scope until later.
Runtime dependencies (dynamically linked on the target host): libc,
libstdc++, libgcc_s, libm, libz, libzstd, libffi. All are present
in a default Debian-bookworm / Ubuntu-22.04+ install. There is no LLVM runtime
dependency.
Published GitHub release artifacts are built on Ubuntu 22.04, which sets the
glibc compatibility floor at glibc 2.35. In practice that means the
published tacit binary should run on Debian/Ubuntu hosts with glibc 2.35 or
newer, but not on older releases whose libc.so.6 is below that baseline.
Tacit programs themselves have no network access (no sockets, HTTP, TCP, or
UDP) at the language or stdlib level. The bundled tacit.io package provides
only stdin/stdout/stderr byte I/O. Embedders may add network capabilities via
host imports (see ADR 0088 / tacit interface), but no such capability ships
with the toolchain itself.
A complete Tacit toolchain release is a single directory:
tacit-<version>-x86_64-unknown-linux-gnu/
bin/tacit
share/tacit/
toolchain-release.json
primer/tacit-lite.md
primer/tacit-lite.toml
workflow/agent-workflow.md
stdlib-src/tacit/{core,bytes,array,text,collections,io}/
stdlib-cache/objects/{defs,units,sidecars}/
stdlib-cache/packages/<package-hash>/
templates/executable/
templates/library/
bin/tacit looks for share/tacit/ at install time via two rules:
- If
TACIT_TOOLCHAIN_ASSET_ROOTis set, it must point at theshare/tacit/directory. - Otherwise the binary looks for
../share/tacit/relative to the resolvedbin/tacitpath.
If you keep the archive layout intact when installing, no environment variable is needed.
Download tacit-<version>-x86_64-unknown-linux-gnu.tar.gz and its
.sha256 companion. Then:
sha256sum -c tacit-<version>-x86_64-unknown-linux-gnu.sha256
tar -xzf tacit-<version>-x86_64-unknown-linux-gnu.tar.gz
sudo cp -r tacit-<version>-x86_64-unknown-linux-gnu/bin/tacit /usr/local/bin/
sudo cp -r tacit-<version>-x86_64-unknown-linux-gnu/share/tacit /usr/local/share/
tacit version --format jsonPer-user install (no root) into ~/.local:
mkdir -p ~/.local/bin ~/.local/share
cp tacit-<version>-x86_64-unknown-linux-gnu/bin/tacit ~/.local/bin/
cp -r tacit-<version>-x86_64-unknown-linux-gnu/share/tacit ~/.local/share/
~/.local/bin/tacit version --format jsontacit version --format json should report
installed_manifest.status: "matched". Any other status means the
share/tacit/toolchain-release.json next to your binary is missing, edited,
or from a different toolchain — re-extract the archive.
In a directory outside of any other Tacit repository:
tacit init my-project
cd my-project
tacit check .
tacit test .
tacit compile .
./target/release/... # see derived/bin under .tacit/derivedtacit init writes tacit-toolchain.toml pinning your project to this
toolchain's version, release hash, primer hash, and bundled-stdlib package
hashes. Package-aware commands (check, compile, test, interface,
lock) verify that pin against the installed toolchain on every run. A
mismatch is a hard error with a toolchain-pin-* diagnostic; a missing pin is
a warning.
For a library project that publishes hash-pinned dependencies on the bundled stdlib:
tacit init my-lib --template library --with-stdlib
cd my-lib
tacit interface . --emit-libraryTo regenerate the project lockfile after editing tacit.toml dependencies:
tacit lockAgents and humans can discover the language primer and the workflow doc without leaving the toolchain:
tacit primer # prints the primer markdown
tacit primer --format json # primer id/version/hash/tokens
tacit primer --check primer.md # verify a copy matches the installed bytes
cat $(dirname $(which tacit))/../share/tacit/workflow/agent-workflow.mdGenerated AGENTS.md and CLAUDE.md files inside a Tacit project instruct
agents to fetch these via the toolchain rather than copying prose from another
source — the bytes are pinned per ADR 0090.
Source builds are not a supported release channel but are the contributor workflow. Requirements:
- Rust toolchain (stable; see
rust-toolchain.tomlif present) - LLVM 19 development install
- Debian bookworm / Ubuntu 24.04+:
sudo apt install llvm-19-dev libpolly-19-dev - Ubuntu 22.04: add apt.llvm.org's Jammy repo for LLVM 19, then install
llvm-19-dev libpolly-19-dev
- Debian bookworm / Ubuntu 24.04+:
- A C linker on
PATH(cc,clang, orgcc) andar/llvm-ar
Then:
cargo build --features tacit-cli/llvm19-1 -p tacit-cli
./target/debug/tacit version --format jsonTo produce a release archive identical to the published one:
scripts/build-release.shThe script verifies that the binary links statically against LLVM 19 (no
libLLVM*.so in ldd), checks that the binary does not require glibc newer
than 2.35, assembles the share/tacit/ tree, regenerates
templates/executable/ and templates/library/ by invoking the freshly
built tacit init, and writes release/tacit-<version>-x86_64-unknown-linux-gnu.tar.gz
plus .sha256 and SHA256SUMS files.
Note that local source builds inherit the host's glibc baseline. If you build Tacit on a newer distro than Ubuntu 22.04, your locally produced binary may require a newer glibc than the published GitHub release artifact.