This document is the canonical inventory for the native telemetry data-plane
bundle produced by this repository. A source tag, target row, workflow run,
or locally generated candidate is not evidence that a complete release was
published. A native release exists only when its immutable archives and outer
checksum set are present in the intended release channel and its commit is
reachable from main.
v0.8.6
was published on 2026-09-30 at 02:34:26 UTC from main commit
a24957b211becb0c0af9e85572a9be5a48528061. It bounds the points a metrics
query decodes from storage (TIMELESS_METRICS_PROMQL_MAX_STORAGE_POINTS)
apart from the points it keeps, as described in the
changelog.
The release workflow
built, identity-checked, and install/remove-drilled all four native Linux/macOS
archives, verified the complete outer SHA256SUMS, and published the four
archives plus that checksum file as permanent release assets. All assets were
downloaded and independently verified after publication; every archive passed
sha256sum -c against the published checksum file. See the
release validation record
for the complete post-bump local checklist and archive hashes.
This is the current download channel. Complete published releases also exist
for v0.8.5, v0.8.4, v0.8.3, v0.8.2, v0.8.1, v0.8.0, v0.7.9,
v0.7.8, v0.7.7, v0.7.6, v0.7.5 back through v0.7.1, v0.6.4,
v0.6.2, v0.6.1, v0.6.0, v0.5.0, and v0.4.2.
Documentation on main also covers changes in the
Unreleased changelog. Those changes require a
source build and are not yet part of the published bundle. For instructions
matching a downloaded version exactly, use the documentation at that release's
tag. The compatibility contract records current source
versions and pairing floors separately from publication status.
For history: some tags record source only, because their artifact runs failed
and the fix became the next patch — v0.7.0 (authctl missed the --version
identity contract), v0.6.3 (version bump without refreshed lockfiles under
--locked), and v0.4.0 (the release tool linked Apple's restricted system
SQLite, so both macOS jobs failed). v0.4.1 passed all four package jobs and
the outer checksum gate but predates Release publication; v0.4.2 published
this repository's first GitHub Release, proving the tag→Release path.
The standalone dbhealth extension is intentionally not in this bundle. Build
dbhealth-ext separately from compatible source when it is required.
| Rust target | Platform | Extension file |
|---|---|---|
x86_64-unknown-linux-gnu |
Linux x86-64 GNU | lib/libtimeless_ext.so |
aarch64-unknown-linux-gnu |
Linux AArch64 GNU | lib/libtimeless_ext.so |
x86_64-apple-darwin |
macOS Intel | lib/libtimeless_ext.dylib |
aarch64-apple-darwin |
macOS Apple Silicon | lib/libtimeless_ext.dylib |
Each target must be built and identity-checked natively before the matrix is published. The table is the packager contract, not the current publication result. Windows, Linux musl, and other targets may compile from source but are not claimed as release artifacts. A GNU/Linux artifact also depends on a compatible runtime libc; a target triple alone does not prove it will load in an older container.
The archive is named:
timeless-telemetry-data-plane-<version>-<rust-target>.tar.gz
Its single top-level directory has the same name. These paths are exact and are checked against the packager source:
| Archive path | Contract |
|---|---|
bin/timeless-metrics-api |
Signal-specific metrics HTTP/API owner. |
bin/timeless-logs-api |
Signal-specific logs HTTP/API owner. |
bin/timeless-traces-api |
Signal-specific traces HTTP/API owner. |
bin/timeless-authctl |
Key generation, policy scaffolding, and token minting for opt-in auth. |
lib/libtimeless_ext.so or lib/libtimeless_ext.dylib |
Loadable production telemetry extension for the archive platform. |
install.sh |
Checksum-, identity-, and native-target-verifying installer. |
uninstall.sh |
Ownership-aware binary/artifact remover that preserves data. |
licenses/timeless-libsql-MIT.txt |
Timeless source license. |
SBOM.spdx.json |
SPDX 2.3 inventory derived from both locked Cargo workspaces. |
THIRD_PARTY_LICENSES.txt |
Package/version/license/source notice inventory. |
artifact-manifest.json |
Version, commit, target, build identities, capability document, and payload hashes. |
SHA256SUMS |
Checksums for every payload inside this archive. |
The distribution directory also contains a SHA256SUMS covering all complete
.tar.gz archives. The inner and outer files have different scopes; verify
the outer checksum before extraction and the inner checksum before install.
The bundle does not contain Phoenix, Elixir libraries, dashboards, UI, Canvas, configuration, databases, migration sources, backups, service-manager units, TLS keys, or auth policy. The three Rust binaries are independently usable without those components; their exact routes and environment are in the server API reference.
The current packager accepts exactly one native target and refuses a dirty tree by default:
cargo run --release --manifest-path tools/release-tool/Cargo.toml \
--locked -- \
--target x86_64-unknown-linux-gnu \
--output distIt builds both locked Rust workspaces in release mode, embeds the exact Git
commit and target, executes every server's --version, loads the extension
and reads timeless_capabilities(), produces the SPDX/notice inventories,
normalizes archive ownership/mode/time metadata, and writes both checksum
levels. Before returning success it verifies the inner hashes and identities,
then installs and removes the candidate under an isolated temporary prefix and
proves data/configuration sentinels survive. --allow-dirty is for local
diagnostics only; a public artifact from a dirty source tree is not a release
candidate. --force replaces a local candidate with the same name and must
never be used to mutate an already published release.
Because runtime identity includes the commit, package only after the intended
session is committed on main. Rebuild after any commit that changes source
identity. Before distribution, compare:
- archive checksum against the outer
SHA256SUMS; artifact-manifest.jsonversion/commit/target against the intended source;- all three
--versiondocuments against that manifest; - extension version, build identity, data ABI, SQL-surface version, signal
batches, and required query guards against
timeless_capabilities(); and - the complete manifest file list and SPDX/license notices.
The following Bash commands require curl, tar, and either sha256sum
(Linux) or shasum (macOS). No GitHub account is needed. They select the host's
native archive, download it and the outer SHA256SUMS from the same release,
verify before extraction, and install under a writable prefix. Run in a new
download directory. Set TIMELESS_INSTALL_PREFIX first to choose a different
destination; the default here is $HOME/.local/timeless.
set -euo pipefail
timeless_repo=awksedgreep/timeless-libsql
timeless_releases="https://github.com/$timeless_repo/releases"
timeless_release_url="$(curl --fail --silent --show-error --location --head \
--output /dev/null --write-out '%{url_effective}' "$timeless_releases/latest")"
timeless_tag="${timeless_release_url##*/}"
case "$(uname -s):$(uname -m)" in
Linux:x86_64) timeless_target=x86_64-unknown-linux-gnu ;;
Linux:aarch64|Linux:arm64) timeless_target=aarch64-unknown-linux-gnu ;;
Darwin:x86_64) timeless_target=x86_64-apple-darwin ;;
Darwin:arm64) timeless_target=aarch64-apple-darwin ;;
*) echo 'No published archive for this host; build from source.' >&2; exit 1 ;;
esac
timeless_bundle="timeless-telemetry-data-plane-${timeless_tag#v}-$timeless_target"
timeless_archive="$timeless_bundle.tar.gz"
curl --fail --show-error --location --output "$timeless_archive" \
"$timeless_releases/download/$timeless_tag/$timeless_archive"
curl --fail --show-error --location --output SHA256SUMS \
"$timeless_releases/download/$timeless_tag/SHA256SUMS"
awk -v archive="$timeless_archive" \
'$2 == archive { print; found=1 } END { exit !found }' \
SHA256SUMS > selected.SHA256SUMS
if command -v sha256sum >/dev/null 2>&1; then
sha256sum --check selected.SHA256SUMS
else
shasum -a 256 --check selected.SHA256SUMS
fi
tar -xzf "$timeless_archive"
cd "$timeless_bundle"
./install.sh --prefix "${TIMELESS_INSTALL_PREFIX:-$HOME/.local/timeless}"Use the installed binaries under <prefix>/bin and load
<prefix>/lib/libtimeless_ext (SQLite supplies the platform suffix).
For example, $HOME/.local/timeless/bin/timeless-traces-api --version prints
the installed binary's identity. Database paths are chosen separately when
starting a server; see the launch contract.
The installer re-verifies every inner checksum, parses the manifest identity, rejects a target/host mismatch, executes all three binary identity probes, and copies the complete bundle into the immutable directory:
<prefix>/telemetry-data-plane/<version>-<target>-<commit>/
It then atomically points <prefix>/bin/timeless-{metrics,logs,traces}-api,
<prefix>/bin/timeless-authctl,
the platform extension link under <prefix>/lib, and
<prefix>/telemetry-data-plane/CURRENT at that directory. The default prefix
is /opt/timeless; pass an explicit writable prefix for an unprivileged
install.
Installation does not create, move, inspect, migrate, or remove data, configuration, backups, retained legacy stores, service definitions, or credentials. Configure database paths and policy separately, then perform the capability/readiness preflight from the upgrade guide before admitting producers.
Keep the previous immutable release directory and a coordinated database
backup. Stop producers and the current owner normally, install the new bundle,
preflight it on a copy, start one signal owner, require readiness, and only
then resume producers. Changing the CURRENT symlink does not migrate or
validate a database by itself.
Artifact rollback and data rollback are separate operations. Restoring old symlinks while leaving a database mutated by a newer incompatible owner is not a safe downgrade. Follow the complete upgrade and rollback procedure and preserve both source identities in incident evidence.
Run the uninstall.sh inside the immutable release directory so it can verify
the exact manifest-owned targets:
timeless_prefix="${TIMELESS_INSTALL_PREFIX:-$HOME/.local/timeless}"
release_dir=$(sed -n '1p' "$timeless_prefix/telemetry-data-plane/CURRENT")
"$release_dir/uninstall.sh" --prefix "$timeless_prefix" --keep-artifact--keep-artifact removes only symlinks and CURRENT; omit it to remove that
one immutable release directory too. The script removes a symlink only when
it still points to the release named by its own manifest. It never removes
telemetry databases, WAL/SHM files, backups, legacy rollback sources,
configuration, credentials, or unrelated files.
The archive is executable software, not a data backup. The Rust signal servers expose coordinated, no-overwrite backup routes that flush, maintain, checkpoint, copy through SQLite's online-backup API, verify, fsync, and publish the result. Direct SQLite/libSQL hosts must provide the equivalent ownership and ordering. Restore is offline and operator-controlled. Exact commands and failure rules are in the server API reference and upgrade guide.