Open source, self-hosted Backend-as-a-Service built with Go.
Instant REST APIs, auth, file storage, forms, and audit logs. All on your own PostgreSQL database.
CI License Go 1.23 PostgreSQL 17 Docker Stars
🚀 Live Demo • 📚 Docs • ⚡ Quick Start • ❓ FAQ • 🛠️ Development • 🐛 Issues
Fluxend is a self-hosted, open source Backend-as-a-Service (BaaS). It gives you the developer experience of Firebase or Supabase: instant APIs, authentication, and file storage. Your data stays on infrastructure you control.
You define your database tables through the UI or API. Fluxend generates fully functional REST endpoints automatically, backed by PostgreSQL and served through PostgREST. No code generation. No lock-in. No monthly seat fees.
Go 1.23 · Echo · PostgreSQL 17 · PostgREST · Docker · React 19 · TypeScript
| Firebase | Supabase | Appwrite | PocketBase | Fluxend | |
|---|---|---|---|---|---|
| Self-hosted | ✗ | ✓ | ✓ | ✓ | ✓ |
| Open source | ✗ | ✓ | ✓ | ✓ | ✓ |
| Built with Go | ✗ | ✗ | ✗ | ✓ | ✓ |
| PostgreSQL native | ✗ | ✓ | ✗ | ✗ | ✓ |
| Dynamic REST APIs | ✗ | ✓ | ✓ | ✓ | ✓ |
| CSV/XLSX import to API | ✗ | ✗ | ✗ | ✗ | ✓ |
| Multi-tenant orgs + RBAC | limited | ✓ | ✓ | ✗ | ✓ |
| Per-project JWT isolation | ✗ | ✓ | ✗ | ✗ | ✓ |
| S3-compatible storage | ✗ | ✓ | ✓ | ✗ | ✓ |
| Audit logs | ✗ | ✗ | ✓ | ✗ | ✓ |
| Smart forms | ✗ | ✗ | ✓ | ✗ | ✓ |
| License | proprietary | Apache 2 | BSD | MIT | GPL-3.0 |
- JWT authentication with login, registration, token invalidation, and session limits
- Organizations with four roles: Owner, Admin, Developer, and Explorer
- Per-project JWT secrets. Each project gets its own signing secret; a token from one project is rejected by another
- Row-level security enforced at the database level through PostgreSQL roles
- Instant REST APIs. Create a table, get full CRUD endpoints immediately through PostgREST
- Schema management: create, rename, and delete tables and columns through the API or UI
- Index management without writing SQL
- Stored functions: define and call PostgreSQL functions through a REST interface
- CSV and XLSX import. Upload a spreadsheet; Fluxend creates the table and API for you
- Table duplication in one call
- Auto-generated OpenAPI documentation for every project
- File storage with four drivers: S3, Backblaze B2, Dropbox, or local filesystem
- File containers to organize uploads into named buckets
- Download endpoints with access control
- PostgreSQL backups per project, on-demand or scheduled
- Forms with typed fields and validation rules
- Submissions collected and queryable through the API
- Field types: text, number, boolean, and more
- Audit logs on every PostgREST request: user, method, status, and timestamp
- Database statistics: table sizes, row counts, and index usage per project
- Health endpoint to check container and database status across all projects
- Single
docker compose updeploys Caddy, PostgreSQL, the API, and the frontend together - CLI commands to restart PostgREST instances, run migrations, and seed settings
- Sentry integration, opt-in via environment variable
- Per-deployment CORS origin allowlist
Requires Docker and Docker Compose.
git clone https://github.com/fluxend/fluxend.git cd fluxend cp .env.example .env # fill in your values docker compose up -d
Open http://console.yourdomain.com and register the first user.
Full setup guide: docs.fluxend.app/quickstart
flowchart TD
Client([Client app])
Client -->|"1. Authenticate"| API["Fluxend API (Go)"]
API -->|"2. Provision"| PG["Per-project PostgREST processes\nEach with its own JWT signing secret\nProxied through the API at /rest/{project}"]
API -->|"3. Return project-scoped token"| Client
Client -->|"4. Direct data access"| PG
API --- DB[("PostgreSQL 17\nfluxend schema · per-project databases")]
PG --- DB
- Users authenticate against the Fluxend API and receive a JWT.
- Each project provisions a dedicated PostgreSQL database and a PostgREST process with its own signing secret, managed by the API.
- Clients call
GET /projects/:id/tokento get a project-scoped token. - They use that token against the project's API at
/rest/{project}for data access. - Caddy handles TLS termination for the API and console.
Full API reference: docs.fluxend.app
SaaS products
The multi-tenant org structure and per-project RBAC are ready from day one. No extra configuration needed.
Internal tools
Point Fluxend at an existing PostgreSQL schema and get a working data API in minutes. No backend code needed.
Rapid prototyping
Go from idea to working API in under five minutes. Replace Fluxend with a custom service later if you outgrow it; your data stays in Postgres.
Data collection
Use the forms API to collect submissions from external sources without managing a backend.
Firebase or Supabase migration
Move off a vendor-hosted BaaS without rewriting your frontend. Fluxend speaks the same REST patterns.
The codebase is organized as a standard Go project. Backend lives in internal/, frontend in web/.
# Run the test suite go test ./... # Run integration tests (requires local PostgreSQL) go test ./tests/integration/... # Build go build ./cmd/...
See AGENTS.md for architecture notes and coding standards, and docs.fluxend.app/development for the full development guide.
- Check open issues for things to work on
- Open a PR. Reviews are fast.
GPL-3.0. See LICENSE.