Introduction
What Emberstack is, what it ships with and the principles behind it.
Emberstack is a starter template for building a SaaS application with Astro on Cloudflare Workers. It gives you authentication and teams, Stripe billing, a CMS-driven marketing site and blog, and a dashboard for signed-in users, all running on Cloudflare's platform.
The demo runs at emberstack.dev and the code is on GitHub.
What's included
- A marketing site and blog managed in EmDash at
/_emdash/admin, built from editable blocks such as hero, features, pricing, FAQ and contact. - A pricing page wired to Stripe Checkout, with subscription management in the Stripe Customer Portal.
- Email and password sign-in with Better Auth.
- Teams with Owner, Admin and Member roles, invitations and a team switcher. Every signup gets its own team.
- A dashboard under
/appwith an example Notes app you can copy for your own features. - Server-rendered pages enhanced with Datastar. Forms still work without JavaScript.
- Activity logging for user events.
- Transactional email through Cloudflare Email Sending.
- A Workers AI binding, ready to call.
The stack
Concern | Tool |
|---|---|
Framework | Astro 7 with server output |
Runtime | Cloudflare Workers |
App database | Cloudflare D1 with Drizzle ORM |
CMS | EmDash, on its own D1 database with media in R2 |
Auth | Better Auth with the organization plugin |
Payments | Stripe |
Cloudflare Email Sending | |
Frontend | Datastar |
Styling | Tailwind CSS 4 and daisyUI 5 |
Tooling | Bun, Wrangler, Biome |
Guiding principles
One platform. Everything runs on Cloudflare: the app, both databases, media, sessions, email and AI. There's no separate database host or email service to sign up for before you can ship.
Common cases only. A starter is meant to be edited, so it covers what nearly every SaaS needs and leaves the rest to you. Examples live in the docs, not in the app.
Low setup friction. Getting from clone to production should take minutes. Most of what the starter uses fits in Cloudflare's and Stripe's free tiers while you explore.
One way to do things. Each concern has one approach in the code and the docs: Drizzle for app data, EmDash for content, Datastar for interactivity.
Yours to change. The code is plain Astro and TypeScript. When your requirements move, swap pieces out.
Next steps
- Quick start gets it running on your machine.
- Project structure shows where things live.