SDKs

Typed SDKs for your product model.

Add a field to Customer, rename an Order status, expose a workflow, grant an agent action, or install a project-published capability surface. Every language client picks it up from the same canonical backbone. Manifest-versioned for compatibility — no silent drift.

Side by side

Same product operation. Five languages.

Switching language switches every code block on this page — the Customer, Order, workflow, and realtime operation is identical, only the syntax differs.

import { createClient } from "@vadyl/sdk";

const vadyl = createClient({
  apiUrl:  "https://api.vadyl.app/v1",
  token:   process.env.VADYL_TOKEN!,
  tenant:  "acme",
  project: "billing",
});
const recent = await vadyl.orders.list({
  filter:   { status: { in: ["paid", "fulfilled"] }, total: { gt: 100 } },
  sort:     [{ field: "createdAt", direction: "desc" }],
  pageSize: 50,
  include:  ["customer"],
});
const customer = await vadyl.customers.create(
  { email: "ada@example.com", name: "Ada Lovelace" },
  { idempotencyKey: `signup:${session.id}` },
);
const sub = vadyl.orders.subscribe({
  filter: { status: { eq: "paid" } },
});

for await (const evt of sub.events()) {
  const order = await vadyl.orders.read(evt.entityId);
  console.log("paid:", order);
}

One product model. Every language.

Every Vadyl SDK is a projection from the product model and canonical contract backbone — the same graph that drives REST, GraphQL, gRPC, MCP, and OpenAPI. The seven-dimensional version taxonomy is embedded in every generated SDK as a manifest. Mismatches fail closed at runtime with a typed IncompatibleGeneratedSdkError.

Installed surfaces

Project-published capabilities get typed clients too

When a consumer project installs a provider surface, SDKs project the installed operations, commands, workflows, agent skills, analytics, events, and resources as typed namespaces with version pins and grant-aware errors.

const email = vadyl.surfaces.EmailService;

await email.email.send({
  to: user.email,
  template: "welcome",
  data: { userId: user.id },
});

const usage = await vadyl.surfaces.consumption.query({
  surface: "EmailService",
  groupBy: ["operation", "consumerProject"],
});

Need an SDK that isn't here yet?

Custom SDK generation is built into Vadyl. New language emitters project the same product model and contract backbone — and we're shipping more.