Wacht Bench is live. AI-assisted dev for Wacht.read the guide →

Ship product, not plumbing.The infrastructure layer for AI-native SaaS.

Identity, organizations, machine auth, webhooks, notifications, and agents. One model under all of them. Wire it in once.

10,000 MAU free·SAML on every plan·no credit card
~/your-app · cursor / claude code@wacht/bench
[01]primitives

The stack you'd
otherwise stitch yourself.

Identity, organizations, machine auth, webhooks, notifications, and agents. Built as one product, not six vendors stitched together.

[01]/identity

Identity

wacht auth.signIn()

Password, magic link, passkey, MFA, OAuth across 25+ providers, SAML SSO. RBAC, session management, and hosted UI included.

passwordlessSAML on every plan
[02]/orgs

Organizations

wacht orgs.create()

The B2B model you would have built. Workspaces, invitations, roles, domain auto-join, per-org config. Already there.

multi-tenantper-org config
[03]/machine-auth

Machine auth

wacht api.issueKey()

Issue API keys, OAuth apps, and machine credentials from one surface. Gate by scope, tenant, and rate limit before traffic ever reaches your API.

scoped tokensedge rate limits
[04]/webhooks

Webhooks

wacht webhooks.publish()

Every product event streams to your warehouse, SIEM, or customer webhook with at-least-once delivery, signed payloads, retries, and replay.

at-least-oncesigned + replayable
[05]/notifications

Notifications

wacht notify.send()

Email, in-app, and realtime channels in one API. Templated payloads, per-user preferences, delivery tracking. No notification stack to run.

multi-channeltemplated
[06]/agents

Agent runtime

wacht agents.run()

Each agent runs in its own sandbox. Bring your own LLM keys and storage. Approvals and hooks on every tool call.

isolated · BYOKapprovals + hooks
[02]built for what you’re building

Same users, same orgs, every product.

Wire identity in once. The rest speaks the same user and org model. No glue, no stitching.

01identity

Identity, native to your product.

Drop in sign-in, sign-up, and account UI. Three lines to wire it in. Email, social, passkeys, MFA, and recovery already work. Your brand throughout, not ours.

/accounts.yourdomain.com / sign-in
Sign in
welcome back — continue with email
Email
Continue
or
G
GH
02agent runtime

Agents that actually ship.

Agents run in their own sandbox. You bring the keys and the storage. Approvals fire on every tool call.

/agent.wacht.dev / exec_8f3a
isolated · BYOK
model
gpt-5-1m (BYOK)
storage
BYO postgres
sandbox
firecracker
03b2b

B2B tenancy, modeled correctly.

The B2B model you would have built. Organizations, workspaces, memberships, invitations, domain auto-join. Roles and scopes enforced everywhere they need to be.

/console / organizations
3 active
Acme Inc.
24 members · role admin
Switch
04events

Events your customers can trust.

Every product event streams to your warehouse, SIEM, or webhook with at-least-once delivery, retries, and signed payloads. Idempotency and replay built in.

/events / live tail
live
#0000user.creatednowdelivered
#00-1session.refreshed3sdelivered
#00-2auth.signed_in5sdelivered
#00-3org.member.added7sdelivered
#00-4api_key.rotated9sdelivered
05machine auth

Machine auth without another control plane.

Issue API keys, OAuth apps, and machine credentials from the same product surface. Gate by scope, tenant, and rate limit before traffic reaches your API.

/api.wacht.dev
idle
POST/v1/sessions/verify
Request
{
  "token": "sk_live_4f9a · · · 7e21",
  "audience": "console.wacht.dev"
}
Response
— awaiting request —
[03]developers

Three lines, every stack.

Typed end-to-end. Drop the SDK into Next.js, React Router, TanStack, or a Rust service. Same API everywhere.

01import { NextResponse } from 'next/server';02import { createRouteMatcher, wachtMiddleware } from '@wacht/nextjs/server';03 04const isProtected = createRouteMatcher(['/account(.*)']);05 06export default wachtMiddleware(07  async (auth, req) => {08    if (!isProtected(req)) return NextResponse.next();09    await auth.protect();10    return NextResponse.next();11  },12);
$pnpm add @wacht/nextjsRead the docs
[05]component library

The actual UI surface, ready to embed.

Sign-in, consent, tenancy, account, and onboarding flows ship as drop-in components. Product logic already wired in behind them.

Authentication
Account
Platform
accounts.yourdomain.com/auth/sign-up
live
Sign up
Sign upRegistration and onboardingreact · next · tanstack · react-router
$pnpm add @wacht/nextjsDrop the components in. They already speak to your Wacht backend.
[06]pricing·beta

Free forever. Real limits.

10,000 monthly active users on the house. SAML SSO included. No credit card to start.

Starter

Free
$0forever

Real production limits, not a 14-day trial. Bring a side project, ship a launch, run a closed beta. No credit card.

What ships free
  • 10,000 monthly active users
  • 500 organizations
  • 2,000 workspaces
  • SAML SSO (free on every plan)
  • Agents platform (BYOK + BYO storage)
  • Pre-built components and custom domain

Beta quotas. May change before GA. Existing usage will be honored.

customer / inboxdoctor
We ditched Clerk for Wacht and it turned out to be one of the best decisions we made. It is simple, comprehensive, flexible where it matters, and the DX is exactly what we wanted while building InboxDoctor.
Sumith Bangarwa
Founder · InboxDoctor
[04]get started

Build AI-native SaaS on one complete platform.

Start with a solid account and access layer, then grow into developer auth, delivery flows, and runtime automation on the same foundation.

// set up the SDK now, grow into the rest.

Start free$ read the docs