Early access — building in the open

Ship a WhatsApp bot without shipping a server.

Write it in Python with Pywa. Run one command. Pywa Cloud builds the runtime, secures the webhook, and keeps it running — no server, no webhook infrastructure, no DevOps.

Early access — we're inviting testers as onboarding capacity allows.

~/support-bot
$ pywa deploy
 
Building application
✓ Resolved dependencies
✓ Discovered WhatsApp app in main.py
✓ Built container image
✓ Started runtime
✓ Configured secure webhook
support-bot · +1 415 555 0142
RUNNING
Northwind Support online
hello 👋
You said: hello 👋
One command to deployNo server to run or configure
Verified webhooksmTLS and HMAC before your code
One container per botIsolated, never shared
Official WhatsApp pathRegistered Meta Tech Provider
From code to live

Nine lines of Python. One command. A running bot.

This is the whole loop — nothing hidden behind the ellipsis.

1 main.py
from pywa import WhatsApp, filters, types
wa = WhatsApp(
    phone_id=os.environ["PYWA_PHONE_ID"],
    token=os.environ["PYWA_TOKEN"],
)

@wa.on_message(filters.text)
def echo(_: WhatsApp, msg: types.Message) -> None:
    msg.reply_text(f"You said: {msg.text}")
2 Terminal
$ pywa deploy

✓ Built & started — 8s
✓ Webhook configured

POST /webhook → 200
11:24:03
3 WhatsApp
hello
You said: hello
The dashboard

Not just a CLI. A real control plane.

Every bot, deployment, and WhatsApp connection is visible in one place — on your desktop, and just as usable from your phone.

dashboard.pywa.cloud/bots/delivery-updates
Pywa Cloud dashboard showing a bot's overview: live health, CPU/memory/request metrics, its connected WhatsApp number, and the current deployment
Pywa Cloud dashboard showing connected WhatsApp Business Accounts with their phone numbers, profile pictures, and quality ratings
Pywa Cloud dashboard showing a list of bots with live status, connected WhatsApp numbers, and last-deploy times
Pywa Cloud dashboard on a phone: a bot's overview with live health and metrics
Pywa Cloud dashboard on a phone: connected WhatsApp accounts and their numbers
Pywa Cloud dashboard on a phone: the bots list with live status

A bot's overview — live health, CPU / memory / request metrics, the connected number and the current deployment.

Architecture

You write the bot. Pywa Cloud runs it.

Everything between your code and WhatsApp — runtime, webhook, connection, logs, isolation — is Pywa Cloud's job, not yours.

You write main.py
Pywa Cloud runs

Runtime. Secure webhook. WhatsApp connection. Logs. Isolation. Deployments.

Runtime

Your code is built into its own isolated runtime and kept running — no build setup, no VPS to patch.

Secure webhook

Requests are verified at Pywa Cloud's boundary before they're proxied to your container.

WhatsApp connection

Connect a Business number through Pywa Cloud's own Meta app — no Meta developer setup.

Logs & deployments

Every deployment and every request your bot handles, visible from the CLI or the dashboard.

Isolation by default

One container per bot on its own private network. Never shared across tenants.

Pywa itself — the framework your bot is written against — stays fully independent and open-source. Pywa Cloud runs your code; it doesn't own it. Nothing ties your bot to this platform, and you can always run the same code yourself.

Security

Your webhook is not an open door.

Every request from WhatsApp passes through validation at Pywa Cloud's boundary — before it ever reaches your code, and without your bot having to implement any of it.

Valid request from Meta
→
Request arrives
POST /webhook/support-bot
→
⬡
mTLS handshake
client cert verified against Meta's CA
connection refused
→
⚿
Signature check
HMAC-SHA256, constant-time
403 invalid signature
→
▣
Your container
isolated, non-root, read-only fs
→
✓
Your code
receives an already-verified request
  • Every inbound connection presents a client certificate validated against Meta's own CA before the TLS handshake even completes — non-Meta traffic never reaches an HTTP request at all.
  • Every inbound webhook is validated against an HMAC-SHA256 signature before it's proxied anywhere — a bad or missing signature never reaches your container.
  • Secrets are encrypted at rest and only decrypted server-side, at deploy time, to inject into your container's environment.
  • Each bot runs in its own container on its own dedicated private network — no route to any other tenant's container, even by raw IP.
  • Containers run as a non-root user with every Linux capability dropped, a read-only root filesystem, and no access to the host filesystem.
  • A bot with no WhatsApp connection rejects every inbound webhook outright — there's nothing for an attacker to spoof traffic against.
  • A deploy token used in CI can deploy exactly one bot. It cannot list your bots, read your env vars, or touch anything else.

