Reference
Install
The canonical install command for every supported language. This is the only page that lists install commands — every other doc, blog, and README links here.
Do not install bare evalguard
There are two unrelated third-party packages named evalguard on npm and PyPI. They are not affiliated with EvalGuard.
npm install evalguardresolves to an unrelated third-party package. Not us.pip install evalguardresolves to an unrelated third-party package. Not us.
Always use the canonical names below — @evalguard/sdk on npm, evalguardai on PyPI, @evalguard/cli for the CLI. These are the only packages published by EvalGuard. Until registry naming is fully resolved, this banner stays.
Other registries (NuGet, crates.io, RubyGems, Packagist): we do not yet publish SDKs there. If you find a package using the EvalGuard name on any of those registries, it is not from us — please report it to security@evalguard.ai.
Canonical install commands
One canonical package per language. Each ships with the same authoritative EvalGuard client — pick the row that matches your stack.
TypeScript / JavaScript
@evalguard/sdk
npm install @evalguard/sdkImport
import { EvalGuard } from "@evalguard/sdk";Python
evalguardai
pip install evalguardaiImport
from evalguard import EvalGuardClientCLI (Node.js)
@evalguard/cli
npm install -g @evalguard/cliImport
evalguard --versionGo
github.com/EvalGuardAi/evalguard-go
go get github.com/EvalGuardAi/evalguard-go@latestImport
import evalguard "github.com/EvalGuardAi/evalguard-go"Verify cryptographic provenance
Every @evalguard/* npm release carries the registry signature npm applies to all published packages, so a tampered tarball fails npm audit signatures. We do notyet publish Sigstore provenance attestations, so that command cannot tell our package apart from an impersonator's — an unrelated package is signed by the registry too. Until provenance ships, the control that distinguishes ours is the exact coordinate: the canonical names in the table above, and nothing else.
npm install @evalguard/sdk
npm audit signatures
# Reports the whole dependency tree, not one package — e.g.
# 46 packages have verified registry signatures
# 6 packages have verified attestations
# The attested ones are third-party dependencies. No @evalguard/*
# package is attested today; verify the name, not the badge.Deprecated aliases
These names point at deprecation-shim packages we publish to keep old install commands working — they re-export the canonical and emit a deprecation warning. Migrate to the canonical name on the right; the shim slot may be sunsetted in a future release.
| Deprecated name | Registry | → Canonical |
|---|---|---|
| evalguardai-sdk | npm | @evalguard/sdk |
| evalguard-sdk | npm (unscoped) | @evalguard/sdk |
| @evalguardai/sdk | npm | @evalguard/sdk |
| @evalguardai/cli | npm | @evalguard/cli |
| evalguard-sdk | PyPI | evalguardai |
| evalguard-python | PyPI | evalguardai |
Java SDK — on Maven Central
The core Java client and the LangChain4j content filter compile and ship in the published build in packages/java-sdk. The LangChain4j chat-model listener and the Spring AI adapters (auto-configuration / interceptor / guardrail advisor) are experimental and currently excluded from the published build — they were written against API versions that have since drifted and are being reconciled before they re-enter the build. Published to Maven Central — group ID ai.evalguard, artifact evalguard-sdk, latest 1.1.0 (via the Sonatype Central Portal; legacy OSSRH was sunset 2025-06-30). Add the coordinate to your pom.xml/Gradle build, or vendor the source from packages/java-sdk.
Targets parity with Arize AX's Java story (LangChain4j + Spring AI); the Spring AI path lands once the drifted adapters are reconciled. Closes the JVM gap surfaced in our 2026-05-22 competitive audit.
Need another language?
C# / .NET, Ruby, Rust, and PHP SDKs are not published yet. The REST API works from any language — see the API reference. If you need a native SDK, email support@evalguard.ai and we'll publish on request — typical turnaround is under a week for languages where we already have an internal client.
Why these names
The product is called EvalGuard. The domain is evalguard.ai. Industry convention (e.g. openai, @anthropic-ai/sdk, stripe, @vercel/*) keeps package names brand-only — they don't repeat the TLD in the package handle. The canonical install paths above follow that convention. The Java ai.evalguard groupId is the standard Maven reverse-DNS pattern and is unrelated to the npm/PyPI brand handle.
Pin the canonical names in your lockfile and CI. If a build pulls a bare evalguard from npm or PyPI, it is not an EvalGuard package — fail the build and report it to security@evalguard.ai.
Troubleshooting
The failures we see most often after install, and the one-line fix for each.
| Symptom | Cause | Fix |
|---|---|---|
Types/exports missing; EvalGuard not found | Installed the bare evalguard impersonator instead of the scoped package | Reinstall the canonical name: @evalguard/sdk (npm), evalguardai (PyPI) |
ModuleNotFoundError: No module named 'evalguard' | The pip package is evalguardai, but the import name is evalguard | pip install evalguardai, then from evalguard import EvalGuardClient |
SDK throws EvalGuard: baseUrl must use HTTPS on start | A non-local baseUrl was passed over http:// | Use https:// (only localhost/127.0.0.1 may use HTTP), or omit baseUrl to use the default |
CLI: “No EvalGuard API key found.” The @evalguard/cli reads its key from the EVALGUARD_API_KEY environment variable or from ~/.evalguard/config.json (written by evalguard login). If neither is set, project-scoped commands fail with:
# Either log in once (persists to ~/.evalguard/config.json, mode 0600):
evalguard login --key eg_live_...
# …or export the key for the current shell:
export EVALGUARD_API_KEY=eg_live_...
# Error when neither is set:
# No EvalGuard API key found. Run `evalguard login --key <key>` or set EVALGUARD_API_KEY.The SDK constructor takes the key as an explicit apiKey argument (it does not read the environment for you) — EVALGUARD_API_KEY is a CLI convenience. Pass it yourself: new EvalGuard({ apiKey: process.env.EVALGUARD_API_KEY! }).