Skip to main content
All Varianz packages are served from pkgs.varianz.io. It proxies only the varianz packages — your other dependencies keep resolving from PyPI, npm, or Maven Central as usual, and no credentials are required. All ecosystems share the release version: 0.2.1 (v0.2.1 for the Go module and Docker tags).

Python

To make the index permanent, put it in requirements.txt:
Packages: varianz (runtime, includes the varianz-scan CLI) and varianz-pytest (pytest plugin — install only where you run tests).
Use --extra-index-url, not --index-url. --index-url replaces PyPI, so every other dependency in the same command stops resolving. Keep the version pinned: placeholder packages named varianz and varianz-pytest exist on public PyPI (they hold the names and contain no SDK), and a pin guarantees you get the real package.
Platforms: wheels only (no sdist) for CPython 3.10–3.15 and PyPy 3.11 on macOS (x86_64, arm64) and Linux glibc/musl (x86_64, aarch64). Unsupported platforms fail with “no matching distribution found” rather than attempting a source build. Docker: wheels are platform-specific, so install inside the image (the Linux wheel) rather than copying a macOS install in. Alternatively, run tests from the host against the service in Docker — the service and the test process only need to reach the same registry.

TypeScript

The Node.js SDK works from TypeScript or plain JavaScript. Point the @varianz scope at pkgs.varianz.io, then install normally:
Scope the registry; do not use --registry. The --registry flag redirects every lookup, so npm asks pkgs.varianz.io for public transitive dependencies and gets a 404. The @varianz:registry= line sends only @varianz/* there.
The matching native binary for your OS/CPU/libc is included in each tarball — no build tools, no postinstall step. Platforms: Node.js 22+ on macOS (arm64, x64) and Linux glibc/musl (x64, arm64). The using-based automatic stage cleanup requires Node 23+. TypeScript config: the decorator API uses TC39 (stage-3) decorators — TypeScript ≥ 5.0 with experimentalDecorators left at its default (false).

Go

The module resolves like any other Go dependency. Native libraries are pre-built and bundled inside the module; platform-specific #cgo directives link the correct one automatically. go mod vendor works normally. CGo is required. The SDK links a Rust native library, so build with CGO_ENABLED=1. In Docker, that rules out the common CGO_ENABLED=0 + distroless/static pattern:
The runtime image can be debian:bookworm-slim or gcr.io/distroless/base-debian12; distroless/static and scratch will not work. Don’t force --platform=$BUILDPLATFORM in the builder stage — CGo must compile for the runtime platform.
If checksum verification fails for this module in your environment (for example, behind a proxy that blocks proxy.golang.org), set GONOSUMDB='go.varianz.io/*' or use GOPRIVATE=go.varianz.io/*.

Java

The Gradle plugin adds the SDK modules, configures the annotation processor, and attaches the varianz-agent to Test and JavaExec tasks automatically.
Plugin options: If your project uses protobuf/gRPC, also add those to annotationProcessor so the processor can resolve proto types in @VPoint signatures.
Production launchers need the agent too. The plugin attaches -javaagent: only to Gradle Test and JavaExec tasks. A deployed service started from an installDist script or java -jar runs without the agent — @VPoint methods execute their original bodies and stages never fire. Add -javaagent:varianz-agent-0.2.1-agent.jar (and, on Java 22+, --enable-native-access=io.varianz.native_loader) to the production launch command. See Java SDK for details.
Maven users: see the Java SDK page for the full pom.xml setup (BOM import, varianz-starter, java-processor with the all classifier, and the varianz-maven-plugin prepare-agent goal). Docker: both glibc images (eclipse-temurin:21-jdk) and Alpine (eclipse-temurin:21-jdk-alpine) work — the JARs bundle glibc and musl native libraries.

Kotlin

Kotlin uses its own KSP-based plugin, io.varianz.sdk.kotlin (not the Java plugin). Four things trip up first-time setup:
The pluginManagement repository block is the same as for Java. Annotation attributes need named arguments in Kotlin: @VPoint(name = "…"), not positional.

After installing

Every SDK is disabled by default — set VARIANZ_ENABLED=true and point it at a registry to activate it. (Java/Kotlin additionally need the varianz-agent attached, which the build plugins handle for test and run tasks.) Local plaintext registries additionally need VARIANZ_INSECURE_ALLOW_PLAINTEXT=true on every connecting process. See Configuration for the full environment-variable reference, and the Quickstart to verify your install end to end.