A self-hosted Backend-as-a-Service (BaaS) platform β Build backends without writing backend code.
Backendify is an open-source alternative to Firebase/Supabase that you can run on your own infrastructure. Define your data schema through a visual UI, and get instant REST APIs with authentication, authorization, and real-time capabilities.
- Create collections (tables) with a visual UI
- Support for multiple field types:
string,int,float,boolean,datetime,text,json - Define relationships:
belongs_to,has_many - Automatic migrations β no SQL required
- Admin Users: Console access for project management
- App Users: End-user authentication for your applications
- JWT access tokens + refresh token rotation
- API key authentication for server-to-server communication
- Row-level security policies
- Per-collection, per-action access control (
create,read,update,delete,list) - Principal-based permissions:
admin_user,app_user,api_key,anonymous - Condition-based rules (e.g., "users can only edit their own records")
- Email verification requirements
- Filtering:
?field=value,?field__gt=100,?field__contains=text - Operators:
eq,neq,gt,gte,lt,lte,contains,startswith,endswith,in,notin,isnull - Sorting:
?sort=-created_at,name(prefix with-for descending) - Pagination:
?limit=50&offset=0
- Browse, create, edit, and delete records
- Visual data management interface
- Export and import data
- Track all data changes automatically
- Filter by user, action, collection, date
- Compliance and debugging support
- HTTP callbacks on data events
- Configurable per collection
- Retry with exponential backoff
- Automate actions on events
- Chain multiple operations
- Template variables for dynamic data
- Track pending schema changes
- Apply migrations safely
- Version control for your schema
belongs_to(many-to-one)has_many(one-to-many)- Query related data easily
- Virtual collections with joins
- Pre-filtered data
- Aggregations and computed fields
- Field-level validation rules
- Email, URL, regex, min/max, enum
- Custom error messages
- Upload and manage files
- Organize in folders
- Secure access control
- End-user authentication
- Separate from admin auth
- JWT tokens with refresh
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Your Application β
β (React, Vue, Mobile, etc.) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backendify API β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
β β Auth β β Data β β Schema β β Policies β β
β β /auth β β /data β β /schema β β /policies β β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PostgreSQL β
β (Dynamic tables per project/collection) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Docker & Docker Compose
git clone https://github.com/yourusername/backendify.git
cd backendify
cp .env.example .envdocker compose up --build| Service | URL |
|---|---|
| Admin Console | http://localhost:5173 |
| API Docs (Swagger) | http://localhost:8000/docs |
| API (ReDoc) | http://localhost:8000/redoc |
- Register an admin account at http://localhost:5173/register
- Create a new project
- Use the Schema Builder to define collections
- Configure policies for access control
- Start using the REST API!
# Register
POST /api/auth/register
{ "email": "admin@example.com", "password": "securepass" }
# Login
POST /api/auth/login
{ "email": "admin@example.com", "password": "securepass" }
# Returns: { "access_token": "...", "refresh_token": "..." }# Register app user
POST /api/projects/{project_id}/auth/register
{ "email": "user@example.com", "password": "userpass" }
# Login app user
POST /api/projects/{project_id}/auth/login
{ "email": "user@example.com", "password": "userpass" }# List records (with filtering & sorting)
GET /api/projects/{project_id}/data/{collection}?published=true&sort=-created_at
# Get single record
GET /api/projects/{project_id}/data/{collection}/{id}
# Create record
POST /api/projects/{project_id}/data/{collection}
{ "title": "Hello World", "content": "..." }
# Update record
PATCH /api/projects/{project_id}/data/{collection}/{id}
{ "title": "Updated Title" }
# Delete record
DELETE /api/projects/{project_id}/data/{collection}/{id}| Operator | Example | Description |
|---|---|---|
eq (default) |
?status=active |
Equals |
neq |
?status__neq=deleted |
Not equals |
gt / gte |
?price__gte=100 |
Greater than (or equal) |
lt / lte |
?price__lt=500 |
Less than (or equal) |
contains |
?name__contains=john |
Contains substring |
startswith |
?name__startswith=A |
Starts with |
endswith |
?email__endswith=@gmail.com |
Ends with |
in |
?status__in=active,pending |
Value in list |
notin |
?status__notin=deleted |
Value not in list |
isnull |
?deleted_at__isnull=true |
Is null |
| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | postgresql://... |
JWT_SECRET |
Secret key for JWT tokens | (required) |
JWT_ALGORITHM |
JWT algorithm | HS256 |
ACCESS_TOKEN_EXPIRE_MINUTES |
Access token TTL | 30 |
REFRESH_TOKEN_EXPIRE_DAYS |
Refresh token TTL | 7 |
CORS_ORIGINS |
Allowed CORS origins | * |
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reloadcd frontend
npm install
npm run devcd backend
pytestbackendify/
βββ backend/
β βββ alembic/ # Database migrations
β βββ app/
β β βββ api/
β β β βββ routes/ # API endpoints
β β β βββ deps.py # Dependencies (auth, db)
β β βββ core/ # Config, security
β β βββ models/ # SQLAlchemy models
β β βββ schemas/ # Pydantic schemas
β β βββ services/ # Business logic
β β βββ main.py # FastAPI app
β βββ requirements.txt
βββ frontend/
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ routes/ # Page components
β β βββ lib/ # API client, auth helpers
β β βββ main.tsx
β βββ package.json
βββ examples/
β βββ blog-app/ # Example blog application
β βββ todo-app/ # Example todo application
βββ docker-compose.yml
βββ README.md
A full-featured blog with categories, posts, and comments. See examples/blog-app/.
cd examples/blog-app
npm install
npm run devA simple todo list demonstrating CRUD operations. See examples/todo-app/.
- Dynamic schema builder
- JWT authentication (admin + app users)
- API key authentication
- Row-level security policies
- Advanced filtering & sorting
- Audit logs
- Webhooks
- Field validations
- File/media storage
- Email verification flow
- Real-time subscriptions (WebSocket)
- OAuth/Social login
- Rate limiting
- GraphQL API
Contributions are welcome! Please read our contributing guidelines before submitting a PR.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- FastAPI - Modern Python web framework
- SQLAlchemy - Python SQL toolkit
- React - UI library
- TanStack Router - Type-safe routing
- Tailwind CSS - Utility-first CSS
- shadcn/ui - UI components
Made with β€οΈ by the Backendify team













