sdk.js their pages load is exactly the released file, and how to
host it themselves (plan phases 3 and 18). Examples use version 1.1.0; replace it with the version
in your snippet. in.<BASE_DOMAIN> is the platform’s ingest host.
1. What protects you without any action
The console’s snippet pins one version and its hash:- The browser runs the file only if its SHA-384 matches
integrity. A changed file is blocked, not run (tested in Chromium, Firefox and WebKit in phase 3). - Released files never change.
packages/tracker/releases/<version>/sdk.jsand its manifest entry are immutable: CI fails if either changes, and every release rebuilds the newest file and compares it byte for byte. A new tracker is a new version and a new snippet; nothing updates by itself. - A version with a problem is listed in
packages/tracker/releases/revoked.json(empty today). The console refuses to show a snippet for a revoked version, and the gateway answers 410 for itssdk.js. The file is served withmax-age=31536000, immutableand may be self-hosted, so a page can keep running a revoked release from its cache or its own copy. From release 1.2.0 every event names its release (sv, ../reference/wire-v1.md) and the gateway refuses events of a revoked one with 410 (rejected_revoked_version). Releases 1.0.0 and 1.1.0 do not name themselves, so their events cannot be refused this way; revoking one of them stops only new loads of the file.
2. Check a file by hand
https://github.com/justmert/veristar/blob/main/packages/tracker/releases/manifest.json
(fields integrity and sha384).
3. Check where it was built
Each tracker release is attested by the release workflow (release-tracker.yml). With the GitHub
CLI:
4. Rebuild it yourself
The build is reproducible: the same source and the pinned esbuild (0.28.2) give the same bytes.5. Host it yourself
You may servesdk.js from your own origin. Use the same bytes and keep the same integrity
value. Set data-host-url to the platform’s ingest origin, because the script otherwise sends
events to the origin it was loaded from:
in.<BASE_DOMAIN>. A server-side relay of events is
not supported: it would turn every visitor into one address, which the same-IP checks treat as
suspicious (bot-and-inflation.md).
6. The npm package
The same release is published to npm for bundler users (an ESMinit({ siteId, host }) entry, type
declarations, and the release files under releases/). It is published through npm trusted
publishing, so the package page shows provenance linking it to release-tracker.yml in this
repository, and npm audit signatures in your project checks the registry signatures and
provenance. Your lockfile pins the version.
Status on 2026-11-13: not published. The npm scope (input I9) has not been supplied, and
trusted publishing needs a public repository and working GitHub Actions. The package build exists
(packages/tracker/scripts/pack.mjs) and is tested.