Deploy Baserow
Spreadsheet-style database your team edits together in a browser
backend
Just deployed
Just deployed
/var/lib/postgresql/data
baserow
Just deployed
Redis
Just deployed
/data
web-frontend
Just deployed
celery-beat
Just deployed
celery-worker
Just deployed
mailpit
Just deployed
/data
celery-export-worker
Just deployed
baserow-files
Bucket
Just deployed
Deploy and Host Baserow on Railway
Baserow is an open-source no-code database — spreadsheet-style tables that are really PostgreSQL tables underneath, with grid, kanban and calendar views, forms, an application builder and a REST API. Teams use it the way they use Airtable: an inventory list, a lightweight CRM, a form colleagues submit to. Self-host Baserow and the per-seat pricing disappears, along with any question about where the rows live.
This deploys Baserow in the split-role shape its maintainers document for production, not the all-in-one container: the Django API (baserow/backend), the Nuxt interface (baserow/web-frontend), three Celery tiers, a router giving both one domain, managed PostgreSQL and Redis, an object-storage bucket, and a mail inbox so password resets work as soon as the deploy is green. Source: github.com/bram2w/baserow.

Getting Started with Baserow on Railway
Open the public URL of the baserow service. Because no user exists yet, Baserow serves a Create account page instead of a login form and grants staff rights to the first account made — there are no default credentials to change. Fill it in and walk the onboarding wizard, which creates your first workspace, database and table.
Click a cell and start typing. Add fields with the + at the right of the header row — single select, date, file, formula and link-to-table are all there. Attach an image to a file field to confirm object storage is wired: it uploads to the bucket and comes back as a signed URL, and the row panel logs a change entry for every edit. Visit /admin/health to check the whole stack at once, then open /admin/settings and turn off Allow creating new accounts.

