A real-time chat app that runs entirely on Cloudflare.
Rooms, threads, DMs, files, search, bots and push notifications, deployed in one click.
Features · Ember vs Slack · What it costs · Get started · Self-hosting guide
Pay for the chat, not for every person in it. Ember is free and open source, and runs on your own Cloudflare account: free for a small team, and $5 a month for the whole account as you grow. Slack Pro charges $7.25 for every person, every month, billed annually.
Keep every message. Nothing ages out. Slack's free plan shows only the last 90 days and deletes messages once they're a year old; Ember keeps every message and file for as long as you do.
Own your conversations. Messages live in Durable Objects, and files in an R2 bucket, in your Cloudflare account. Nobody else hosts your team's chat, and the code is yours to read, change and run.
Nothing to look after. No servers, containers or databases to patch. One click puts Ember on Cloudflare's network, quiet rooms hibernate, and every push to your copy deploys again.
Rooms for every project, private rooms for the few who need them, and DMs with one person or a few. Reply in a thread to keep a room on topic, and tick Also send to the room when everyone should see the answer. Mention people, quote a message, react with any emoji or a few words of your own, and edit or delete what you wrote.
Unread rooms stand out, Activity narrows the list to what you haven't read, and each room's bell says whether you hear about every message, only mentions, or nothing. You see who's here and who's typing, as it happens.
The people and conversations in these screenshots are made up: they're the Fernwood team that pnpm seed creates.
Bold, lists, quotes, and code blocks with syntax highlighting. Paste a link and Ember shows a preview, and share a chart, a spreadsheet or anything else right in the conversation. Light, dark, or whatever your system says.
Share files of up to 250 MB. Pictures show in the conversation, videos play where they're posted, and everything else is a click away. Files go to an R2 bucket in your Cloudflare account, which charges nothing for downloads.
Point Alertmanager, Grafana, your CI pipeline, or anything else that posts to a Slack incoming webhook at Ember instead. Every bot gets a Slack-compatible webhook URL for each of its rooms, which takes the same payloads, with Slack's formatting, attachments and Block Kit cards. Bots can answer too: mention one, or DM it, and Ember sends the message to the bot's own webhook and posts what it answers within 30 seconds. A card's buttons can act: a click goes to the bot, which puts a new card in its place.
Turn on Ember AI and choose Claude, GPT or Grok, asked through Cloudflare AI Gateway, or a model Cloudflare runs itself on Workers AI. Ember checks for new models every day, so they show up without an update. Then mention @ember in a room or a thread, or DM it, and it reads the conversation and answers right there, with links, lists, code and pictures, as a teammate would. It searches the web too, when you let it, listing the pages its answer came from, and Claude, GPT and Grok search the room for what was said before. Administrators set how long it may think and write, and each person picks their own levels on their profile. Administrators can add agents of their own too, each with its instructions, model and rooms, such as one that sums up long threads or drafts replies in Support, and people mention or DM them just the same.
Press ⌘F, or Ctrl+F, to search every message in the rooms and DMs you're in, thread replies included, and narrow it as you would in Slack: to a room, to what someone wrote, to what mentions you, or to links, files or threads. Results come newest or oldest first, with the words they matched marked, and your recent searches are a key away.
Add Ember to your home screen on an iPhone or Android phone, or install it on your computer, and turn on push notifications for the messages you want to hear about. It's made for phones: a drawer for your rooms, tap targets sized for thumbs, nothing hiding under the notch, and messages written without signal send once you're back online. To sign in on your phone, scan the QR code on your profile.
Give Ember your community's name, logo and tagline, pick icons for rooms and the navigation, restyle it with custom CSS, and serve it at your own domain, which Ember walks you through setting up. Then choose who gets in: anyone with the join link or its QR code, the people you invite by email, anyone with an address at your company's domain, the members of your Memberful site, or everyone, with Cloudflare Turnstile keeping bots out.
Slack does more, and charges for it per person. Ember does the everyday core of team chat well, and it's yours. Slack's plans are as slack.com/pricing listed them in October 2026.
| Ember | Slack | |
|---|---|---|
| Price | Free and open source. You pay Cloudflare $0, or $5 a month for the whole account | Free plan, or $7.25 (Pro) or $15 (Business+) per person a month, billed annually |
| Message history | Everything, for as long as you keep it | Free: the last 90 days, and messages are deleted after a year. Paid plans: everything |
| Where it runs | Your Cloudflare account | Slack's cloud |
| Source code | MIT license, on GitHub | Closed |
| Your own domain | ✅ such as chat.example.com | — only yourteam.slack.com |
| Branding | Name, logo, tagline, room and navigation icons, and custom CSS | Workspace name and icon |
| Ember | Slack | |
|---|---|---|
| Rooms, private rooms and DMs | ✅ | ✅ |
| Threads | ✅ with Also send to the room | ✅ with Also send to the channel |
| Mentions, quotes, reactions and edits | ✅ react with any emoji or a few words | ✅ plus custom emoji |
| Rich text, code blocks and link previews | ✅ | ✅ |
| Files | ✅ up to 250 MB each | ✅ up to 1 GB each |
| Search | ✅ every message in your rooms and DMs, with Slack's filters for rooms, people, links, files and threads | ✅ (Free: the last 90 days) |
| Unread, Activity, starred rooms, per-room notifications | ✅ | ✅ |
| Phones | ✅ installable web app with push notifications | ✅ native iPhone and Android apps |
| Computers | ✅ any modern browser, or installed as an app | ✅ native Mac, Windows and Linux apps, or the browser |
| Light and dark | ✅ | ✅ |
| Incoming webhooks | ✅ Slack-compatible, with attachments and Block Kit | ✅ |
| Bots that answer | ✅ through a webhook per bot | ✅ through Slack apps |
| Ways to join | Join link and QR code, email invitations, email domains, open sign-up with Turnstile, Memberful | Invitations, invite links and approved email domains |
| Single sign-on | Memberful, for membership communities | Google on every plan, and SAML SSO with SCIM on Business+ |
| Ember | Slack | |
|---|---|---|
| Apps and workflows | — | ✅ a directory of 2,600+ apps (Free: 10 of them) and Workflow Builder |
| Voice and video calls | — | ✅ huddles (Free: one-on-one only) |
| AI | @ember and agents of your own answer when you mention or DM them, each on the model you choose | ✅ summaries, recaps and AI search on every plan, more on Business+ |
| Canvases, lists and clips | — | ✅ |
| Channels shared with other companies | — | ✅ Slack Connect |
| Scheduled messages and reminders | — | ✅ |
| Guest accounts | — | ✅ on paid plans |
| Exports of every message, DMs included | — not yet | ✅ on Business+ and up |
| Support | GitHub issues | ✅ 24/7 on Business+ |
If your team lives in huddles, workflows and a hundred integrations, Slack earns its price. If you want fast, calm, searchable chat that you own outright, Ember is built for you.
Ember is free. Cloudflare runs it, at its own prices:
| What you pay Cloudflare | |
|---|---|
| A small team | $0 on the Workers Free plan. From what we measured each message writes, it carries about 100 people a day sending 30 messages each. |
| A growing team | $5 a month on Workers Paid, for the whole account. It includes 50 million database rows written a month, where Free allows 100,000 a day, and bills any use past its allowances. |
| Files | 10 GB in R2 free, then $0.015 per GB a month, with nothing to pay for downloads. |
| Email, if you want it | Free with Resend, up to 3,000 emails a month and 100 a day, or 3,000 a month included with Workers Paid through Cloudflare Email Service. |
| @ember and agents, if you turn them on | Claude, GPT or Grok at their makers' prices, from $0.10 for a million tokens read, paid with AI Gateway's credits, or Workers AI's models, free for 10,000 Neurons a day. |
| Your own domain, if you want one | Whatever your registrar charges. |
The free plan's allowances are daily: once a day's are used up, Ember can't save anything new until they reset at midnight UTC, so move to Workers Paid before your team outgrows them. Against Slack, billed annually:
| Slack Pro | Slack Business+ | Ember | |
|---|---|---|---|
| 25 people, for a year | $2,175 | $4,500 | $0 on Workers Free, or $60 on Workers Paid |
| 100 people, for a year | $8,700 | $18,000 | $60 on Workers Paid, plus any use past its allowances |
What it costs, in the self-hosting guide, shows how the estimate was made.
- Turn on R2 in your Cloudflare dashboard, for the files people share. Each Ember needs a bucket and a database of its own, so if your account already runs an Ember, choose Create new when the form picks that one's.
- Click Deploy to Cloudflare above. Cloudflare copies Ember to your GitHub or GitLab account, asks
you to name the Worker, its bucket and its database, to choose where messages live, and to make up a
setup password, and deploys it. Keep
do-sqlite, which scales furthest, unless you want every message in one D1 database you can query and export, as Storage explains; either way, a team of more than about 100 people a day needs Workers Paid. If Cloudflare first has you connect GitHub or GitLab, it comes back to a page for deploying one of your own repositories instead: click the button again, and Ember's form opens with your account connected. If that first build stops withNo package.json ... was found, Cloudflare built a commit from before it finished copying Ember: push any commit to your copy, an edit to its README in GitHub's editor will do, and it builds again. - Open your Worker's address,
https://<your Worker>, type the setup password, and create your community and its administrator. Only that password opens setup, so nobody who finds the address first can take it over. Forgot it? GiveEMBER_SETUP_PASSWORDa new value in the Worker's Settings, under Variables and Secrets. - Add the Update Ember workflow to your copy, which Cloudflare leaves out with the rest of Ember's
.githubfolder: the build log says how, with a link to GitHub's editor with it filled in for you to commit, or create.github/workflows/update-ember.ymlin your copy with what Ember's has. - Trim the API token Cloudflare made for your copy's builds,
<your Worker> build token, which may edit nearly everything in your account, every R2 bucket included, though Ember's builds need little of that: in My Profile, under API Tokens, choose Edit on it, not Roll, and remove every permission but Workers Scripts, Account Settings, User Details and Memberships, and D1 if you chosed1. The build's token says why. - Invite your team with the join link on general's welcome card, or by email.
From then on, every push to your copy deploys again, and each new release of Ember arrives in your copy as a pull request that deploys it once you merge it, while Ember's admin settings say it's out, with a button that opens the workflow on GitHub to run it sooner. The self-hosting guide covers updating, deploying from your own machine, a custom domain, email, push notifications, Memberful and more.
With Node 22.22.2+, 24.15+ or 26+, and pnpm 10:
pnpm install
pnpm build # once, for the app's files that wrangler serves
pnpm dev # Ember at http://localhost:5173
pnpm seed # in a second terminal: the made-up Fernwood team sets Ember up and talkspnpm seed prints how to sign in as each of the team. Development says more.
- Every room is its own Durable Object, holding the room's live connections, who's here and who's typing, and, by default, its messages in its own SQLite database. Quiet rooms hibernate, so an idle workspace uses next to nothing.
- Secure by default. HTTPS everywhere with HSTS, a strict Content Security Policy, passwords hashed with scrypt, and setup only through the deploy's own link. Removing someone ends their sessions within a minute. The security notes have the rest.
- Tested hard. The Worker's tests run on both storage backends, and browser tests drive the app on a desktop and on seven emulated phones, from a 320px iPhone SE up.
- Self-hosting guide: deploying, what it costs, custom domains, who can join, email, push notifications, files and security.
- Slack-compatible webhooks: what bots can post, and how it looks.
- The models file: the models every copy of Ember offers, and how to change them.
- Development: the code's layout, running Ember locally, tests and performance.
- The database: Ember's schema beside Campfire's.
- Security policy: how to report a vulnerability privately.
Ember grew out of Campfire, 37signals' group chat, and rebuilds it on Workers and Durable Objects with a design of its own. It's MIT licensed. Its icons are Iconoir's, and the made-up team's pictures are credited in the seed's files.
Slack is a trademark of Slack Technologies, LLC. Ember is not created by, affiliated with, or supported by Slack Technologies, LLC.







