Your WhatsApp templates and flows, as code.
Declare templates, flows, and tests in typed TypeScript. Plan the diff, apply to the Cloud API. Ship 20x faster and break nothing.
$ npm install @manano-ai/whamPrivate repository — join the waitlist for access
online
Where's my order #38291?
A WhatsApp template isn't a web page
Web code is instant, local, and yours. WhatsApp doesn't work like that. And that one difference changes how you should build.
Web code (HTML, JS)
- Change a file, hit refresh. Live in seconds.
- Runs on your servers. You own every part of it.
- Test it anywhere, on localhost, for free.
- Break it, fix it, ship again. Nobody's watching.
WhatsApp templates & flows
- Submit it and wait. Meta approves every change.
- Lives inside a Meta account, not your codebase.
- No localhost. You need a real number to even see it.
- Someone edits it by hand and your code no longer matches reality.
Sound familiar? That's how servers, databases, and DNS behave. Not web pages. You don't click around a console and hope. You declare what you want, preview the change, and apply it. wham brings that exact workflow to WhatsApp.
Declare. Plan. Apply.
The same workflow you use for cloud infrastructure, now for your WhatsApp templates and flows.
Declare
Write your templates, flows, and tests as typed TypeScript resources. Rename a screen and the compiler catches every broken reference before you ship.
Plan
Run wham plan to see exactly what changes. Creates, updates, deletes, drift from manual edits. No surprises in production.
Apply
wham apply pushes changes to Meta in dependency order and waits until templates are approved and flows are published. Wire it into CI.
One source of truth for your WhatsApp account
Templates
Typed message templates with validated placeholders. Approval status tracked in state.
Flows
Multi-screen forms with end-to-end type narrowing. Reference a flow from a template, safely.
Tests
Preview flows and templates locally with mock data. No Business account, no real credentials.
Webhooks
Receive messages in real time. Filter by type, respond with typed replies, connect any backend.
WhatsApp infrastructure, version controlled
Templates, flows, and tests in one typed codebase. Diff every change, catch breakage at build time, and ship from CI.
Type-safe templates
Templates are typed resources, not strings. Placeholders and flow references are checked at compile time. Rename something and the build breaks, not your production messages.
// Templates are typed resources, not strings
const bookingConfirmation = template({
id: 'booking_confirmation',
language: 'en_US',
category: 'UTILITY',
params: { room: example('room 204') },
view: ({ param }) => (
<>
<Body>Your booking for {param.room} is confirmed.</Body>
<Button.Flow flow={bookingFlow}
navigateScreen={bookingFlow.screens.DETAILS}>
Manage booking
</Button.Flow>
</>
),
});
// Rename a screen and this fails to compile,
// not in production.Interactive flows
Declare multi-screen WhatsApp forms as JSX with end-to-end type narrowing. Screen data flows through to your handlers, fully typed.
// Multi-screen flows, fully typed
const bookingFlow = (
<Flow id="booking" categories={['OTHER']} version="7.0">
<Screen
id="DETAILS"
data={z.object({ room: z.string() })}
>
{(s) => ({
title: 'Your booking',
terminal: true,
body: [s.heading('Confirmed'), s.body(s.data.room)],
footer: { label: 'Done', complete: { room: s.data.room } },
})}
</Screen>
</Flow>
);Plan before you apply
See every create, update, and delete before it happens. wham detects drift from manual edits in Business Manager and reconciles it. Like terraform plan, for WhatsApp.
$ wham plan
+ flow.booking create
~ template.order_confirm update body
- template.old_promo delete
! template.reminder drift detected
Plan: 1 to add, 1 to change, 1 to destroy.Drift detection
wham sync discovers manual changes made in Business Manager and lets you adopt or revert them. Your code stays the source of truth.
Local preview
Render flows and templates with mock data on localhost, hot-reloaded. No Business account or real credentials needed.
Multi-environment
One declarations module, many stacks. Deploy the same resources to dev, sandbox, and prod with a single flag.
Test without credentials
Preview flows and templates locally with the exact screens Meta renders. No WhatsApp Business account needed. Iterate before you ever touch production.
Full API Simulation
All messaging endpoints, templates, and flows work locally
Webhook Round-trips
Test complete message flows with HMAC-signed webhooks
Error Injection
Simulate rate limits, failures, and edge cases
CI/CD Ready
Run in tests without real credentials
$ wham preview
✓ Preview server at http://localhost:3001
✓ Rendering flows & templates with mock data
✓ Hot reload enabledBella's Salon
Business Account
Welcome to Bella's Hair Salon! How can I help you today?
Book Appointment
Select a Service
Deploy like it's 2026
Version control your WhatsApp infrastructure. Plan changes, preview diffs, deploy with confidence.
Define Resources
Declare templates and flows in TypeScript
// wham/resources.tsx
export const resources = (
<ResourceSet>
{bookingFlow}
{reminderTemplate}
{confirmationTemplate}
</ResourceSet>
);Preview Changes
See what will be created, updated, or deleted
$ wham plan
+ flow.booking create
~ template.reminder update body
- template.old_promo deletePush to Deploy
Apply changes with a single command
$ wham apply
Applying 3 changes...
✓ flow.booking created
✓ template.reminder updated
✓ template.old_promo deleted
Deployed in 4.2sCI/CD Ready
Integrate with GitHub Actions, GitLab CI, or any CI system. Deploy on merge to main. Preview environments for every PR.
# .github/workflows/deploy.yml
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npx wham apply --yesBuild it by talking to your agent
wham ships as Claude Code skills. Install them once, then describe what you want. Claude writes the templates and flows, tests them in the simulator, and ships them with plan and apply.
$ npx wham skills install
✓ Installed 6 skills to .claude/skills
# then just ask Claude Code:
you › build a booking flow and deploy it to dev
✓ wrote wham/flows/booking.tsx
✓ previewed in the simulator
✓ wham apply --stack dev → publishedwham-templatesAuthor message templates with the typed JSX DSL.
wham-flowsBuild multi-screen flows with typed screens and routing.
wham-messagingSend text, media, buttons, lists, templates, and flows.
wham-webhooksReceive and route inbound messages and flow completions.
wham-simulator-testingTest end-to-end with no Meta credentials.
wham-deployPlan and apply your templates and flows as code.
Get early access to wham
Join the waitlist for the WhatsApp infrastructure toolkit. Manage your templates, flows, and tests as code, and ship 20x faster.
First 50 teams get founding member pricing.
Invite friends to skip the line.