What is actually new in Odoo 20
Ten headline changes made it into the release. Everything below is confirmed by the release notes or the 20.0 documentation. We left out the long tail of smaller UI changes on purpose.
Agentic AI with user approval
Odoo 20 ships an in-product AI agent that can take actions on the user's behalf, but every write passes through an explicit approval step. Conversation history is retained for 30 days. Agents can be called from scheduled actions, which opens up unattended workflows for anything the agent is allowed to touch.
MCP connectivity, both directions
Odoo 20 speaks the Model Context Protocol as a client and as a server. It can call external MCP tools, and it also exposes itself as a tool server so other MCP-aware agents can read and write Odoo data under the same permissions model your users already have.
Offline mode for field teams
Field Service and the mobile client can now operate without a connection and sync when the device gets back online. Record IDs and conflict resolution are handled by the sync layer, so the person on site does not have to think about it.
Unified pricelist engine
Sales, subscriptions, and rental now share one pricelist engine instead of three. The same rule structure, the same resolution order, and the same UI apply across the three modules, which simplifies agency work on companies that mix recurring and one-shot revenue.
AI Website Assistant with llms.txt by default
The Website app now emits a /llms.txt file and structured data by default. The intent is to make AI crawlers find the right pages and the right facts without the usual plugin stack. Existing Website content keeps working.
Payroll overhaul
Payroll gets a warning dashboard that surfaces anomalies before a run, a net-to-gross simulator, and a cleaner data model. Work entries, as a separate concept, have been removed from the standard flow. Country localizations get re-fitted on top of the new base.
Intercompany inventory and valuation
Multi-company groups can now move stock between companies with proper intercompany valuation. The accounting side closes automatically on both ends, which removes a long-standing manual reconciliation.
Manufacturing: continuous production and splittable MOs
Manufacturing orders can now run as continuous production, be split mid-run, and consume with flexibility as the default rather than a per-BoM toggle. The intent is to match how real shop floors operate, where quantities and components drift during a run.
Simplified access rights and Supervised POS
Access rights are consolidated into fewer groups with clearer labels. Accounting adds parent accounts for hierarchy, and Point of Sale adds a Supervised access mode for cashiers who need a manager tap to perform specific actions.
App consolidations
Field Service is folded into Planning. Remote Work is folded into Employee. Mondial Relay as a shipping connector is removed. These are not reskins. The underlying menus and some data layouts move, so Studio customizations and reports that reference the old apps need to be checked.
If you want a wider walkthrough of the AI story on Community versus Enterprise, our Odoo AI on Community guide stays current across versions.
Infrastructure requirements that changed
The requirements floor went up. This is where most self-hosted upgrades fail on the first attempt, so it is worth checking against your current image before you plan anything else.
| Component | Odoo 19 | Odoo 20 |
|---|---|---|
| Python | 3.10 or newer | 3.12 or newer |
| PostgreSQL | 13 or newer | 16 or newer |
| pgvector extension | Not required | Required for Enterprise AI and RAG features |
| PDF renderer | wkhtmltopdf 0.12.6 | wkhtmltopdf 0.12.6 or paper-muncher 0.6+ |
On OEC.sh, the pinned 20.0 Docker image already carries Python 3.12 and the correct Postgres client. The database upgrade from 13 or 14 to 16 is a separate step and runs before Odoo starts on the new image.
Apps that moved or disappeared
This is the part the release notes compress into a sentence and the part that actually breaks reports and Studio customizations after an upgrade.
The dispatch and on-site workflow lives inside Planning now. Views and reports that referenced the Field Service module need to be remapped.
The remote-work toggles and policies now live on the Employee app. One fewer app to install for most companies.
The shipping connector is dropped from standard. Companies using it will need a community module or a different carrier before upgrading.
Flexible consumption is now the default behavior on manufacturing orders. The explicit per-BoM toggle no longer exists.
The standard profitability view on Project is gone in 20. The data is still there, but any dashboard that imported this view needs to be rebuilt.
What we are not saying yet
A few claims are circulating in partner channels about the v20 release that we are not comfortable repeating as fact. We will update this post if any of them get confirmed on the record.
Our live scrape of the Odoo configurator shows no Light User attribute on the Odoo.sh pricing tag, which suggests Light seats bill separately from the $24.90 Enterprise bundle rather than inside it. Odoo has not published this explicitly. We treat it as the working assumption and footnote it in the calculator.
Our live pricing scrapers hit the public configurator and the Odoo.sh pricing page daily. If one of these claims shows up on the public surface, our pricing pages will reflect it within 24 hours and we will note it in the changelog.
Light User seat (new in Agreement v13)
Odoo 20 introduced a Light User seat at €7.90 / $8.90 per user per month, governed by Enterprise Subscription Agreement v13 (effective 2026-09-24, confirmed on odoo.com/pricing-plan). The seat is intended for staff who touch Odoo for self-service and operator tasks rather than full back-office work. Scope is v20 only. Customers on v18 or v19 remain under Agreement v12 with no Light User count.
Who the Light User seat covers
- Employees with self-service HR records (time off, expenses, attendances, appraisals, referrals, payslips).
- Point of Sale cashiers who need to ring sales but not manage the back office.
- Manufacturing Shop Floor operators logging work order progress.
- Inventory barcode operators scanning receipts, transfers, and picks.
- Field Service operators on dispatched jobs, and read-only Knowledge viewers.
The counting rule
Per the agreement text on odoo.com/pricing-plan: every active employee record not linked to a non-portal login counts as a Light User, including kiosk-only staff. Portal users (external customers and suppliers) are unchanged and stay free. Light Users do consume RAM at login, so they still count for infrastructure sizing even though they are cheaper to license.
Our honest take
For most teams this is a cost increase, not a saving. Employees without logins used to be free. A 50-person company with 10 full users and 40 kiosk-only staff would pay roughly €249 per month pre-v20 and roughly €565 per month post-v20 under Agreement v13, a 2.3x jump. The saving only materializes if you were previously paying the Standard rate for people who only ever did self-service. We walked the full math, country by country, in Odoo 20 Light User explained.
On OEC.sh you self-host, so your Enterprise contract bills direct to Odoo. The product does not change your licensing. What it does let you do is archive departed employee records before renewal so you are not paying for seats you no longer need. Odoo.sh billing of Light Users is pending confirmation from Odoo; the $24.90 user bundle on Odoo.sh may or may not include the Light User seat.
The dates that matter
| Event | Date |
|---|---|
| Odoo 20 released | September 24, 2026 |
| Enterprise Subscription Agreement v13 effective | September 24, 2026 |
| Odoo 17 standard support | Ended |
| Odoo.sh v14 kill date | October 31, 2026 |
| Migration engine v19 to v20 | Q1 to Q2 2027 |
If you are still on v17 or earlier, the practical window for an automated hop is narrowing. Our migration guide covers the usual sticking points, and the upgrade page has the credit calculator for budgeting the work.
Our take, after three weeks
Odoo 20 is a solid release with a real base to build on. The AI and MCP work is more than a demo. The Python and Postgres bumps are overdue. The app consolidations will cause some pain for anyone running custom reports against Field Service or Remote Work, so budget time for that.
If you want to try 20 without touching production, spin up a free environment on OEC.sh, pick Odoo 20.0 at Quick Start, and point your test data at it. If you are planning the real upgrade, start on the Odoo 20 page.
Run Odoo 20 on your own cloud
The pinned 20.0 image is available on every plan. Quick Start, Connect As, and migrations work the same way they do on 18 and 19. The free plan is enough to kick the tires.