Odoo 20 install guide

How to install Odoo 20

Odoo 20 is here. This guide walks you through every way to get it running — a hosted trial, Docker, the Ubuntu/Debian package, a full source install, Windows and macOS — with the exact, copy-paste commands for each. Pick the method that matches your goal and follow the steps top to bottom.

Updated September 24, 2026 · by Niyu Labs · about 9 min read

Just launched

Odoo 20 is unveiled at Odoo Experience 2026 in Brussels (24–26 September 2026). The 20.0 source branch is live on GitHub right now, and the packaged installers and Docker images publish on nightly.odoo.com in the days around the announcement. If a package or image is not available yet in your region, use the source install below, which always works from day one.

What's new in Odoo 20

A quick orientation before you install — so you know what you are getting.

Odoo 20 is the 2026 major release of the open-source ERP. Its headline is AI: Odoo moves from AI that drafts text to agentic AI that can take actions across apps — alongside a redesigned mobile experience and refinements across accounting, inventory, CRM, sales and payroll. Under the hood the baseline is now Python 3.12, with PostgreSQL as the database. The install process is close to Odoo 19, so if you have done this before, most of it will feel familiar.

Already on Odoo 20? Add AI to it

Once you are running, Niyu Labs builds AI-native tools for Odoo — an MCP server that lets AI clients read and act on your Odoo data, and Smart Stock for AI demand forecasting and replenishment.

Choose an install method

There is no single right way to install Odoo 20 — it depends on what you are trying to do.

MethodBest forEffort
Odoo OnlineTrying Odoo 20, no serverNone
DockerQuick self-host, clean teardownLow
Ubuntu/Debian packageSimple production on LinuxLow
SourceModule development, full controlMedium
Windows / macOSLocal desktop testingLow–Medium

System requirements

What every self-hosted install needs before you start.

  • Operating system: Ubuntu 24.04 LTS or Debian for servers; Windows or macOS for local testing
  • Python 3.12 or later (the minimum for Odoo 20)
  • PostgreSQL 14 or newer as the database
  • At least 2 GB RAM to evaluate; 4 GB RAM and 2 vCPUs for a small production instance
  • Root or sudo access, and outbound internet to fetch packages

1. Odoo Online — no installation

The fastest way to see Odoo 20. Nothing to install, nothing to maintain.

Go to odoo.com/trial, pick your first app, and Odoo provisions a hosted Odoo 20 database for you in seconds. This is ideal for evaluating the software or for teams that do not want to run a server. The free plan covers a single app; add more apps or use custom code and you move to a paid plan or to self-hosting with one of the methods below.

2. Install Odoo 20 with Docker

The quickest self-hosted route: one container for PostgreSQL, one for Odoo.

With Docker installed, start a database container, then start Odoo 20 linked to it:

Terminal — start PostgreSQL
docker run -d \
  -e POSTGRES_USER=odoo \
  -e POSTGRES_PASSWORD=odoo \
  -e POSTGRES_DB=postgres \
  --name db postgres:16
Terminal — start Odoo 20
docker run -p 8069:8069 --name odoo --link db:db -t odoo:20.0

Open http://localhost:8069 and you are in. For a setup you can bring up and tear down with one command, use Docker Compose instead:

docker-compose.yml
services:
  web:
    image: odoo:20.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
    environment:
      - HOST=db
      - USER=odoo
      - PASSWORD=odoo
  db:
    image: postgres:16
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo
    volumes:
      - odoo-db-data:/var/lib/postgresql/data
volumes:
  odoo-web-data:
  odoo-db-data:
Terminal
docker compose up -d

If the 20.0 tag isn't published yet

Right after launch the odoo:20.0 image may still be building. Check the available tags on Docker Hub; once it is live, odoo:20.0 pulls the exact release, while odoo:latest tracks the newest stable series.

3. Install Odoo 20 on Ubuntu / Debian (package)

The simplest production install on Linux: add Odoo's repository and apt-get it.

This installs Odoo 20 as a system service and pulls in PostgreSQL and wkhtmltopdf as dependencies. First add Odoo's signed nightly repository for the 20.0 series:

Terminal — add the repository
sudo apt update && sudo apt upgrade -y

# Add Odoo's signed nightly repository for the 20.0 series
wget -q -O - https://nightly.odoo.com/odoo.key \
  | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg

echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/20.0/nightly/deb/ ./' \
  | sudo tee /etc/apt/sources.list.d/odoo.list

Then install and check the service:

Terminal — install Odoo 20
sudo apt update
sudo apt install -y odoo

# Odoo starts automatically and is enabled on boot
sudo systemctl status odoo

Browse to http://your-server-ip:8069 to create your first database. The config file lives at /etc/odoo/odoo.conf and logs at /var/log/odoo/.

4. Install Odoo 20 on Ubuntu 24.04 from source

