π A fully open-source Firebase alternative built in TypeScript
Wabe is a modern, batteries-included backend-as-a-service designed for developers who want the flexibility of self-hosting with the ease of Firebase.
You define your models β Wabe instantly generates:
- a secure GraphQL API
- auth, permissions, hooks, emails, files, and more
- a fully extensible backend written in clean TypeScript
No vendor lock-in. No hidden limits.
Host it anywhere.
π Documentation: https://palixir.github.io/wabe
| Feature | Description |
|---|---|
| π Authentication | Email/password, OTP, OAuth (Google, GitHub), password reset, email verification |
| π Permissions | Fine-grained access control at collection, object, and field levels with secure defaults |
| β‘ Auto-generated GraphQL | Fully typed CRUD GraphQL API generated from your schema, ready for production |
| π Hooks | Custom logic before/after create, update, delete, and read operations |
| π¨ Email providers | Resend (official adapter) or custom adapters |
| ποΈ Database adapters | MongoDB, PostgreSQL (official), or your own adapter |
| π¦ Modular architecture | Replaceable and extensible modules: auth, storage, email, database, permissions |
| π Self-host anywhere | Docker, Node, Bun, Fly.io, Render, Railway, Hetzner, Raspberry Pi |
npm install wabe
# or
bun add wabeimport { Wabe } from "wabe";
import { MongoAdapter } from "wabe-mongodb";
const run = async () => {
const wabe = new Wabe({
isProduction: process.env.NODE_ENV === "production",
// Root key example (must be long minimal 64 characters, you can generate it online)
rootKey:
"0uwFvUxM$ceFuF1aEtTtZMa7DUN2NZudqgY5ve5W*QCyb58cwMj9JeoaV@d#%29v&aJzswuudVU1%nAT+rxS0Bh&OkgBYc0PH18*",
database: {
adapter: new MongoAdapter({
databaseName: "WabeApp",
databaseUrl: "mongodb://127.0.0.1:27045",
}),
},
schema: {
classes: [
{
name: 'User',
description: 'User class',
fields: {
name: {
type: 'String',
},
age: {
type: 'Int',
},
email: {
type: 'Email',
required: true,
},
},
},
]
},
port: 3000,
});
await wabe.start();
};
await run();mutation createUser {
createUser(input: { fields: {name: "Wabe", email: "mybackend@wabe.com", age: 10} }) {
user {
id
name
}
}
}Wabe comes with a set of official templates to help you bootstrap projects instantly:
| Template | Stack | Description | Status |
|---|---|---|---|
| wabe-starter | Wabe + Node | Minimal starter backend | π‘ Coming soon |
| wabe-next-template | Next.js + Wabe | Authentication + CRUD boilerplate | π‘ Coming soon |
| wabe-saas-kit | Wabe + Wobe | SaaS starter kit with Stripe | π‘ Coming soon |
More templates are added regularly based on community needs.
Wobe is a lightweight, TypeScript-first full-stack framework designed to pair naturally with Wabe.
For a seamless frontend + backend developer experience:
π https://github.com/palixir/wobe
A modern, type-safe GraphQL server designed as a companion to Wabe.
Optimized for DX, performance, and full extensibility.
- PostgreSQL adapter
- Admin dashboard UI
- File storage adapters (S3, Cloudflare R2, etc.)
- CLI (
wabe init,wabe generate) - SaaS starter kit
- Improved documentation
Contributions are welcome!
Before opening a PR, check the CONTRIBUTING.md and join the community.
Wabe is 100% open-source and maintained in my free time.
If you want to support development:
π GitHub Sponsors: https://github.com/sponsors/coratgerl
Sponsors receive:
- Access to a complete, fully tested boilerplate with an admin dashboard to manage users (Vite, Tailwind, Playwright, Wabe, Bun, GraphQL, etc.)
- Your name featured in the
README.md
Your support helps keep Wabe sustainable and actively maintained, and allows me to continue creating new projects in my free time to help developers have solid backends with minimal effort.
If you like the project, please consider starring the repository: β β It helps more than you think.