Every Odoo release ships dozens of changes, but the only question that matters for the business is whether the migration justifies your team's time and the system downtime. In this post we share a practical view of Odoo 18 based on 14 projects our team upgraded from Odoo 17, explain what Odoo's support policy means for your timeline, and give the checklist we use to keep upgrades boring.
The short answer
Updated in October 2026 after the release of Odoo 20.
If you are on Odoo 17, yes — plan the upgrade now. Standard support for Odoo 17 ended in September 2026, when Odoo 20 was released (Odoo: standard and extended support). Staying longer means paying for extended support or running without bug fixes and security updates. The real decision today is not whether to leave 17, but whether to land on 18, 19 or 20.
Odoo's support timeline in 2026
Odoo supports every major version for three years of standard support, available on Odoo Online, Odoo.sh and on-premise. After that, extended support costs extra and is available only on Odoo.sh for some versions and on-premise.
| Version | Released | End of standard support |
|---|---|---|
| Odoo 20.0 | September 2026 | September 2029 (planned) |
| Odoo 19.0 | September 2025 | September 2028 (planned) |
| Odoo 18.0 | October 2024 | September 2027 (planned) |
| Odoo 17.0 | November 2023 | September 2026 |
| Odoo 16.0 | October 2022 | September 2025 |
Source: Odoo documentation.
Two rules from the same page shape every upgrade plan. You can upgrade from any version to any major version still under standard support. And Odoo Online also has intermediate SaaS versions such as 19.1–19.4, which are released every two to three months and are not available on-premise or on Odoo.sh.
What changed under the hood in Odoo 18
Odoo 18 is primarily a performance and usability release. In our load tests across the 14 upgraded databases, the time to open filtered list views dropped by an average of 23%, and quarterly pivot reports got about 40% faster. Your numbers will depend on data volume and customizations, so measure on a copy of your own database before promising anything to users.
The changes our clients noticed most, all listed in the Odoo 18 release notes:
- Navigation. Readable URLs such as
/odoo/project/5/tasksand a keyboard shortcut for switching companies in multi-company setups. - Accounting. Simplified bank reconciliation and batch payments, color-coded matching numbers, invoice anomaly detection and better loan management.
- Inventory. Push rules now trigger when a transfer is validated instead of in advance, cross-company lot and serial tracking, and improved putaway logic.
- Point of Sale. A fully redesigned, simpler frontend with QR-code payments.
- Mobile and barcode. Barcode, PoS and Attendances as installable progressive web apps, plus RFID scanner support and batch scanning of serial numbers.
- Website and eCommerce. Click & Collect, customizable category pages, mega menus, automatic WebP conversion and dozens of new building blocks.
Technical requirements barely moved: Odoo 17 and 18 both require Python 3.10 or later and PostgreSQL 12 or later (Odoo 18 source install guide). Odoo 19 raised the PostgreSQL minimum to 13.
Who benefits the most from migrating
If your Odoo 17 hits a wall on reports, warehouse documents or daily bulk updates, the performance gains alone justify the upgrade. If your instance is small and lightly customized, the main reason is simpler: you need to be on a supported version.
Scenarios where migration is urgent
- You are on Odoo 17 or older without an extended support contract. You no longer receive security fixes.
- You run more than 100 concurrent users and get performance complaints.
- Your team wants mobile workflows in warehouses and stores using the barcode and PoS apps.
- You are building integrations or AI agents. Odoo 19 introduced a new external JSON-2 API with API-key authentication and deprecated the old XML-RPC and JSON-RPC endpoints, which are scheduled for removal in Odoo 22 (Odoo external API). New integrations should target JSON-2 from day one.
Odoo 18, 19 or 20?
- Odoo 18 is the lowest-risk jump from 17 and has been in production for two years, but its standard support ends in September 2027. Choose it only if your custom modules or third-party apps are not yet ported further.
- Odoo 19 is our default target in late 2026: mature, widely supported by the OCA and app vendors, and supported until September 2028.
- Odoo 20 gives you the longest runway, until September 2029, but we wait for the first few months of fixes and for key third-party modules to be ported before moving complex databases.
Odoo's upgrade platform migrates the database directly to the target version, so going from 17 to 19 is one project, not two. Custom modules still need to be ported to each intermediate API change, which is where most of the effort goes.
A painless-migration checklist
- Audit every custom module and its compatibility with the target ORM and views. Remove modules nobody uses; in our experience that is 10–20% of the code.
- Request an upgraded test database through the Odoo upgrade platform or the upgrade script, using a recent copy of production (Odoo upgrade documentation).
- Port custom code following Odoo's guide on upgrading a customized database. On Community Edition, use the OCA's OpenUpgrade project instead of Odoo's service.
- Run regression tests for critical flows: quote-to-cash, procure-to-pay, month-end closing, payroll if you use it.
- Rehearse the cutover at least once, timing every step, so you know your real downtime window.
- Prepare a 30-minute rollback plan: a verified backup, a frozen copy of the old code and a clear go/no-go owner.
- Train key users 1–2 weeks before the release on a staging copy with their own data.
Automate the regression tests
Manual testing does not scale across upgrades every one to two years. We cover each critical flow with Odoo's built-in test framework, so the same suite runs on the old version, the upgraded test database and every later upgrade (Odoo docs: testing):
from odoo.tests import TransactionCase, tagged
@tagged("post_install", "-at_install", "upgrade_regression")
class TestQuoteToCash(TransactionCase):
def test_order_to_invoice(self):
partner = self.env["res.partner"].create({"name": "Regression Customer"})
product = self.env["product.product"].create({"name": "Widget", "list_price": 100})
order = self.env["sale.order"].create({
"partner_id": partner.id,
"order_line": [(0, 0, {"product_id": product.id, "product_uom_qty": 3})],
})
order.action_confirm()
invoice = order._create_invoices()
invoice.action_post()
self.assertEqual(invoice.amount_untaxed, 300)
self.assertEqual(invoice.state, "posted")
Run the tagged suite with odoo-bin --test-tags upgrade_regression -d <db> after every upgrade rehearsal. A few dozen such tests catch most broken customizations before a user does.
The biggest migration risk is organizational, not technical. A team that doesn't see the new version before release will resist the change. We always do a demo for key users two weeks ahead of launch.
A typical migration timeline
| Week | Activities |
|---|---|
| 1 | Module audit, upgraded test database, scope and estimate |
| 2–3 | Porting custom modules, fixing data issues from the upgrade report |
| 4 | Regression testing by the team and key users |
| 5 | Training, cutover rehearsal, fixes |
| 6 | Production upgrade over a weekend, hypercare |
For larger databases or a jump across two versions, add one to two weeks to porting and testing.
What it costs
A typical mid-market migration (50–150 users, 10–20 custom modules) takes 4–6 weeks and lands at €18,000–€35,000 on our side. More than 60% of that time goes to customization audit and regression testing — and that's not where you want to cut corners. Upgrading straight from 17 to 19 usually costs 20–30% more than 17 to 18, which is still much cheaper than doing two upgrades a year apart.
If you are still on 1C rather than an older Odoo, the project looks different; see Migrating from 1C to Odoo: a step-by-step plan for mid-market companies.
Related guides
An upgrade is a good moment to revisit your edition and plan (Odoo Community vs Enterprise), fix slow screens (Odoo performance tuning) and move integrations to the new JSON-2 API (Integrating AI agents with Odoo).
FAQ
Is Odoo 17 still supported? Standard support ended in September 2026. Extended support is available for an additional fee on Odoo.sh and on-premise.
Can I upgrade directly from Odoo 17 to Odoo 19 or 20? Yes. Odoo's upgrade service upgrades a database to any major version still under standard support.
How long does an Odoo upgrade take? For a mid-sized database with 10–20 custom modules, four to six weeks including testing and training. The actual production downtime is usually a few hours over a weekend.
Do custom modules break during an upgrade? Usually some of them do. Odoo upgrades the standard data model, but custom code must be ported to the new version's APIs and tested.
Sources
- Odoo. Standard and extended support.
- Odoo. Odoo 18 release notes.
- Odoo. Upgrade documentation and upgrading a customized database.
- Odoo. Source install requirements, Odoo 18.
- Odoo. External JSON-2 API.
- Odoo. Testing Odoo.
- Odoo Community Association. OpenUpgrade.