Skip to content

What Evalwright is ​

Evalwright versions your LLM prompts and settles, by measurement, which version to run. You edit and benchmark in the app, then deploy a version to an environment of its project — development, staging and production to start with, and any your project adds. Your backend asks the SDK for a prompt, by its id, with a key for one of those environments, and runs the result with your own model.

prompts.resolve() returns the text deployed in the key's environment with its {{variables}} bound — the same text the version's benchmark ran. That is all it does — no LLM is called on this path, so it never touches your provider, your keys or your tokens.

The point: deploying a new version in the app changes what that environment runs, with no deploy on your side.

Install ​

bash
npm install @evalwright/sdk

Node 18+. No runtime dependencies — the SDK uses the platform's own fetch.

Ten lines ​

ts
import { EvalwrightClient } from "@evalwright/sdk";

const client = new EvalwrightClient({
  apiKey: process.env.EVALWRIGHT_API_KEY!,
  baseUrl: process.env.EVALWRIGHT_BASE_URL!,
});

// The prompt's id, from its page in the app.
const { prompt } = await client.prompts.resolve("6a1f0c3e9b2d4a7f8e5c1b90", {
  vars: { customerName: "Ada", tone: "warm" },
});

const reply = await myModel.complete({ system: prompt, user: message }); // your provider, your keys

Next: Quick start.

Released under the MIT licence.