The full install for developers and teams who want control over every dependency. These are the seven steps below, expanded with the exact commands.

  1. 1

    Update the server and install build dependencies

    Refresh the package index, then install Git, Python 3.12, PostgreSQL client libraries and the image/XML libraries Odoo compiles against.

  2. 2

    Install and prepare PostgreSQL

    Install the database server and create an 'odoo20' role that owns the Odoo databases.

  3. 3

    Install wkhtmltopdf

    Odoo needs the patched wkhtmltopdf 0.12.6.1 build to render PDF quotations, invoices and reports correctly.

  4. 4

    Create a system user and clone Odoo 20

    Add a dedicated 'odoo20' user and clone the 20.0 branch from GitHub into /opt/odoo20/odoo.

  5. 5

    Create a virtual environment and install requirements

    Build an isolated Python environment and install the exact dependencies pinned in Odoo 20's requirements.txt.

  6. 6

    Write the configuration file

    Create /etc/odoo20.conf with the admin master password, the database user, and the addons path, then lock its permissions.

  7. 7

    Run Odoo as a systemd service

    Register a systemd unit so Odoo 20 starts on boot, restarts on failure, and is managed with systemctl. Then open http://your-server-ip:8069.

Step 1 — Update and install dependencies

Terminal
sudo apt update && sudo apt upgrade -y
Terminal — build dependencies
sudo apt install -y git python3 python3-pip python3-dev python3-venv \
  build-essential wget \
  libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libpq-dev \
  libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev libfreetype6-dev \
  liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev \
  node-less npm

Step 2 — Install PostgreSQL and create the user

Terminal
sudo apt install -y postgresql
sudo -u postgres createuser -s odoo20

Step 3 — Install wkhtmltopdf

Terminal
sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb

Use the patched build

Odoo needs the patched wkhtmltopdf 0.12.6.1 to render PDFs correctly. The jammypackage works on Ubuntu 24.04; the version in Ubuntu's own repositories is not patched and produces broken headers and footers.

Step 4 — Create the user and clone Odoo 20

Terminal
# Create a dedicated system user and clone the 20.0 branch
sudo useradd -m -d /opt/odoo20 -U -r -s /bin/bash odoo20
sudo su - odoo20 -s /bin/bash
git clone https://github.com/odoo/odoo.git --depth 1 --branch 20.0 --single-branch /opt/odoo20/odoo

Step 5 — Virtual environment and Python packages

Terminal (as the odoo20 user)
cd /opt/odoo20
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip wheel
pip install -r odoo/requirements.txt
deactivate
exit

Step 6 — Configuration file

Create /etc/odoo20.conf with the following contents, then lock down its permissions:

/etc/odoo20.conf
[options]
admin_passwd = CHANGE_ME_to_a_strong_master_password
db_host = False
db_port = False
db_user = odoo20
db_password = False
addons_path = /opt/odoo20/odoo/addons
logfile = /var/log/odoo20/odoo20.log
xmlrpc_port = 8069
Terminal — logs & permissions
sudo mkdir -p /var/log/odoo20
sudo chown odoo20:odoo20 /var/log/odoo20
sudo chmod 640 /etc/odoo20.conf
sudo chown odoo20:odoo20 /etc/odoo20.conf

Step 7 — Run Odoo 20 as a service

Create /etc/systemd/system/odoo20.service:

/etc/systemd/system/odoo20.service
[Unit]
Description=Odoo 20
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
User=odoo20
Group=odoo20
ExecStart=/opt/odoo20/venv/bin/python3 /opt/odoo20/odoo/odoo-bin -c /etc/odoo20.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target
Terminal — start & enable
sudo systemctl daemon-reload
sudo systemctl enable --now odoo20
sudo systemctl status odoo20

Odoo 20 is now running. Open http://your-server-ip:8069 to create your first database.

5. Install Odoo 20 on Windows

Use the all-in-one installer — it bundles Python and PostgreSQL, so there is nothing to compile.

  1. 1

    Download the Windows installer

    Get the Odoo 20 .exe from odoo.com/download, or from nightly.odoo.com/20.0/nightly/exe/ for the latest 20.0 build.

  2. 2

    Run the installer

    Double-click the .exe and follow the wizard. Choose the 'Odoo Server' components; the installer sets up PostgreSQL and the Python runtime automatically.

  3. 3

    Finish and open Odoo

    When it completes, Odoo runs as a Windows service. Open http://localhost:8069 to create your first database.

For development on Windows

The packaged installer is best for testing. If you plan to build custom modules on Windows, install from source using WSL2 with Ubuntu and follow the source steps above — it matches production far more closely.

6. Install Odoo 20 on macOS

Install the toolchain with Homebrew, then run Odoo 20 from source.

Terminal — Homebrew dependencies
# Install the toolchain (Python 3.12 is the minimum for Odoo 20)
brew install python@3.12 postgresql@16 node
brew install libxml2 libxslt libjpeg openssl@3 libffi

# Start PostgreSQL and create a superuser role for Odoo
brew services start postgresql@16
createuser -s $(whoami)

Then clone Odoo 20, create a virtual environment, install the requirements, and launch it:

