Self-host Mathesar
updated Sep 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A spreadsheet-like web interface that works directly on PostgreSQL databases, schemas and tables, with access control built on Postgres roles and privileges, a data explorer for queries and a form builder.
Airtable / yr$288
Self-hosted / yr~$283
You keep$5/yr
Pocket the difference — spin it up on a cheap VPS in minutes.Start free on Kamatera → (opens in new tab)
Key facts
CategoryNo-code database
LicenseGPL-3.0
StackPython, Django, Svelte
Min RAM1024 MB
Official imageyes
Measured idle RAM273 MB
Difficulty
What you need
- Any VPS with at least 1024 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + USKamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + AsiaDigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + AsiaPaid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# Mathesar — upstream's Docker Compose file (docs.mathesar.org, install via Docker Compose): app + PostgreSQL + Caddy
mkdir -p mathesar && cd mathesar
wget -q https://github.com/mathesar-foundation/mathesar/raw/0.12.0/docker-compose.yml
printf 'DOMAIN_NAME=http://SERVER_IP\nPOSTGRES_PASSWORD=%s\nSECRET_KEY=%s\n' "$(openssl rand -hex 16)" "$(openssl rand -hex 32)" > .env
docker compose up -d # → http://SERVER_IP:80
# the first visit asks you to create the admin user; set DOMAIN_NAME to your domain to get automatic HTTPS from the bundled CaddyAn alternative to
More in No-code database
No-code database
Baserow
PythonDjangoVue
easyRead guide →
No-code database
Grist
TypeScriptNode.jsPython
easyRead guide →
No-code database
NocoDB
TypeScriptNestJSVue
easyRead guide →
No-code database
Teable
TypeScriptNestJSNext.js
easyRead guide →