Install

Two paths work today: the Docker image and an install from source. Both bring an embedded PostgreSQL database and a demo company.

As of November 2026 there is no tagged release yet. Desktop installers (.exe, .dmg, .deb) and the PyPI package are prepared but not published. The image tagged edge is built from the main branch.

System requirements

DockerDocker Engine with Compose v2 (Linux) or Docker Desktop (Windows, macOS). Image for amd64 and arm64
MemoryAt least 3 GB on a dedicated server. The project docs call this a floor, not a recommendation
From sourcePython 3.12 or newer, Node.js 22 or newer, Git
DatabaseEmbedded PostgreSQL in the data directory (default), or your own PostgreSQL 16+ server via DATABASE_URL
Port8080 (Docker), 8000 and 5173 (development from source)

Which path for what

DockerOne command, data in a volume. For testing and for production use in a small firm.
Docker ComposeDatabase and application separate, for a server.
SourceFor development, or when you have no Docker.

1. Docker (Windows, macOS, Linux)

One container with the application and its database; all data lives in the obe-data volume. On Windows and macOS, install Docker Desktop first.

Shell
$ docker run -d --name openbusinesserp --restart unless-stopped -p 8080:8080 -v obe-data:/data ghcr.io/datadrivenconstruction/openbusinesserp:edge

After about a minute, open http://localhost:8080. docker logs -f openbusinesserp shows the progress.

2. Docker Compose with a separate PostgreSQL container

For a server where the database and the application run separately. The files come from the repository; OE_IMAGE_TAG=edge is needed because there is no latest tag yet.

Shell
$ mkdir openbusinesserp && cd openbusinesserp
$ curl -fsSL https://raw.githubusercontent.com/datadrivenconstruction/OpenBusinessERP/main/docker-compose.quickstart.yml -o docker-compose.yml
$ curl -fsSL https://raw.githubusercontent.com/datadrivenconstruction/OpenBusinessERP/main/docker-compose.quickstart.image.yml -o docker-compose.override.yml
$ echo "POSTGRES_PASSWORD=$(openssl rand -base64 24)" >  .env
$ echo "JWT_SECRET=$(openssl rand -hex 32)"           >> .env
$ echo "OE_IMAGE_TAG=edge"                            >> .env
$ docker compose pull app
$ docker compose up -d

3. From source (Windows, macOS, Linux)

For development, or to try it without Docker. The backend starts the embedded database itself; the interface runs as a development server.

Terminal 1: backend · macOS and Linux
$ git clone https://github.com/datadrivenconstruction/OpenBusinessERP.git
$ cd OpenBusinessERP/backend
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -e ".[server]"
$ openbusinesserp serve --port 8000
Terminal 1: backend · Windows (PowerShell)
> git clone https://github.com/datadrivenconstruction/OpenBusinessERP.git
> cd OpenBusinessERP\backend
> py -3.12 -m venv .venv
> .venv\Scripts\Activate.ps1
> pip install -e ".[server]"
> openbusinesserp serve --port 8000
Terminal 2: interface
$ cd OpenBusinessERP/frontend
$ npm install
$ npm run dev

Then open http://localhost:5173.

First sign-in

The sign-in page offers demo accounts. The demo administrator is demo@openbusinesserp.com with the password DemoPass1234!. For your own company, the setup wizard at /setup walks through company details, tax, bank, logo, outgoing mail and the first invoice.

On a server reachable from the internet: turn the demo data off with SEED_DEMO=false, create your own administrator and put HTTPS in front through a reverse proxy.

Backup

A complete backup has two parts: the database, and the data directory with uploaded files, logo and settings. The backup function in the interface exports one user’s records only and is not a company backup.

Docker (single container): stop the container, archive the volume, start again
$ docker stop openbusinesserp
$ docker run --rm -v obe-data:/data -v "$PWD":/out alpine tar czf /out/obe-data-$(date +%F).tar.gz -C /data .
$ docker start openbusinesserp
Docker Compose: database dump and data directory
$ docker compose exec -T postgres pg_dump -U oe -Fc openestimate > backup-$(date +%F).dump
# check the volume name with docker volume ls (prefixed with the project name)
$ docker run --rm -v openbusinesserp_app_data:/data -v "$PWD":/out alpine tar czf /out/app-data-$(date +%F).tar.gz -C /data .

From source: quit the program, then copy the .openestimate folder in your home directory (or the folder in OE_DATA_DIR). A copy taken while the database runs is unusable.

Keep copies on another machine, and test a restore before you need one. Backup and restore in the manual.

Updates

Back up first. On start, the application brings the database schema up to date itself.

Docker (single container)
$ docker pull ghcr.io/datadrivenconstruction/openbusinesserp:edge
$ docker stop openbusinesserp && docker rm openbusinesserp
$ docker run -d --name openbusinesserp --restart unless-stopped -p 8080:8080 -v obe-data:/data ghcr.io/datadrivenconstruction/openbusinesserp:edge
Docker Compose
$ docker compose pull app
$ docker compose up -d
From source
$ git pull
$ cd backend && pip install -e ".[server]"
$ cd ../frontend && npm install

After installing

Detailed guides in the repository