This guide covers running Baserow’s backend and frontend natively on your machine, using Docker only for infrastructure services (PostgreSQL, Redis). This approach offers faster iteration, easier debugging, and better IDE integration compared to full Docker development.
Docker - For running PostgreSQL, Redis, and other services
just - Command runner
# macOS
brew install just
# Linux
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/.local/bin
Python 3.14 - For the backend
# macOS
brew install python@3.14
# Linux (Ubuntu/Debian)
sudo apt install python3.14 python3.14-dev
uv - Fast Python package manager
# macOS
brew install uv
# Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
Node.js 24 - For the frontend
# Using nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
nvm install 24
nvm use 24
# macOS with Homebrew
brew install node@24
Yarn - Frontend package manager
npm install -g yarn
Git - Install from https://git-scm.com/downloads
See supported.md for minimum version requirements.
docker -v
just --version
python3 --version
uv --version
node -v
yarn -v
git --version
# Clone the repository
git clone --branch develop https://github.com/baserow/baserow.git
cd baserow
# Initialize backend and frontend (creates venv, installs deps, creates .env.local)
just init
# Start everything (Ctrl+C to stop)
just dev up
Once started, access:
To run in background:
just dev up -d # Start in background
just dev logs # View logs
just dev ps # Check what's running
just dev stop # Stop all services
just dev tmux # Alternative: start tmux session with all services (you need to install tmux first)
The just dev up command orchestrates:
just dev up
├── Docker: db, redis, mailhog, otel-collector
├── Backend: Django dev server (port 8000)
├── Celery: main worker + export worker + beat scheduler
└── Frontend: Nuxt dev server (port 3000)
All processes log to /tmp/:
/tmp/baserow-backend.log/tmp/baserow-celery.log/tmp/baserow-web-frontend.logThe just init command creates .env.local in the project root with sensible defaults, taken from .env.local-dev.example:
# Key settings in .env.local
DATABASE_HOST=localhost
DATABASE_PORT=5432
REDIS_HOST=localhost
REDIS_PORT=6379
SECRET_KEY=<auto-generated>
DJANGO_SETTINGS_MODULE=baserow.config.settings.dev
SYNC_TEMPLATES_ON_STARTUP=false
All backend commands automatically load this file.
Look at Configuration to customize your environment.
Shortcuts: b = backend, f = frontend
All backend commands can be run from the project root with just backend (or just b) or from backend/:
# From project root (just b is shorthand for just backend)
just b test # Run tests
just b lint # Run linters
just b fix # Auto-fix code style
just b shell_plus # Django shell_plus with SQL logging
just b m makemigrations # Create migrations
just b m migrate # Apply migrations
# From backend/
cd backend
just test
just lint
just shell_plus
# From project root (just f is shorthand for just frontend)
just f lint # Run ESLint + Stylelint
just f test # Run Jest tests
just f fix # Auto-fix code style
# From web-frontend/
cd web-frontend
just lint
just test
Works like docker compose logs - services and options can be in any order:
just dev logs # All services (backend, celery, frontend)
just dev logs -f # Follow all logs in real-time
just dev logs backend # Backend only
just dev logs backend celery # Backend and celery
just dev logs -f backend # Follow backend only
just dev logs backend -n 100 # Last 100 lines of backend
just dev logs -n 50 backend celery # Last 50 lines of backend and celery
# Start only database and redis
just dc-dev up -d db redis
# Stop Docker services
just dc-dev stop db redis
# View Docker service logs
just dc-dev logs db
If you prefer more control over each component:
just dc-dev up -d db redis mailhog
cd backend
just init # Creates venv, installs deps
just migrate # Apply migrations
cd backend
just run-dev-server
cd backend
just run-dev-celery
cd web-frontend
just install # Install node_modules
just run-dev-server # Start Nuxt dev server
# Run all tests
just b test
# Run tests in parallel (faster)
just b test -n=auto
# Run specific test file
just b test tests/baserow/core/test_core_models.py
# Run with coverage
just b test-coverage
For 2-5x faster tests, use a PostgreSQL container with tmpfs:
# Start ramdisk database (port 5433)
just test-db start
# Run tests against it
DATABASE_URL=postgres://baserow:baserow@localhost:5433/baserow just b test -n=auto
# Stop when done
just test-db stop
just f test # Run Jest tests
just f test --watch # Watch mode
just b migrate
# or
just b m migrate
just b m makemigrations
just b m makemigrations core # Specific app
just b m createsuperuser
Templates (example databases, forms, etc.) are not synced by default for faster startup:
just b m sync_templates
# Django database shell
just b m dbshell
# Direct PostgreSQL (via Docker)
just dc-dev exec db psql -U baserow
# Stop Docker, remove volumes, restart
just dc-dev down -v
just dc-dev up -d db redis
just b migrate
The Django dev server supports standard Python debugging:
# Add breakpoint in your code
breakpoint() # or: import pdb; pdb.set_trace()
For VS Code, add to .vscode/launch.json:
{
"name": "Django Backend",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/backend/src/baserow/manage.py",
"args": ["runserver", "0.0.0.0:8000"],
"django": true,
"env": {
"DJANGO_SETTINGS_MODULE": "baserow.config.settings.dev"
},
"envFile": "${workspaceFolder}/.env.local"
}
# Run with debug logging
CELERY_LOG_LEVEL=DEBUG just b run-dev-celery
just b uv sync
just f yarn
# Ensure Docker services are running
just dc-dev ps
# Check if PostgreSQL is ready
just dc-dev exec db pg_isready -U baserow
# Verify .env.local settings
grep DATABASE .env.local
# Find what's using the port
lsof -i :8000
lsof -i :3000
# Kill the process or change the port
kill -9 $(lsof -i :8000 | awk 'NR==2 {print $2}')
kill -9 $(lsof -i :3000 | awk 'NR==2 {print $2}')
The justfile defaults to solo pool on macOS to avoid fork() issues:
# Force a different pool if needed
CELERY_POOL=threads just b run-dev-celery
# Clear node_modules and reinstall
rm -rf web-frontend/node_modules
just f install
# Clear Nuxt cache
rm -rf web-frontend/.nuxt