Skip to content
STACK IT FAST

Baserow

Curated OSSHybridNo-Code Database Platform6-20 people

Audited from github.com/bram2w/baserow

Baserow is an open-source no-code database and Airtable alternative for building relational databases, automations, and AI agents, offered as a hosted cloud product or self-hosted deployment.

Language
Python
Database
PostgreSQL
Hosting
Docker
Running for
4 years 8 months
Team
6-20 people

Why this architecture

A Django/PostgreSQL core with Nuxt/Vue frontend layers lets Baserow add premium and enterprise features as separate installable packages on top of one open-source base, while Channels and Celery keep realtime sync and background work inside the same deployable unit.

Tech stack by layer

12 technologies · audited Sep 17, 2026
Frontend & UI
  • NuxtVue 4 meta-framework building the main web-frontend app, run through nuxt dev/build.
  • VueComponent framework for the grid, form, and automation UI, shared by core, premium, and enterprise modules.
  • TiptapRich text editor used for long-text fields and comments in the frontend.
Backend & APIs
  • DjangoCore web framework serving the backend/baserow app and its REST endpoints.
  • Django REST FrameworkBuilds the versioned REST API that the Nuxt frontend and public API clients consume.
  • CeleryRuns background jobs, exports, and scheduled tasks via django-celery-beat and celery-redbeat.
  • Django ChannelsServes websocket connections (with Daphne) for realtime table and automation updates.
Data & Persistence
  • PostgreSQLPrimary relational datastore for user data and Baserow application tables.
  • pgvectorPostgres extension used for embeddings in the AI agent and semantic search features.
  • RedisBacks Celery broker/result storage and Django caching (django-redis, django-cachalot).
Infrastructure & Deploy
  • DockerShips as multi-stage images for backend, frontend, and an all-in-one Caddy-fronted bundle.
  • CaddyReverse proxy routing requests between backend and web-frontend in the standard compose setup.
  • HelmKubernetes chart config for deploying Baserow, listed alongside Heroku, Render, and Cloudron targets.(inferred)
Tooling, Testing & Ops
  • MCPModel Context Protocol server dependency exposing Baserow data to AI agents.

Baserow architecture diagram

Open SVG
Baserow architecture diagramweb-frontend → Reverse proxy (HTTPS); API clients → Reverse proxy (API); Reverse proxy → Backend (API); Reverse proxy → Websockets (websockets); Backend → PostgreSQL (Django ORM); Backend → Redis (enqueue); Redis → Celery workers (tasks); Celery workers → Sandbox (formulas · plugins); Websockets → Redis (channel layer)CLIENTSSERVICESWORKERS & JOBSDATA & STORAGEweb-frontendNuxt · VueAPI clientsREST · MCPBackendDjango · DRFReverse proxyCaddyWebsocketsChannels · DaphneCelery workersbeat · redbeatSandboxwasmtime · QuickJS WASIPostgreSQLtables · pgvectorRedisbroker · cacheAPIwebsocketsformulas · pluginsHTTPSAPItasksDjango ORMenqueuechannel layer
How the main components of Baserow connect, drawn from the audited repository.
Diagram as text
  • web-frontend (Nuxt · Vue) → Reverse proxy (Caddy): HTTPS
  • API clients (REST · MCP) → Reverse proxy (Caddy): API
  • Reverse proxy (Caddy) → Backend (Django · DRF): API
  • Reverse proxy (Caddy) → Websockets (Channels · Daphne): websockets
  • Backend (Django · DRF) → PostgreSQL (tables · pgvector): Django ORM
  • Backend (Django · DRF) → Redis (broker · cache): enqueue
  • Redis (broker · cache) → Celery workers (beat · redbeat): tasks
  • Celery workers (beat · redbeat) → Sandbox (wasmtime · QuickJS WASI): formulas · plugins
  • Websockets (Channels · Daphne) → Redis (broker · cache): channel layer

Key architectural decisions

