Skip to Content

Odoo 20 Migration Guide (2026): Zero-Downtime Upgrade Checklist & Code Breaking Changes

Upgrading from Odoo 17, 18, or 19 to Odoo 20—how to test on staging copies, refactor custom Python modules, meet Python 3.12/PostgreSQL 16 requirements, and cut over without disrupting live operations.

Table of contents

No titles in the blog post

Odoo 20 Migration Guide (2026): Zero-Downtime Upgrade Checklist & Code Breaking Changes

Upgrading from Odoo 17, 18, or 19 to Odoo 20—how to test on staging copies, refactor custom Python modules, meet Python 3.12/PostgreSQL 16 requirements, and cut over without disrupting live operations.

With Odoo 20 officially live since September 2026 and Odoo 17’s standard support window now expired, thousands of businesses running Odoo 17, 18, or 19 face a critical operational question: how do you upgrade to Odoo 20 without halting daily sales, warehouse fulfillment, and accounting on go-live morning?

A safe Odoo 20 migration never touches your live database first. Instead, you request an upgraded test copy from Odoo’s upgrade platform, refactor custom modules against Odoo 20’s framework changes, run full department-by-department test cycles, and execute a timed cutover rehearsal before switching production during a scheduled data freeze.

At Dotsprime System LLP, our Odoo engineers manage complex multi-version upgrades across Odoo Online, Odoo.sh, and On-Premise environments. This guide breaks down current version lifecycles, hosting-specific rollback safety nets, Odoo 20 breaking code changes, and an eight-step migration workflow designed to protect production data.

Odoo Version Support & Lifecycle Status (Late 2026)

Odoo provides standard support (bug fixes, security patches, and helpdesk coverage) for the three most recent major versions. Because Odoo 20 launched in September 2026, Odoo 17 has moved out of standard support.

Odoo VersionRelease DateStandard Support EndCurrent Status (Late 2026)Direct Jump to Odoo 20?
Odoo 20.0September 2026September 2029Latest Active ReleaseTarget version
Odoo 19.0September 2025September 2028Active Standard SupportYes (absorbs 1 version of changes)
Odoo 18.0October 2024September 2027Active Standard SupportYes (absorbs 2 versions of changes)
Odoo 17.0November 2023September 2026Standard Support Ended (Paid extended support only on Odoo.sh / On-Premise)Yes (absorbs 3 versions of changes)

What Odoo 17 End-of-Life Means by Hosting Model

  • Odoo Online: Odoo 17.0 is no longer supported; Odoo enforces mandatory major upgrades and notifies administrators prior to automatic scheduling.

  • Odoo.sh: After three years of standard support, Odoo grants a two-year grace window to complete the migration before requiring an upgrade.

  • On-Premise: You can continue running Odoo 17 indefinitely, but without security updates unless you purchase paid extended support—and every skipped release compounds future code-porting effort.

Hosting Safety Nets & Rollback Rules Before You Cut Over

All upgrade testing happens on isolated, neutralized copies where scheduled actions, outgoing email servers, bank feeds, and payment gateways are disabled or switched to test mode. However, once you trigger the production upgrade, your rollback options depend strictly on where your database lives:

Protection FactorOdoo Online (SaaS)Odoo.sh (PaaS)On-Premise (Self-Hosted)
Testing EnvironmentDedicated test database via Database ManagerStaging branch cloned from production backupUpgraded database dump restored on staging server
During Production CutoverDatabase unavailable until upgrade finishesUnavailable during build; auto-reverts on failureUpgrade platform runs on uploaded copy; live DB untouched
Post-Upgrade RollbackNo automated revert (download full backup beforehand)Pre-upgrade backup retained automaticallyOriginal server/DB stays intact on standby until switch
Custom Python ModulesNot supportedSupported via Git branchesSupported with full server control

Critical Rollback Rule: On every hosting platform, your rollback window closes the moment users begin posting live transactions in Odoo 20. Restoring a pre-upgrade backup erases any invoices, stock moves, or payments created after cutover. Treat the gap between upgrade completion and user sign-in as a formal go/no-go verification window.

Odoo 20 Technical & Code Breaking Changes

While Odoo’s automated upgrade platform migrates standard tables and Odoo Studio metadata directly from 17, 18, or 19 to 20, custom Python modules and third-party App Store add-ons must be refactored before the database upgrade can succeed.

Watch for five high-impact technical shifts in Odoo 20:

  1. Material Symbols Replace Font Awesome: Hardcoded fa- icon classes inside custom QWeb reports, XML views, website snippets, and JavaScript components must be updated to Material Symbols.

  2. Stored Chatter Tracking Values Removed: Odoo 20 generates field-change messages dynamically rather than storing historical tracking values in the database. Custom BI connectors or audit reports querying stored tracking tables require refactoring (or installation of Odoo’s dedicated compatibility module).

  3. Record Rules Replaced by Access-Right Domains: Custom security architectures relying on legacy record rules must be migrated to domain-based access rights and re-tested role by role.

  4. Firebase Push Notifications Deprecated: Custom mobile or web push notification workflows built on Firebase require rewriting.

  5. Server Infrastructure Requirements (On-Premise): Odoo 20 requires Python 3.12+ and PostgreSQL 16+ (standard on Ubuntu 24.04 LTS). Servers running Odoo 17 on Ubuntu 22.04 (Python 3.10 / PostgreSQL 14) must be provisioned cleanly alongside the existing server rather than upgraded in place.

