Skip to main content

Introduction

EdgeBase is an open-source edge-native BaaS built on Workers, Durable Objects, D1, and R2. Auth, Database, Realtime, Storage, and Functions share one serverless edge architecture, while shared blocks can switch to PostgreSQL when you need it. Develop locally on Node.js, then run the built app with Docker or a Pack artifact, or deploy globally on Cloudflare's edge. No vendor lock-in, MIT licensed.

Why EdgeBase?

FirebaseSupabasePocketBaseEdgeBase
DatabaseNoSQL (Firestore)PostgreSQLSQLiteSQLite + PostgreSQL
Auth Cost$275/100K MAUIncluded in $25/moFreeFree
Cold Start~200ms~500msN/A~0ms
Egress$0.12/GB$0.09/GBServer-dependent$0
Self-HostNoComplexSingle binaryDocker + Pack
Live SubscriptionsYesYesYesYes
Edge DeployNoNoNoYes
Open SourceNoYes (AGPL)Yes (MIT)Yes (MIT)

Scale-Out by Design

Every other BaaS funnels traffic through a single database. When your app grows, you need replicas, connection pooling, and sharding. EdgeBase gives each user/tenant its own Durable Object with embedded SQLite — more users means more instances, not more load on a bottleneck. 10 users and 10 million users run the same code and config.

Runs Everywhere

Deploy your backend in whichever way suits your project:

ModeCommandRequirementsBest For
Cloud Edgenpx edgebase deployCloudflare accountProduction, global low-latency
Dockernpx edgebase docker runDockerSelf-hosted, single container
Pack artifactnpx edgebase pack --format portableTarget platformSelf-hosted without Docker
Local developmentnpx edgebase devNode.jsHot reload and local iteration

Cloud Edge and the generated Docker/pack launchers run the same built application contract. dev is the local iteration surface. No vendor lock-in.

Costs Scale with Compute, Not Users

Start free, scale without fear. No per-user auth charges. No egress or bandwidth fees on the Cloudflare edge stack EdgeBase builds on. Idle instances cost $0 through DO hibernation. Deploy core services to Cloudflare's edge on the Free plan, then scale up with the $5/month paid plan (account-level — covers unlimited projects). Optional products like R2 still need a one-time billing setup before first use. Or self-host for free.

~0ms Cold Starts

Built on workerd, so requests hit V8 isolates instead of waiting for containers to boot.

Fully Open Source

MIT licensed. Export your data anytime. Run it anywhere.

Core Features

  • Database -- SQLite-backed storage across D1 and Durable Objects, with full SQL support including JOINs, FTS5 full-text search, and automatic schema management.

  • Authentication -- Email/password, OAuth (14 providers: Google, GitHub, Apple, Discord, Microsoft, Facebook, Kakao, Naver, X, Reddit, Line, Slack, Spotify, Twitch), and anonymous auth. PBKDF2 password hashing via Web Crypto API.

  • Database Subscriptions -- WebSocket-based onSnapshot subscriptions for live data changes with server-side filtering. Hibernation API for cost efficiency.

  • Room -- Server-authoritative state synchronization with built-in members (presence) and signals (pub/sub). Ideal for multiplayer, collaboration, coordination, and real-time workflows.

  • Storage -- R2-backed file storage with $0 egress, signed URLs, multipart upload with resume, and per-bucket access rules.

  • Functions -- Database triggers (insert, update, delete), authentication triggers (beforeSignUp, onTokenRefresh, etc.), cron-scheduled functions, and HTTP endpoints.

  • Push Notifications -- Register devices, send to users/topics/devices, and broadcast. Managed via Service Key API.

  • Admin Dashboard -- Built-in management UI at /admin for browsing data, managing users, and monitoring your backend.

Architecture

Client SDK ──→ Worker (Hono) ──→ Durable Objects (isolated DB blocks, subscriptions, rooms, atomic OAuth state)
──→ D1 (auth + single-instance DB blocks)
──→ R2 (File Storage)
──→ KV (ephemeral cache + legacy OAuth migration mirror)

DB blocks come in two types. Single-instance blocks (no instance ID) default to D1 — good for globally shared data. Dynamic blocks (instance: true) create a separate Durable Object per ID — good for isolated data. The block name is just a config key you choose; there are no reserved names.

  • Single-instance (e.g., app, catalog, public) — one database, D1 by default.
  • Dynamic (e.g., mydata:{userId}, team:{teamId}) — one Durable Object per ID, physically isolated.

Tables that need SQL JOINs share the same Durable Object by being defined under the same databases.{namespace}.tables block.

The same built application contract runs on cloud edge, the generated Docker container, and the generated Pack launcher. edgebase dev is local development only; the generated self-host launchers provide the production lifecycle. KV and R2 are emulated by the self-host runtime.

SDK Support

EdgeBase provides SDKs for 14 languages:

LanguagePackageRegistry
JavaScript/TypeScript@edge-base/web, @edge-base/react-nativenpm
Flutter/Dartedgebase_flutterpub.dev
Swift (iOS)edgebase-swiftSPM
Kotlin (Android/JVM)com.github.edge-base.edgebase:edgebase-clientJitPack
Java (JVM)com.github.edge-base.edgebase:edgebase-android-javaJitPack
Scala (JVM)com.github.edge-base.edgebase:edgebase-admin-scalaJitPack
Pythonedgebase-admin, edgebase-corePyPI
C# (Unity/.NET)EdgeBaseNuGet / source copy
Gogithub.com/edge-base/sdk-goGo Modules
PHPedgebase/sdkPackagist
Rustedgebase-admincrates.io
C++ (Unreal)Source distributionGitHub Releases
Rubyedgebase_adminRubyGems
Elixiredgebase_adminHex

Next Steps