Terminal
git clone https://github.com/odoo/odoo.git --depth 1 --branch 20.0 --single-branch odoo20
cd odoo20
python3.12 -m venv venv
source venv/bin/activate
pip install --upgrade pip wheel
pip install -r requirements.txt

# Launch Odoo — then open http://localhost:8069
./odoo-bin --addons-path=addons -d odoo20

Open http://localhost:8069 to finish setup in the browser.

First run & hardening

What to do the moment Odoo 20 answers on port 8069.

  • Create your database: set the master password, database name, email and a strong admin password. Leave 'demo data' off for anything you will keep.
  • Change the admin_passwd (master password) in the config from its default before exposing the server.
  • Put Odoo behind a reverse proxy (Nginx) with HTTPS, and set proxy_mode = True in the config.
  • For production, set the number of workers based on CPU cores rather than running single-process.
  • Take regular database and filestore backups.

Prefer to initialise the database from the command line (useful for automation or headless servers)? On a source install you can create and load the base module in one shot:

Terminal (source install)
# Optional: create and initialise the database from the CLI instead of the browser
sudo su - odoo20 -s /bin/bash
/opt/odoo20/venv/bin/python3 /opt/odoo20/odoo/odoo-bin \
  -c /etc/odoo20.conf -d odoo20 -i base --stop-after-init
exit
sudo systemctl restart odoo20

Troubleshooting common errors

The handful of issues that catch most people on a first install.

The page at :8069 won't load

Something else may be using the port, or the service failed to start. Check what holds the port, then read the logs:

Terminal
# See what is holding port 8069, or change Odoo's port in odoo20.conf
sudo ss -lptn 'sport = :8069'
Terminal — read the logs
# Follow the live log to see the real error behind a 500 or a failed boot
sudo journalctl -u odoo20 -f
# (source install) or:
sudo tail -f /var/log/odoo20/odoo20.log

"FATAL: role does not exist" / database connection fails

The PostgreSQL role must match db_user in your config. Re-create it with sudo -u postgres createuser -s odoo20 and confirm the name lines up.

PDF reports are blank or misaligned

This is almost always wkhtmltopdf. Make sure the patched 0.12.6.1build is installed (Step 3), not the version from Ubuntu's default repositories.

pip install fails building a wheel

A dependency is missing its dev headers, or you are on the wrong Python. Confirm you are on Python 3.12+ inside the virtual environment, and that all the -dev packages from Step 1 installed.

Frequently asked questions

When was Odoo 20 released?+

Odoo 20 is unveiled at Odoo Experience 2026 in Brussels, held on 24–26 September 2026. The 20.0 source branch is available on GitHub immediately, and the packaged installers (Debian/Ubuntu, Windows) and Docker images roll out on nightly.odoo.com in the days around the announcement.

What are the system requirements for Odoo 20?+

Odoo 20 requires Python 3.12 or later and PostgreSQL (14 or newer is recommended). For a small production instance, plan for at least 2 vCPUs and 4 GB of RAM; 2 GB is enough for evaluation or a single developer. Linux (Ubuntu 24.04 LTS or Debian) is the recommended server OS.

Is Odoo 20 free?+

Odoo Community edition is free and open source under the LGPLv3 licence, and you can self-host it at no cost. Odoo Enterprise is a paid subscription that adds extra apps, the mobile app, Odoo Studio, functional support and hosting. Odoo Online also has a free plan limited to a single app.

What Python version does Odoo 20 need?+

Python 3.12 or later. Ubuntu 24.04 LTS and current macOS builds ship with a compatible Python, but always install dependencies inside a virtual environment so Odoo's pinned versions do not clash with system packages.

What is the easiest way to install Odoo 20?+

For a quick trial with no installation, use Odoo Online. To self-host with the least setup, use Docker or the packaged .deb on Ubuntu/Debian — both bring up a working instance in minutes. Install from source when you need to develop custom modules or control every dependency.

How is Odoo 20 different from Odoo 19?+

Odoo 20 pushes AI deeper into the product with agentic AI that can take actions across apps rather than only draft text, alongside a redesigned mobile app and refinements across accounting, inventory, CRM and payroll. The installation steps are broadly the same as Odoo 19, with Python 3.12 as the baseline.

Can I upgrade from Odoo 19 to Odoo 20?+

Yes. Use Odoo's upgrade platform at upgrade.odoo.com to migrate your database, and test the result on a copy before switching production over. Custom modules must be reviewed and updated for the 20.0 API before you upgrade.

Community or Enterprise — which should I install?+

Install Community if you want the free, open-source core and are comfortable self-hosting and extending it. Choose Enterprise if you need official support, the mobile app, Studio, and the extra Enterprise-only apps. You can start on Community and add the Enterprise code later.

Running Odoo 20? Make it AI-native.

Niyu Labs builds AI and data tools for Odoo — an MCP server for AI clients, demand forecasting, and warehouse connectors. Install one on your new Odoo 20 instance and try it free.

See everything Niyu Smart Stock does