7 decisions
  1. 01

    Backend is a Django monolith split into core, premium, and enterprise apps

    backend/pyproject.toml holds the open-source core, while premium/backend/pyproject.toml and enterprise/backend/pyproject.toml add paid features as separate installable Python packages layered on top of the same Django project.

  2. 02

    Frontend mirrors the backend split as three Nuxt/Vue workspaces

    web-frontend/package.json is the core Nuxt app; premium/web-frontend and enterprise/web-frontend hold matching Vue modules with their own vitest configs (test:premium, test:enterprise scripts), so paid UI ships as additive layers rather than forks.

  3. 03

    Realtime updates go through Django Channels and Daphne, not a separate service

    The channels[daphne] and channels-redis dependencies in backend/pyproject.toml let a single Django process serve both HTTP and websocket traffic, with Redis as the channel layer.

  4. 04

    Untrusted formulas and plugins run inside WASI sandboxes

    backend/Dockerfile builds and bundles Wasmtime and a QuickJS-NG WASI runtime as separate build stages, isolating user-authored code execution from the main Django process.

  5. 05

    Celery plus Redis handles every async workload

    backend/pyproject.toml pulls in celery[redis], django-celery-beat, celery-redbeat, and celery-singleton for scheduled jobs, deduplicated periodic tasks, and background exports/imports.

  6. 06

    Six first-party deploy targets ship in the same repository

    The deploy/ directory contains ready-made configs for Helm, Heroku (app.json), Render (render.yaml), Cloudron, Apache, and Traefik, alongside docker-compose.all-in-one.yml for single-container self-hosting.

  7. 07

    pgvector powers the AI/embeddings feature set directly in Postgres

    The embeddings/ directory runs a dedicated embedding-model service (embeddings/app.py, embeddings/Dockerfile), and backend/pyproject.toml depends on pgvector to store the resulting vectors alongside relational data.

How Baserow is built

How Baserow is structured

Baserow is organized as a Django backend (backend/) paired with a Nuxt/Vue frontend (web-frontend/), with paid features layered on top as parallel packages in premium/ and enterprise/, each carrying its own pyproject.toml and frontend module. This lets the open-source core (backend/pyproject.toml, web-frontend/package.json) stay independently installable while premium and enterprise code adds on top rather than forking the base. A changelog/ package with its own tests manages release notes, and an e2e-tests/ Playwright suite exercises the full stack end to end.

Frontend

The main UI lives in web-frontend/, a Nuxt 4 application ("nuxt": "^4.5.1" in web-frontend/package.json) using Vue 3.5. Rich text fields and comments use Tiptap (opens in a new tab) extensions (@tiptap/vue-3 and a large set of @tiptap/extension-* packages). Data visualization in dashboards uses Chart.js via vue-chartjs, and the diagram/automation canvas uses @vue-flow/core. The frontend has its own Storybook setup (@nuxtjs/storybook, .storybook-style scripts) for isolated component development, and tests run under Vitest with separate configs for core, premium, and enterprise modules (test:core, test:premium, test:enterprise scripts). Styling relies on Sass (.scss files, sass dependency) rather than a utility-CSS framework.

Backend & APIs

