Skip to content

For developers & indie hackers

Email infrastructure you own and program.

One `wrangler deploy` puts a bundled worker on your Cloudflare account. Then you program it. Skills and plugins in TypeScript. Agent tools over `MCP`. Transactional and bulk sending from one typed API. D1, R2, and FTS5 search bundled in. Gmail, Resend, and Mailchimp, collapsed into code you control.

The old way

Email is five services and a pile of glue.

Mailbox. Transactional API. Newsletter tool. Plus the webhooks tying them together. Each one bills you, each one has its own dashboard, none of them are yours.

Glue code everywhere

Webhooks, sync jobs, and CSV exports stitch together services that were never meant to know about each other.

Your data is scattered

Threads in one tool, subscribers in another, send logs in a third. You can't query across any of it.

Per-seat pricing on a side project

Every tool meters seats and subscribers, so the bill grows before the product does.

What you get

One programmable stack, bundled.

Skills & plugins in TypeScript

Read a message, pull the live record from your own systems, and render it as a card in the thread — that's a Skill, a small typed function. Or ship a whole plugin with its own routes, crons, hooks, DB, and secrets. Either way it ships with a git push.

Agents over one manifest

Chat, the CLI, and MCP share one typed tool manifest. The tools your agent calls are the same ones callable from Claude or any client you point at it — add a tool once, it's everywhere.

Reach any API safely

Skills and plugins hit the systems you already run over a sandboxed, host-pinned fetch, then render the response as a card right in the thread.

It's all on Cloudflare

Inbox, API, sending, and lists run on one worker on your account. Database, object store, and full-text search are bundled in. One dependency, one deploy.

One command to stand it up. npx tinbox init example.com provisions the whole stack on your account and deploys the bundled worker. Write your Skills, plugins, and agent tools, then ship them with wrangler deploy.

The fundamentals

What's in the box.

  • One bundled worker: fetch, email, queue, and scheduled
  • Database, object store, and queues on your account
  • Typed tRPC API shared by the SPA, CLI, and MCP
  • better-auth with passkeys and an OIDC IdP
  • Full-text search over your own mail
  • Transactional + bulk sending on one auditable ledger
  • Sandboxed, host-pinned fetch for any REST API
  • One authorize() gate, capability tokens, human-in-the-loop

Questions

How it's built.

Is the extensibility no-code?
No, and that's the point. Skills, plugins, and agent tools are TypeScript you deploy. Runtime toggles (autopilot, secrets, model, voice, branding) flip without a redeploy. New behavior is a git push, and it's yours.
Can plugins ship their own UI?
You build custom cards, columns, and views into your own scaffolded app layer. There's no runtime plugin-supplied UI or drag-drop dashboard builder. The UI is code you write and own.
Does it really run on just Cloudflare?
Yes. One bundled worker, one dependency, one wrangler deploy. Storage, queues, and search are all included on your account. No Postgres, no separate services to stand up or operate.

Why builders switch

What builders say.

“One deploy and I owned the whole stack — inbox, sending, lists, all programmable in TypeScript. I deleted three subscriptions the same week.”

Priya Shah

Indie hacker

Sample testimonials: illustrative, pending real customer quotes.

Your stack, in TypeScript you control.

One bundled worker, one dependency, one `wrangler deploy` — then Skills, plugins, and agent tools you ship with a `git push`. Readable source, your keys, your Cloudflare account. Three subscriptions collapsed into code that's yours.

Not technical? We'll build it for you →