Official Website: www.odoo.com
Documentation: https://oca.github.io/OpenUpgrade/

Odoo 20 is set to launch at Odoo Experience 2026, taking place September 24 to 26, 2026 in Brussels. This release brings significant changes: Agentic AI that acts autonomously across modules, a simplified payroll system, a redesigned mobile app, and major technical changes including a move to Owl 3 and a new JSON-2 API.
If you are running Odoo 19, this is your window to plan. Odoo supports only the three most recent major versions with security updates. When Odoo 20 releases, Odoo 18 will still be supported, but Odoo 19 will move closer to the end of its support window.
But here is the crucial thing most guides do not tell you: the migration path is completely different for Community and Enterprise editions. Enterprise users get a free automated upgrade through Odoo's platform. Community users must use the open-source OpenUpgrade project ā and the process is more involved.
In this guide, we will walk through the entire migration process for both editions, covering database migration, custom module migration, and the critical technical changes in Odoo 20 that will affect your integrations and frontend code.
Before you do anything, you need to know which path applies to you. The difference is not just about features ā it is about who handles the technical migration.
| Aspect | Community Edition | Enterprise Edition |
|---|---|---|
| Migration Tool | OpenUpgrade (open-source) | Odoo Upgrade Platform (upgrade.odoo.com) |
| Who Runs Migration | You or your technical partner | Odoo's automated service + support team |
| Custom Modules | You must migrate manually | Odoo's upgrade team adapts custom scripts |
| Cost | Free (your time/developer cost) | Included with Enterprise subscription |
| Support | Community forums, OCA | Official Odoo support tickets |
| Timeline | Depends on your team | 2 to 4 months (queue-dependent) |
Important: Enterprise databases are much easier to upgrade because Odoo handles the process. Community requires technical expertise. If you are on Community and considering upgrading to Enterprise, now is the ideal time ā the migration effort can be combined.
Never start a migration without understanding what you are migrating. The assessment phase is where migration projects succeed or fail.
Open a spreadsheet and list every custom module in your instance. For each module, note:
Sort your list into three buckets: Standard Odoo (handled automatically), Third-party apps (waiting on vendor), and Your custom code (your responsibility).
Two things will definitely break in the Odoo 20 migration: XML-RPC integrationsand custom frontend code.
For years, external systems communicated with Odoo using XML-RPC. Odoo has deprecated these endpoints, and they are scheduled for full removal in Odoo 22 (fall 2028). The replacement is the JSON-2 API.
The JSON-2 API is cleaner but not a drop-in replacement. It requires:
Every integration using XML-RPC must be rewritten. List them all now.
Odoo's web framework, Owl, moves to version 3 in Odoo 20. Any custom module with its own frontend components (customer portals, custom dashboards, bespoke UIs) must be ported manually. This is developer work, not an automatic conversion.
For every paid or third-party app you use, check whether the developer has committed to an Odoo 20 release. Their timeline is theirs, not Odoo's. A single critical app that is not ready can hold up your entire migration.
Before any migration, clean your data. Migration is a rare opportunity to improve data quality:
This is the real work. Whether you are on Community or Enterprise, custom modules require attention. Enterprise users get help from Odoo's upgrade team, but the code must still be adapted.
Before porting, review each custom module for upgrade-unsafe patterns:
| Problem | Better Approach |
|---|---|
| Unnecessary standard dependencies | Remove unused dependencies |
| One large custom module | Separate logical features |
| Business logic in views | Move logic to Python models |
| Hard-coded IDs | Use stable references or configuration |
| Direct core modifications | Use inheritance instead |
In the __manifest__.py file, update the version number to match Odoo 20 conventions and verify all dependencies are correct.
If your custom module changed its data structure, you need a migration script. Odoo supports upgrade scripts invoked during module updates.
Place these in a migrations/ folder inside your module. The script'smigrate() function runs during upgrade.
Build automated tests for critical workflows. Test both the module installation and the upgrade process with realistic data.
Enterprise users have the easiest path. Odoo provides an automated upgrade platform at upgrade.odoo.com.
From your Odoo instance, download a backup dump of your database. Do not include the filestore for the initial upload.
Go to upgrade.odoo.com and upload your backup file. Odoo will run the automated upgrade process.
Once the upgrade completes, you will receive a link to the upgraded database. Create a new staging environment in Odoo.sh (or your hosting platform) and import the upgraded database there.
Run through all your business processes in the staging environment. Check:
If you find issues, report them via Odoo's helpdesk. The upgrade team will manually adapt your scripts. This process can take several weeks, so report early.
Once testing passes, upgrade your production database by downloading the final upgraded version and importing it into your live environment.
Timeline: Enterprise upgrades typically take 2 to 4 monthsdepending on queue position. The sooner you submit, the faster it goes.
Community users must use OpenUpgrade, the open-source migration framework from the Odoo Community Association (OCA).
The OpenUpgrade project provides migration scripts for each version. You need:
openupgrade_framework moduleopenupgrade_scripts moduleopenupgradelib Python libraryInstall openupgradelib from GitHub:
Never run migrations on your live database. Create a full backup and work on a copy.
Organize your addons directory with versions:
Your custom modules for Odoo 20 should be in the 20.0/ folder.
Run Odoo with the OpenUpgrade framework loaded. The recommended command includes:
Run the migration using the OpenUpgrade Docker image or directly with odoo-bin. The process will:
Expect errors. OpenUpgrade will tell you which modules lack migration scripts. You may need to write these yourself. The process is iterative: run, fix, repeat.
Once the migration completes without errors, test every business process. OpenUpgrade handles data migration, but edge cases and custom logic need manual verification.
After successful testing, repeat the process on your production database during a maintenance window.
If you are on Community and want to move to Enterprise, Odoo 20 is an ideal time. The process combines the version upgrade with an edition change.
Download a full backup of your Community instance, including the filestore.
On a fresh Odoo 20 Enterprise installation, restore your Community database. Install the web_enterprise module and enter your Enterprise subscription code.
Many Community custom modules exist because the feature was missing. Enterprise may now offer it natively. Retire these modules to reduce technical debt.
Test the combined migration on a staging copy. Verify that Enterprise modules install correctly alongside your remaining custom modules.
Once validated, deploy to production. Your database is now on Odoo 20 Enterprise.
Beyond the migration process itself, Odoo 20 introduces technical changes that affect custom code.
| Change | Impact | Action Required |
|---|---|---|
| XML-RPC deprecated | External integrations break | Rewrite to JSON-2 API |
| Owl 3 frontend | Custom UI components break | Port frontend code manually |
| New security model | Access rules may change | Review and update security groups |
| Unified ORM changes | Query methods may differ | Update ORM calls in custom modules |
| Python version requirement | Code may need syntax updates | Update Python dependencies |
Before you begin, complete every item on this list.
Migrating to Odoo 20 is a project, not a task. The data conversion is largely automatic, but the real work is in your custom modules, integrations, and business processes. Whether you are on Community or Enterprise, the preparation is the same. Start now, test thoroughly, and you will be ready when Odoo 20 goes live.