(Note on External Integrations: Odoo’s deprecation of legacy XML-RPC and JSON-RPC endpoints targets Odoo 22 in late 2028, so existing integrations will still function on Odoo 20—though retesting every API endpoint and migrating toward the newer JSON-2 API during your upgrade cycle is best practice).

Pre-Migration Audit: Who Owns What?

Before writing a single line of code, freeze new feature development and categorize every non-standard element in your database:

ComponentUpgrade ResponsibilityCovered by Odoo Enterprise SLA?
Standard Apps & Core DataOdoo Automated Upgrade PlatformYes
Odoo Studio CustomizationsOdoo Automated Upgrade PlatformYes (with active Studio subscription)
Custom In-House / Partner ModulesYour internal developers or Odoo partnerOnly with a Custom Maintenance Subscription
Third-Party Odoo Apps Store ModulesOriginal third-party app publisherNo (verify 20.0 release availability first)
External APIs, EDI & ConnectorsIntegration owner / partnerNo
Data Cleanup & End-User TrainingYour internal project teamNo

8-Step Zero-Downtime Odoo 20 Migration Workflow

  1. Verify Backups & Provision Infrastructure: Confirm full database and filestore backups restore cleanly. For On-Premise deployments, spin up a fresh Ubuntu 24.04 LTS server running Python 3.12 and PostgreSQL 16 alongside production.

  2. Freeze Development & Complete Customization Inventory: Lock down non-critical changes on production and decide whether each custom module should be ported, replaced by native Odoo 20 features, or retired.

  3. Request Your First Upgraded Test Database:

    • Odoo Online: Trigger a Test upgrade from the Database Manager and review the generated Upgrade Report in Discuss.

    • Odoo.sh: Launch an upgrade build from the Upgrade tab of a staging branch.

    • On-Premise: Run Odoo’s upgrade script in test mode and merge the returned dump.sql and filestore folder with a copy of your production filestore.

  4. Validate Custom Modules on a Clean Odoo 20 Instance: Install each ported custom module one by one on an empty Odoo 20 database first to isolate Python tracebacks, OWL component changes, and XML XPath errors before touching real data.

  5. Write upgrade-util Data Migration Scripts: Where standard models or custom fields were renamed across versions, add pre- and post- migration scripts using Odoo’s upgrade-util library rather than exporting and re-importing CSVs.

  6. Execute End-to-End Department Testing: Test real business flows—not just record counts. Have department leads sign off on full cycles (Purchase →→ Warehouse Receipt →→ Sales Order →→ Delivery →→ Customer Invoice →→ Credit Note →→ Trial Balance).

  7. Rehearse the Cutover & Measure Downtime: Request a fresh test upgrade 24–48 hours before go-live, run your full verification checklist against the clock, and confirm exact downtime duration.

  8. Freeze Data Entry & Upgrade Production: Schedule cutover outside month-end close or peak shipping hours. Halt user logins, run the production upgrade, execute your go/no-go verification script, and reopen access once validated.

Common Post-Upgrade Issues & Quick Fixes

Symptom in Test EnvironmentRoot Cause in Odoo 20Resolution
Custom field missing from form viewInherited view disabled due to changed XPathCheck the Upgrade Report, fix XPath selector, and reactivate via script
Users see restricted records or lose accessLegacy record rules replaced by access-right domainsRebuild permissions as access-right domains and test per user group
Blank buttons or missing UI iconsDeprecated Font Awesome (fa-) icon classesReplace with Odoo 20 Material Symbols
Old wording remains in email templatesRecords marked noupdate="1" retained legacy XMLUpdate records programmatically inside a post- migration script
Missing product images or PDFs (On-Premise)Returned upgrade filestore not merged with productionMerge the upgrade output filestore with a copy of production’s filestore

Frequently Asked Questions

Can I upgrade directly from Odoo 17 to Odoo 20 without stopping at 18 or 19? Yes. Odoo’s upgrade platform converts your database schema directly from Odoo 17 to Odoo 20 in a single run. However, your development team must ensure custom Python modules account for all framework changes introduced across versions 18, 19, and 20.

How much does an Odoo 20 upgrade cost? For Odoo Enterprise subscribers, the core database upgrade and standard support for upgrade discrepancies are included at no extra license fee. Your project budget goes toward porting custom Python modules, upgrading third-party App Store modules, retesting external integrations, and training staff on new workflows.

How do I migrate Odoo Community Edition to Odoo 20? Odoo’s official upgrade platform is exclusive to Odoo Enterprise. Community Edition databases rely on OpenUpgrade (maintained by the Odoo Community Association), which migrates sequentially one major version at a time (17 →→ 18 →→ 19 →→ 20).

Will our external API integrations break in Odoo 20? Odoo’s scheduled removal of XML-RPC and JSON-RPC endpoints targets Odoo 22 (fall 2028), so existing integrations remain supported in Odoo 20. However, renamed fields or modified models can still affect payloads, so every ERP, e-commerce, and shipping connector must be tested on your upgraded staging copy.

Planning an Odoo 20 Migration?

Moving to Odoo 20 unlocks major performance gains and native AI workflows—but only when custom code, third-party apps, and cutover rehearsals are handled methodically. At Dotsprime System LLP, our Odoo upgrade specialists audit your codebase, port custom modules cleanly, and execute zero-surprise production cutovers. Contact our team today to schedule your Odoo 20 readiness audit.

Dotsprime AI

Looking for an Odoo App? Ask Dotsprime AI!