backend/pyproject.toml declares Django 5.2 with Django REST Framework and djangorestframework-simplejwt for the versioned REST API, documented via drf-spectacular. Requests can run under either gunicorn (default WSGI) or uvicorn[standard] (ASGI), the latter needed because the same process also serves websockets through channels[daphne] and channels-redis. Background and scheduled work goes through Celery, configured with django-celery-beat for periodic tasks and celery-redbeat/celery-singleton to avoid duplicate scheduled or long-running jobs; flower is included for Celery monitoring. Formula parsing uses an ANTLR-generated grammar (antlr4-python3-runtime, the formula/ directory, and the ANTLR language entry in the repo's language stats).

A notable architectural detail is sandboxed code execution: backend/Dockerfile has dedicated build stages that compile a static su-exec binary and download wasmtime and a QuickJS-NG WASI runtime, giving Baserow a way to run untrusted formulas, automations, or plugin code outside the main Python process.

Data & persistence

PostgreSQL is the system of record, referenced directly in docker-compose.yml (a db service) and supported via psycopg2-binary and dj-database-url in backend/pyproject.toml. The same dependency file adds pgvector for storing embeddings, which backs the AI-agent and semantic-search features described in the repository topics (no-code-database, automations). A separate embeddings/ service (embeddings/app.py, embeddings/Dockerfile) runs the embedding model that produces those vectors. Redis, configured through django-redis (cache) and channels-redis (websocket channel layer), sits alongside Postgres as the second core datastore, also serving as the Celery broker.

Realtime / collaboration

Realtime table and automation updates are pushed over websockets served by Django Channels with Daphne as the ASGI server, using Redis as the channel layer (channels-redis in backend/pyproject.toml). This keeps realtime collaboration inside the same Django deployment rather than requiring a separate websocket service, at the cost of running the backend under an ASGI server for that traffic path.

Build, test & deploy

CI is split across GitHub Actions (ci.yml, run-backend-tests.yml, daily-backend-tests.yml, build-backend-ci-image.yml) and a parallel GitLab CI pipeline (.gitlab-ci.yml plus .gitlab/ includes), reflecting a dual-hosting development workflow. Backend tests run under pytest (backend/pytest.ini), and the frontend suite runs under Vitest with coverage via @vitest/coverage-istanbul and @vitest/coverage-v8. Linting spans eslint, stylelint, and prettier for the frontend, and mypy (backend/mypy.ini) plus pre-commit hooks (.pre-commit-config.yaml) for the backend.

Self-hosting notes

The deploy/ directory bundles first-party configs for Helm/Kubernetes, Heroku (app.json, one dyno with heroku-postgresql and heroku-redis add-ons), Render (render.yaml, a Docker web service plus managed Postgres and Redis), Cloudron, Apache, and Traefik. For plain Docker, docker-compose.all-in-one.yml runs everything from a single image, while the more advanced docker-compose.yml splits backend, frontend, workers, Postgres, and Redis behind a Caddy reverse proxy (Caddyfile) that also terminates websockets and serves uploaded files.

What to copy (and what not to)

The split of core/premium/enterprise into parallel Django apps and Nuxt modules, each independently testable (test:core vs test:premium vs test:enterprise), is a clean pattern for open-core products that want a single deployable artifact. Running realtime updates through Django Channels on the same process, instead of standing up a separate Node/websocket service, keeps operational surface small for a Python-first team, though it does mean the backend must run under an ASGI server (Uvicorn/Daphne) rather than plain WSGI for that traffic. Shipping six ready-made deploy configs in-repo (deploy/) is worth copying for any self-hostable product aiming to reduce first-deploy friction, though it does add maintenance surface that has to track platform changes over time.

Sources & repo audit

Audited
Sep 17, 2026
Commit
479e616
License
NOASSERTION

Independent analysis of repository at github.com/bram2w/baserow. Spotted an inaccuracy? Use the claim form to request a correction.

Show this stack on your README or website
Tech stack of Baserow
[![Tech stack of Baserow on STACK IT FAST](https://stackitfast.com/badge/baserow.svg)](https://stackitfast.com/project/baserow)

Paste it into your README. It shows your current stack and links to this page.

Use this stack

Scaffold it with your agent

Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with Baserow's architecture.

  1. 1Copy the promptThe full markdown spec, with every layer and decision.
  2. 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
  3. 3Paste and scaffoldUse it as the first instruction; review before you ship.
use-this-stack.md · 62 lines · 7.5 KB
# MISSION: Scaffold "Baserow" Production Architecture
You are an expert Senior Staff Software Architect and Full-Stack Engineer. Your mission is to scaffold and implement a production-grade, highly reliable, and modular codebase following the proven architecture of **Baserow**.
---
## 1. PROJECT SPECIFICATIONS & BENCHMARK
- **Reference Architecture**: Baserow
- **What It Does**: Baserow is an open-source no-code database and Airtable alternative for building relational databases, automations, and AI agents, offered as a hosted cloud product or self-hosted deployment.
- **Domain & Category**: No-Code Database Platform
- **Production Scale**: 6-20 people
- **Development Mode**: HYBRID
- **Architectural Rationale**: A Django/PostgreSQL core with Nuxt/Vue frontend layers lets Baserow add premium and enterprise features as separate installable packages on top of one open-source base, while Channels and Celery keep realtime sync and background work inside the same deployable unit.
- **Live Website Reference**: https://baserow.io
- **Source Repository**: https://github.com/bram2w/baserow
---
## 2. PRODUCTION TECH STACK
- **Full Stack Array**: Python, Django, Django REST Framework, PostgreSQL, Vue, Nuxt, TypeScript, Celery, Redis, Django Channels, pgvector, Docker
- **Primary Language(s)**: Python, JavaScript, Vue
- **License of the reference repo**: NOASSERTION
- **Frontend**: Nuxt — Vue 4 meta-framework building the main web-frontend app, run through nuxt dev/build.; Vue — Component framework for the grid, form, and automation UI, shared by core, premium, and enterprise modules.; Tiptap — Rich text editor used for long-text fields and comments in the frontend.
- **Backend & APIs**: Django — Core web framework serving the backend/baserow app and its REST endpoints.; Django REST Framework — Builds the versioned REST API that the Nuxt frontend and public API clients consume.; Celery — Runs background jobs, exports, and scheduled tasks via django-celery-beat and celery-redbeat.; Django Channels — Serves websocket connections (with Daphne) for realtime table and automation updates.
- **Data & persistence**: PostgreSQL — Primary relational datastore for user data and Baserow application tables.; pgvector — Postgres extension used for embeddings in the AI agent and semantic search features.; Redis — Backs Celery broker/result storage and Django caching (django-redis, django-cachalot).
- **Infrastructure & deploy**: Docker — Ships as multi-stage images for backend, frontend, and an all-in-one Caddy-fronted bundle.; Caddy — Reverse proxy routing requests between backend and web-frontend in the standard compose setup.; Helm — Kubernetes chart config for deploying Baserow, listed alongside Heroku, Render, and Cloudron targets.
- **Tooling, testing & ops**: MCP — Model Context Protocol server dependency exposing Baserow data to AI agents.
---
## 3. KEY ARCHITECTURAL DECISIONS (audited from https://github.com/bram2w/baserow @ 479e616)
1. **Backend is a Django monolith split into core, premium, and enterprise apps**: backend/pyproject.toml holds the open-source core, while premium/backend/pyproject.toml and enterprise/backend/pyproject.toml add paid features as separate installable Python packages layered on top of the same Django project.
2. **Frontend mirrors the backend split as three Nuxt/Vue workspaces**: web-frontend/package.json is the core Nuxt app; premium/web-frontend and enterprise/web-frontend hold matching Vue modules with their own vitest configs (test:premium, test:enterprise scripts), so paid UI ships as additive layers rather than forks.
3. **Realtime updates go through Django Channels and Daphne, not a separate service**: The channels[daphne] and channels-redis dependencies in backend/pyproject.toml let a single Django process serve both HTTP and websocket traffic, with Redis as the channel layer.
4. **Untrusted formulas and plugins run inside WASI sandboxes**: backend/Dockerfile builds and bundles Wasmtime and a QuickJS-NG WASI runtime as separate build stages, isolating user-authored code execution from the main Django process.
5. **Celery plus Redis handles every async workload**: backend/pyproject.toml pulls in celery[redis], django-celery-beat, celery-redbeat, and celery-singleton for scheduled jobs, deduplicated periodic tasks, and background exports/imports.
6. **Six first-party deploy targets ship in the same repository**: The deploy/ directory contains ready-made configs for Helm, Heroku (app.json), Render (render.yaml), Cloudron, Apache, and Traefik, alongside docker-compose.all-in-one.yml for single-container self-hosting.
7. **pgvector powers the AI/embeddings feature set directly in Postgres**: The embeddings/ directory runs a dedicated embedding-model service (embeddings/app.py, embeddings/Dockerfile), and backend/pyproject.toml depends on pgvector to store the resulting vectors alongside relational data.
---
## 4. NON-NEGOTIABLE ARCHITECTURAL GUARDRAILS
1. **Monorepo & Modular Separation**:
   - Structure as a Turborepo monorepo with strict package boundaries:
     - `apps/web`: Application UI, routing, layouts, and server endpoints.
     - `packages/ui`: Shared design tokens, CSS variables, and Radix UI primitive components.
     - `packages/db`: Database schemas, client singleton, declarative migrations, and seed scripts.
     - `packages/config`: Shared TypeScript, ESLint, and build configurations.
2. **Strict Type Safety & Zero `any` Policy**:
   - Enable `strict: true`, `noImplicitAny: true`, and `strictNullChecks: true`.
   - Validate ALL external inputs, API request bodies, and query parameters with **Zod** schemas before execution.
3. **Frontend & Rendering Guidelines**:
   - Isolate interactive UI state to leaf components. Keep core pages lightweight and performant.
4. **Design System & Aesthetics**:
   - Keep every color, radius, shadow and font in a single token file (CSS variables) and consume tokens everywhere; never hardcode hex values in components.
   - Prefer crisp 1px borders and one subtle shadow scale over blurry default shadows. Pair one sans-serif for body/headings with one monospace for tags, badges, metrics, and code.
5. **Data Layer & Reliability**:
   - Write declarative schema definitions with foreign keys, composite indexes on queried filters, and automated timestamp triggers.
   - Use connection pooling and prepared statements for serverless database execution.
---
## 5. STEP-BY-STEP SCAFFOLDING ROADMAP
- **Phase 1: Workspace & Root Config**: Initialize package manager, monorepo configuration (`turbo.json`, `tsconfig.base.json`, `package.json`).
- **Phase 2: Database Schema & Client**: Set up the data layer (PostgreSQL, pgvector, Redis): client, connection pool, models, and migration scripts.
- **Phase 3: Design Tokens & UI Primitives**: Build accessible `Button`, `Input`, `Card`, `Badge`, and layout wrappers inside `packages/ui`.
- **Phase 4: Core Application Routes & Handlers**: Implement primary authentication, user session handling, and application routes.
- **Phase 5: Quality Assurance & Build Verification**: Run `tsc --noEmit`, ESLint, Prettier, and smoke test suites to ensure zero compilation or runtime errors.
---
## 6. EXECUTION INSTRUCTIONS
1. Review all specifications, architectural guardrails, and stack choices above.
2. Present the full monorepo directory tree structure.
3. Systematically generate the complete, production-ready codebase according to the 5-phase roadmap above — starting with the root workspace setup, followed by the database schema, UI design system package, and full-stack application routes until the repository is fully scaffolded and ready to run.
Scaffolded something with this prompt?
Would you pick this stack for a no-code database platform project?

Frequently asked about Baserow

What is Baserow built with?

A Django and Django REST Framework backend on PostgreSQL, with a Nuxt/Vue 3 frontend. Realtime sync runs over Django Channels with Daphne, and Celery plus Redis handle background jobs.

Does Baserow need a separate realtime server?

No. Realtime collaboration is served from the same Django process using Django Channels and Daphne, with Redis as the channel layer, so there is no standalone websocket service to run.

Can I self-host Baserow?

Yes. The repository ships ready-made deploy configs for Docker Compose (including an all-in-one image), Helm/Kubernetes, Heroku, Render, Cloudron, Apache, and Traefik in the deploy/ directory.

How does Baserow support AI features?

The backend depends on pgvector for embedding storage in PostgreSQL and on the MCP (Model Context Protocol) package, plus a dedicated embeddings/ service, to expose data to AI agents.

One email a month: new deep dives and stack trends

New source-audited architectures, head-to-head comparisons and the monthly stack report. No spam, unsubscribe anytime.

use-this-stack.md