About Hosting Baserow
Baserow stores every user table as a genuine PostgreSQL table, so a database built in the UI is queryable, indexable and backed up like any other schema — the reason to self-host it rather than use a closed SaaS.
- Grid, gallery, kanban, calendar and form views, edited collaboratively in real time
- 25+ field types: formulas, rollups, link-to-table, files, select fields
- REST API per table, scoped database tokens, webhooks on row events
- Application builder and automations over the same data
- Row history, trash, snapshots, workspace permissions, 150+ templates
Architecturally it is a Django ASGI backend serving HTTP and WebSockets, a Nuxt server rendering the UI, and three Celery roles: a worker for notifications and webhooks, an export worker for slow jobs, and a beat scheduler. Redis carries the broker, schedule, cache and realtime channel layer. A Caddy router in front sends /api, /ws, /mcp and /assistant to the backend and everything else to the frontend, so the browser only talks to one origin.
Why Deploy Baserow on Railway
Baserow's own compose file is six containers, a shared volume and a reverse proxy. This replaces all of it.
- Managed PostgreSQL and Redis, provisioned and connected for you
- Object storage instead of a shared upload volume, signed URLs included
- Private networking between services; no ports exposed by hand
- Managed TLS, custom domains, one-click redeploys, health checks everywhere
Common Use Cases
- Internal CRM or asset register — a shared table with workspace permissions and a form view colleagues submit to
- Airtable replacement without per-seat billing — same interface, unlimited collaborators, your own database
- Backend for a side project — every table exposes a REST API and scoped tokens
- Field data collection — file fields on object storage, so photos attach to rows
Dependencies for Baserow
baserow/backend:2.3.3— Django API, and the same image for all three Celery rolesbaserow/web-frontend:2.3.3— Nuxt user interfacecaddy:2.11.4-alpine— path router giving the API and UI a single originaxllent/mailpit:latest— SMTP inbox for password resets and invitations- PostgreSQL — every user table, plus Baserow's own schema
- Redis — broker, results, schedule, cache, realtime channels
- Object storage bucket — file uploads and thumbnails
Keep all five Baserow services on the same version tag — they share a schema and a token format, so a mismatch fails quietly.
Environment Variables Reference
| Variable | Description | Required |
|---|---|---|
SECRET_KEY / BASEROW_JWT_SIGNING_KEY | Signing keys; stable, identical on all five | Yes |
BASEROW_PUBLIC_URL | Used in emails, share links and CORS | Yes |
DATABASE_URL / REDIS_URL | Connection strings | Yes |
AWS_STORAGE_BUCKET_NAME | Enables S3 storage; unset means local disk | Yes |
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_S3_ENDPOINT_URL / AWS_S3_REGION_NAME | Bucket credentials, endpoint, region | Yes |
BASEROW_ENABLE_SECURE_PROXY_SSL_HEADER | Trust X-Forwarded-Proto for HTTPS links | Yes |
BASEROW_AMOUNT_OF_WORKERS | Celery concurrency; unset forks per host core | Yes |
EMAIL_SMTP_HOST / EMAIL_SMTP_PORT | Your own relay, to deliver mail | No |
SYNC_TEMPLATES_ON_STARTUP | Import the built-in template library | No |
BASEROW_FILE_UPLOAD_SIZE_LIMIT_MB | Per-file upload ceiling | No |
Deployment Dependencies
- github.com/bram2w/baserow · Docker Hub · docs
- Runtime: Python/Django, Node/Nuxt, PostgreSQL 12+, Redis 6+
Hardware Requirements for Self-Hosting Baserow
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU across all services | 4+ vCPU |
| RAM | 2 GB total | 4–8 GB |
| Storage | 5 GB for PostgreSQL | 20 GB+, uploads on object storage |
| PostgreSQL / Redis | 12 / 6 | 15+ / 7+ |
First boot imports the template library on the export worker — the heaviest thing Baserow does to the database. Set SYNC_TEMPLATES_ON_STARTUP=false on a small instance.
How to Self-Host Baserow Outside Railway
The quickest path is the all-in-one image, which bundles every component plus its own PostgreSQL and Redis. Run it with Docker:
docker run -d --name baserow \
-e BASEROW_PUBLIC_URL=http://localhost \
-v baserow_data:/baserow/data \
-p 80:80 -p 443:443 \
baserow/baserow:2.3.3
For the split-role shape used here, clone the repository and run its multi-service compose file:
git clone https://github.com/bram2w/baserow.git && cd baserow
cp .env.example .env # set SECRET_KEY, DATABASE_PASSWORD, REDIS_PASSWORD, BASEROW_PUBLIC_URL
docker compose up -d
How Much Does Baserow Cost to Self-Host?
Baserow's core is open source under the MIT licence, and the self-hosted open-source edition has no seat limit, no row cap and no time limit — it costs only the infrastructure it runs on. Paid Premium and Advanced licences add extras such as row colouring, admin tooling and SSO, priced per active user; Enterprise is quoted per organisation. On Railway you pay for compute and storage only.
Baserow vs NocoDB vs Airtable
| Baserow | NocoDB | Airtable | |
|---|---|---|---|
| Open source | Yes (MIT core) | Yes (Fair Code) | No |
| Owns its database | Yes | No — wraps an existing one | N/A |
| Real-time collaboration | Yes | Refresh required | Yes |
| Self-hosted pricing | Infrastructure only | Infrastructure only | Per seat |
Pick Baserow for an Airtable-style product that owns its storage; pick NocoDB to put a grid over a database you already run.
FAQ
What is Baserow? An open-source no-code database. You build tables through a spreadsheet-like interface and Baserow stores them as real PostgreSQL tables with a REST API.
What does this Railway template deploy? Nine services — the API, the web interface, a Celery worker, an export worker, a beat scheduler, the router holding the public domain, PostgreSQL, Redis and a mail inbox — plus an object-storage bucket.
Why does the template include PostgreSQL, Redis and a storage bucket? PostgreSQL holds every table you create. Redis is the Celery broker, the scheduler's lock, the cache and the realtime channel layer, so exports, webhooks and notifications move through it. The bucket holds uploads and thumbnails that several services read.
How do I create the first admin account in self-hosted Baserow?
Open the public URL. While no user exists Baserow shows a Create account page and grants staff rights to whoever completes it. Then disable sign-ups under /admin/settings.
Can I use the Baserow REST API from my own application?
Yes. Every table has REST endpoints and you can mint database tokens with per-table create, read, update and delete scopes. Docs live at /api/redoc/.
Does self-hosted Baserow send email? The included inbox captures mail, so password resets and invitations are readable at once. Point the SMTP variables at your own provider to deliver externally.
Can I run Baserow in production on Railway? Yes — this is the multi-service shape Baserow documents for production. Scale the workers and backend independently, and keep exactly one beat scheduler: it is what stops periodic jobs firing twice.
Template Content
backend
baserow/backend:2.3.3baserow
gridalpha/baserow-railwayRedis
redis:8.2web-frontend
baserow/web-frontend:2.3.3celery-beat
baserow/backend:2.3.3celery-worker
baserow/backend:2.3.3mailpit
axllent/mailpit:latestcelery-export-worker
baserow/backend:2.3.3baserow-files
Bucket