Nexa BaaS
Coming soonAn open-source, self-hosted BaaS platform for mobile and web apps
Authentication, data, files, push, and offline sync: what an app backend needs, all in one. It comes with 12 services, a client SDK, a developer console, and an example app, and you host the server yourself with Docker. The server features other than billing and subscriptions are implemented, and public release is in preparation.
Key Features
- Authentication, users, and permissions (RBAC) Sign-up that starts with email verification (3 approval modes), sign-in and token refresh (rotation and reuse detection), password reset, MFA (TOTP), and Google social login. It also provides user and group management and deny-first (deny > allow > group) permission evaluation.
- Data API + declarative access rules Provides CRUD on collections of JSONB records, with access declared as rules (owner, authenticated, public, permission:key) rather than in code. You can also specify unique constraints that prevent duplicates on a given combination of fields.
- Offline sync Merges offline changes with revision-based delta pull and batch push. Supports 3 conflict policies (last write wins, field merge, server wins), deletion markers (tombstones), and client-generated UUIDs.
- File storage Presigned direct uploads that bypass the server save bandwidth, and large files use resumable multipart uploads. It reuses the same access rules as the Data API, and orphaned files are cleaned up automatically.
- Scheduled push (reminders) Once a device is registered, a single scheduling call sends a push at the time you choose. Scheduling runs on a delay queue (BullMQ), with a delivery ledger and a recovery sweep.
- Webhooks and connectors Events are written atomically to an outbox inside the domain transaction so none are lost, and delivered with HMAC signatures and exponential backoff retries. Provides Slack, Telegram, and KakaoWork connectors, along with delivery history and resend.
- Developer console Sign in with a developer account to create projects, and manage users, the data playground, webhook registration, OAuth credentials, logs, and the usage dashboard on screen.
- Client SDK with 0 dependencies @nexa/sdk runs with no external dependencies. A single sync option on a collection makes it offline-first, and local storage is handled with IndexedDB on the web and an injected SQLite driver on React Native.
- PostgreSQL RLS multi-tenancy Row Level Security isolates data between projects (tenants) at the database level. Every request runs inside a transaction with the tenant context set.
- Plan limits and usage metering The server automatically enforces per-plan limits on user count and storage capacity, and usage is aggregated daily so you can check 7-, 30-, and 90-day trends in the console.
- Per-project OAuth (BYO OAuth) When a developer registers their own Google credentials (stored with AES-GCM encryption), the consent screen shows the developer's app brand. If none are registered, it falls back to the server default.
- Docker self-hosting Use docker compose to start PostgreSQL, Redis, and object storage, then run the API and console. External technologies are wrapped in adapters, so the runtime can be replaced.
About
Nexa BaaS is a Backend-as-a-Service platform for mobile and web app developers. It provides, in a single server, the authentication, permissions, data storage, file uploads, and push notifications that you would otherwise rebuild for every app, and developers deploy and run it on their own servers.
12 services are currently implemented: authentication (email-verified sign-up, social login, MFA), users, groups, and permissions (RBAC), the Data API, file storage, scheduled push (reminders), offline sync, webhooks, the developer console, plan limits, usage metering, log management, and per-project OAuth credentials (BYO OAuth).
Offline sync received particular attention. Even when a client uploads changes it wrote without a network later on, the server exchanges only deltas based on revisions, and conflicts are handled by a choice of three policies (last write wins, field merge, server wins). End-to-end verification with two clients connected to a real server is complete.
Clients connect through a dedicated SDK (@nexa/sdk) with no dependencies at all. A single sync: true line on a collection makes it offline-first, with local storage in IndexedDB on the web and SQLite on React Native. In the developer console (web), you create projects and manage data, webhooks, OAuth, and usage on screen.
Multi-tenancy is handled with PostgreSQL Row Level Security, so data between projects is isolated at the database level. External technologies are wrapped in adapters so they can be replaced, and the whole thing is built with feature-level TDD in a pnpm + Turborepo monorepo. 296 server tests + 71 SDK tests are passing, and an integration suite of 16 tests that starts real PostgreSQL and Redis containers is run separately.
It has not been publicly released yet. What remains is end-to-end verification that requires real credentials (sending push, real webhook delivery, and so on), legal review of the terms, and payment integration; when preparation is complete, installation instructions and downloads will be added to this page.
Release Notes
Development status 2026-10-12 12 server services, the SDK, the developer console, and an example app are complete — not yet publicly released.
Done
- 12 services implemented — authentication · users/groups/RBAC · Data API · file storage · reminders · offline sync · webhooks · developer console · plan limits · usage metering · log management · BYO OAuth.
- Offline sync end-to-end verification — confirmed delta sync and conflict handling with two clients connected to a real server.
- File storage verified with a real account — confirmed presigned direct uploads and multipart resume on real object storage.
- Client SDK (@nexa/sdk) — 0 dependencies, offline-first collections, local storage on the web (IndexedDB) and React Native (SQLite).
- Developer console — manage everything on screen, from project creation to data, webhooks, OAuth, logs, and the usage dashboard.
- Example app Nexa Words — an offline-first vocabulary app. Provided as an SDK usage example, with an unsent badge, manual and automatic sync, conflict notifications, and merging of duplicate words (completed 2026-07-13).
- Tests — 296 server tests + 71 SDK tests passing, with an integration suite of 16 tests that starts real PostgreSQL and Redis containers run separately.
- Run and test guide — documents how to run it at each level of setup (local only / DB / Docker / real credentials) and the boundary between what is and is not implemented.
Remaining
- End-to-end verification that requires real credentials — sending push (FCM), real webhook delivery, and the per-project Google consent screen.
- Legal review of the terms and privacy policy drafts — a prerequisite for public release.
- Payments and subscription billing are not implemented yet (only plan limits and usage aggregation work).
Notice
- It has not been publicly released yet, and no downloads or installation instructions are provided. The repository is also private. When preparation is complete, installation instructions and links will be added to this page. You can preview the service layout and SDK usage concepts in the user guide.
Terms & Policies
No terms or policy documents are registered.
Contact: [email protected]