Upgrading from Odoo 18 to 19 is the most straightforward major version upgrade in recent Odoo history, but it still requires careful planning. The biggest technical change is the Owl 3.x frontend framework upgrade, which affects custom JavaScript components. Database migration is handled by Odoo SA's upgrade service or OCA openupgrade. This guide walks through the entire process.
What Changed Between Odoo 18 and 19
| Area | Change | Migration Impact |
|---|---|---|
| Frontend | Owl 2.x → Owl 3.x | High for custom JS widgets |
| Spreadsheets | New engine | Low — automatic migration |
| Knowledge | New article system | Low — automatic migration |
| Website | New grid layout | Medium — custom themes may need updates |
| Python | 3.11+ → 3.12+ | Low — update your venv |
| MRP | New planning board | Low — additive feature |
Pre-Upgrade Checklist
- Full backup: Database, filestore, configuration, and custom modules
- Module audit: Check every custom/OCA module for an Odoo 19 branch or compatible version
- Owl 3.x review: If you have custom JS components, review the Owl 3.x migration guide for breaking changes
- Staging environment: Set up an Odoo 19 staging instance for testing. See staging setup
Step 1: Backup Your Database
pg_dump -Fc your_odoo18_db > odoo18_backup.dump
# Also backup filestore
tar -czf filestore_backup.tar.gz /path/to/odoo/filestore/your_odoo18_db
For comprehensive backup strategies, see backup best practices.
Step 2: Migrate the Database
Option A — Odoo SA Upgrade Service: Upload your dump to upgrade.odoo.com, select 19.0 as target, download the result.
Option B — OCA OpenUpgrade: Clone the 19.0 branch and run the migration scripts locally. This is free but requires more technical knowledge.
Step 3: Adapt Custom Modules
The main work for Odoo 18→19 is adapting custom JavaScript to Owl 3.x. Key changes:
- Reactivity model: Owl 3.x uses a new reactivity system —
useStatereplaces somestatepatterns - Component lifecycle: Some lifecycle hooks have been renamed or consolidated
- Template syntax: Minor QWeb template changes for Owl 3.x compatibility
Python-side changes are minimal. Update your module manifests to version 19.0.x.x.x and test.
Step 4: Test Thoroughly
- Restore the migrated database to your Odoo 19 staging instance
- Install all custom modules and verify no errors
- Test critical business workflows: sales orders, invoicing, inventory moves, manufacturing orders
- Verify accounting balances match pre-upgrade totals
- Test website pages and eCommerce flows
- Run automated test suites for custom modules
Step 5: Go Live
- Schedule a maintenance window during low-usage hours
- Take a final production backup
- Run the migration on the production database
- Update your Odoo installation to version 19 (Docker image or source code)
- Start Odoo 19 and verify
Frequently Asked Questions
Is Odoo 18 to 19 a big upgrade?
It is moderate. The database migration is straightforward, but the Owl 3.x frontend change means custom JS components need review. Python-side changes are minimal.
Can I run Odoo 18 and 19 side by side during migration?
Yes. With Docker or DeployMonkey, you can run both versions on the same server with different ports. See running multiple Odoo versions.
How long should I test before going live?
Minimum one week of testing in staging with real users performing actual business operations. Two weeks is safer for complex installations.
What if the upgrade breaks something critical?
This is why backups are step one. Restore your Odoo 18 backup and revert to the previous version. No data is lost.