Upgrading Odoo 17 to 18, 19 and 20: what changes and how to do it safely
How to upgrade Odoo 17 to 18, 19 or 20: what each version changes, Odoo's upgrade service or OpenUpgrade, a rehearsal on staging, and a rollback plan.
By Muhammad Salman Ali Khan, Founder, Knova Digital Solutions · Published · 8 min read · Odoo upgrade, Odoo 20, Staging, Odoo hosting
Odoo 17 reached the end of its standard support in September 2026, so if you still run it, now is the time to plan an upgrade. Enterprise databases are upgraded by Odoo's own upgrade service, which can jump straight to any version still in standard support (18.0, 19.0 or 20.0). Community databases are upgraded with OpenUpgrade, the open-source project of the Odoo Community Association, one major version at a time. Either way, the safe method is the same: upgrade a copy of production first, port your custom modules, test your real business flows on that copy, and only then upgrade production, with a backup you can restore if anything goes wrong.
Below: the support dates, what each version changes, the two upgrade paths, the rehearsal and the rollback, and what the upgrade assistant in Knova Cloud does.
Why upgrade now: the support dates
Odoo supports each major version for three years ("standard support"). After that, extended support is a paid option on Odoo.sh and on-premise only. Odoo's support page lists:
| Version | Released | End of standard support |
|---|---|---|
| Odoo 17.0 | November 2023 | September 2026 |
| Odoo 18.0 | October 2024 | September 2027 (planned) |
| Odoo 19.0 | September 2025 | September 2028 (planned) |
| Odoo 20.0 | September 2026 | September 2029 (planned) |
You can upgrade from any version to any major version still in standard support (or one that left it less than six months ago), and the smaller the gap, the easier the upgrade. Staying on 17 doesn't stop your database working, but Odoo's bug and security fixes stop unless you pay for extended support.
What changes between versions
From Odoo's release notes, the changes most likely to affect your users and your custom code:
Odoo 17 to 18
- Point of Sale was fully redesigned.
- Accounting gained analytic budgets and OCR import of bank statements from PDFs and images.
- Inventory reworked routes: push rules now follow validated transfers ("pull to push rules and flexible routes").
- Sales and eCommerce gained combo products.
- For the UAE, Odoo 18 added a corporate tax report.
Odoo 18 to 19
- AI agents that can answer from your own documents and perform actions.
- Accounting: purchase and sales receipts were merged into bills and invoices, and a new tax return feature tracks filing deadlines with validation checks.
- Expenses: expense reports were removed; expenses are approved and posted individually.
- Payroll: pay runs replace payslip batches.
- New ESG and Equity apps.
- Technical: PostgreSQL 13 became the minimum. For the UAE, the VAT return (VAT201) was rebuilt on the new reporting engine.
Odoo 19 to 20
- Access rights: record rules were removed; a domain on the access right decides which records it applies to. Custom security rules need porting.
- Accounting: parent accounts replace account groups, account codes become optional, and stock valuation works without the Inventory app.
- Mail: stored tracking values were removed; tracking messages are built on the fly. Reports that read tracking values need checking.
- AI: all AI features now need IAP credits.
- Technical: Python 3.12 and PostgreSQL 16 are now the minimum. If you host Odoo yourself on Ubuntu 22.04, the server must be upgraded too; our Odoo 20 installation guide covers Ubuntu 24.04.
- For the UAE, the chart of accounts was redesigned (6-digit codes, parent account groups).
Going from 17 to 20 crosses all three: custom modules must be ported across each, and users should see the new screens before go-live.
Two upgrade paths: Enterprise and Community
Enterprise: Odoo's upgrade service
With an Enterprise subscription, Odoo upgrades the database for you, free of charge, and its support helps fix discrepancies in the upgraded database. Standard modules, Studio customizations and modules under an Odoo maintenance subscription are covered; your own custom modules are not. Odoo won't upgrade a database until your custom modules exist for the target version.
On your own server, the documented command requests an upgraded test copy:
python <(curl -s https://upgrade.odoo.com/upgrade) test -d <your db name> -t <target version>The same command with production instead of test upgrades the real database. Two details from the documentation matter: the database is sent without its filestore, so the returned filestore must be merged with yours; and once a production upgrade completes, Odoo states that you cannot revert to the previous version through the service. Your rollback is your own backup.
Community: OpenUpgrade
OpenUpgrade is maintained by the Odoo Community Association (OCA), with one branch per target version and migration scripts per module. It moves one major version at a time: 17 to 18, then 18 to 19. At the time of writing:
- The 18.0 and 19.0 branches have migration scripts. Their coverage tables mark core apps such as accounting, sales, purchase, inventory, manufacturing, website and point of sale as done, but many smaller modules have no status yet. Check every module you have installed.
- The 20.0 branch was created on 28 September 2026 and contains no migration scripts yet. A Community upgrade to Odoo 20 is not possible with OpenUpgrade today; plan for 19 and watch the branch.
The OCA modules you use must also exist for the target version, and your custom modules must be ported.
Rehearse on a copy of production
Test on an upgraded copy that is neutralized: scheduled actions off, outgoing mail caught, payment providers in test mode, bank synchronization off. Then work through your real flows:
- Buy a product, receive it, sell it, ship it, and check the routes match production.
- Validate a customer invoice, issue a credit note, and compare your accounting reports and taxes with production.
- Print your invoice, quotation and delivery reports.
- Place an order on your website, if you have one.
- Check integrations (APIs, EDI), automated and server actions, exports, mail templates and translations.
Repeat the test upgrade close to go-live, since your data and the upgrade scripts keep changing. See our guide to development, staging and production.
Production day and the rollback plan
- Pick a quiet window. Production is unavailable during the upgrade.
- Take a fresh backup just before, and know how long a restore takes. A tested backup is your undo button.
- Keep the old code. Rolling back means restoring the backup and running the previous version's code, so tag the commit you run today.
- Agree go/no-go checks in advance (logins, main menus, invoice and order counts). If one fails, roll back and fix the problem on the copy, not in production under pressure.
How the upgrade assistant in Knova Cloud helps
On Knova Cloud, a project's Upgrade tab has an upgrade assistant in three steps:
- Readiness. It reads the modules installed in production and classifies each one: standard, Enterprise, OCA, custom or unknown. For OCA modules it checks whether the module exists on the target version's branch; for custom modules it looks for a branch of your repository for that version and checks the manifest versions. It flags known module renames, estimates the duration, and gives a verdict: ready, review or blocked.
- Test on a copy. It takes a fresh production backup and upgrades it on a staging branch; production is not touched. Each push restores the upgraded database and updates your modules while you port them. Smoke checks confirm that Odoo starts, the login page answers, the main menus open, key records are readable, and the counts of contacts, invoices, sales orders, products and stock moves match before and after.
- Schedule. You choose a maintenance window. Visitors see a maintenance page, a fresh backup is taken, production is upgraded, and the same smoke checks run. If they fail, the backup is restored and production goes back to the previous version automatically.
Community projects use OpenUpgrade and Enterprise projects use Odoo's upgrade service with your subscription code. Today the assistant upgrades up to Odoo 19.0; upgrades to 20.0 are not offered yet, although new projects can already start on Odoo 20. The upgrade documentation has the details, and Community hosting and Enterprise hosting explain how each edition runs. If you run Odoo on your own server, the platform can install a new Odoo on it.
An upgrade readiness checklist
- Note your version, edition and installed modules (standard, OCA or custom).
- Choose the target: 18 or 19 for Community today; 18, 19 or 20 for Enterprise.
- Port your custom modules and check OCA availability.
- Upgrade a copy and test your real flows with key users.
- Rehearse again the day before; plan the window and the go/no-go checks.
- Back up, upgrade, check, and keep the rollback ready.
Need a hand?
Knova Cloud is run by Knova Digital Solutions, an Odoo implementation company in Dubai. If you want help porting modules or planning the upgrade, talk to us, and see how we work with businesses running Odoo. Hosting prices, staging included, are on our pricing page.
Sources
- Odoo 20.0 documentation, Upgrade: process, command, test checklist, SLA.
- Odoo 20.0 documentation, Standard and extended support: release and end-of-support dates.
- Odoo, release notes for Odoo 18, Odoo 19 and Odoo 20.
- Odoo 20.0 and 19.0 documentation, Source install: Python and PostgreSQL minimums.
- OCA, OpenUpgrade repository: branches, and coverage tables for 17.0 to 18.0 and 18.0 to 19.0.
Sources checked on 8 October 2026. Odoo and Odoo.sh are trademarks of Odoo S.A. Knova Cloud is an independent service, not affiliated with or endorsed by Odoo S.A.