This is container isolation on a shared host, not VM-level isolation — and it hasn't had an independent security audit yet. We'd rather tell you what this does and doesn't protect against than round it up. Full detail on the security & isolation page.

Local development

Real WhatsApp webhooks, on localhost.

Add one flag to the command you already run. pywa dev --tunnel starts your bot locally and, in the same step, reroutes this bot's live webhook traffic here — no ngrok, no second terminal, no repointing the callback URL in Meta's dashboard.

~/support-bot
$ pywa dev --tunnel 🌐 Server URL: http://127.0.0.1:8000 Tunneling 'support-bot'… connected POST /webhook → 200

Not running pywa dev? pywa cloud tunnel relays the same traffic to any local process on its own.

WHATSAPP
PYWA CLOUD INGRESS webhook URL never changes
your laptop $ pywa dev --tunnel
deployed container your last pywa deploy

Stop --tunnel (Ctrl+C) and traffic flows back to the container within moments — same URL, same already-verified request, either way.

Pywa Studio

Build a WhatsApp Flow with a few clicks.

Studio is a visual builder for Flows and message templates. It hands you the Pywa code, and with a Pywa Cloud account it can publish straight to your WhatsApp Business Account. Try the real thing below, on a small scale.

Open Pywa Studio Free, no account to start. Templates have their own builder, with review status from Meta.

studio.pywa.cloud/flows
Components
Click to add or remove one.
Book a table
Dana's Bistro
Hungry? Book a table in 20 seconds. Book a table
flow.py

            
  1. Saved as a draft in your WABA
  2. Validated by Meta, 0 errors
  3. Published, customers can open it
Needs a Pywa Cloud account. Without one, copy the code.
WhatsApp connection

Connect a WhatsApp Business number without becoming a Meta developer.

Pywa Cloud is a registered Meta Tech Provider. For the standard path, you connect through Pywa Cloud's own Meta app — no separate Meta app of your own to create, configure, or keep alive.

Meta Tech Provider Meta's official program for verified WhatsApp Business platforms.
  • No separate Meta developer app to create, configure, or keep alive — you connect through Pywa Cloud's own, already-approved app.
  • No system-user token to generate, store, or rotate yourself — Pywa Cloud's Tech Provider credentials handle that.

Already run your own Meta app and system-user token? A manual connection is supported too — Pywa Cloud validates it against the real Graph API before saving it, and your credentials stay yours.

Why

What you stop doing.

  • 01 Rent and patch a VPS
  • 02 Write and maintain build and deploy scripts
  • 03 Configure a reverse proxy and TLS certificates
  • 04 Build your own webhook signature validation
  • 05 Create and maintain a Meta app for a standard connection
  • 06 Redeploy just to test a webhook change
  • 07 Manage ngrok tunnels for local testing
→ Run pywa deploy.
Questions

Straight answers.

The things people ask before they try it.

Is it free?

Yes — Pywa Cloud is free during early access. No credit card, no pricing surprises.

Am I locked in?

No. Pywa, the framework your bot is written against, stays fully independent and open-source. Pywa Cloud runs your code; it doesn't own it, and you can always run the same code yourself.

Do I need my own Meta developer app?

Not for the standard path. Pywa Cloud is a registered Meta Tech Provider, so you connect a WhatsApp Business number through Pywa Cloud's own Meta app. If you already run your own app and system-user token, a manual connection is supported too.

How isolated is my bot from other people's?

Every bot runs in its own container on its own private network, as a non-root user with all Linux capabilities dropped and a read-only filesystem. To be honest about the limits: this is container isolation on a shared host, not VM-level isolation, and it hasn't had an independent security audit yet.

Who can read my secrets?

Secrets are encrypted at rest and only decrypted server-side, at deploy time, to inject into your container's environment.

How do I test a change without redeploying?

Run pywa dev --tunnel. It starts your bot locally and reroutes this bot's live webhook traffic to your machine — same webhook URL, no ngrok. Press Ctrl+C and traffic flows back to the deployed container.

Early access

Want to test it yourself?

We're inviting a small number of early testers while onboarding is still hands-on. Tell us what you're building and we'll reach out.

Free during early access — no credit card, no pricing surprises.

By joining, you agree to our Privacy Policy.