Odoo 18 vs Odoo 19 – Technical Comparison
Odoo 19.0 Release September 2025

Odoo 18 vs Odoo 19
Initial Technical Comparison

Odoo continues to evolve with each release, offering new features, streamlined performance, and improved developer tools. The upcoming Odoo 19 version introduces a wide range of technical and functional updates compared to Odoo 18.

This blog covers:

  1. A high-level overview of what’s new (for managers & consultants).

  2. A line-by-line technical comparison (for developers preparing migrations).

Note: Odoo 19 is still under development, so these details may change before the official release.


“Odoo 19 brings both exciting opportunities and challenges for developers, and at Probuse we are committed to making this transition as smooth as possible.”

Mustufa Rangwala • CEO of Probuse

🌐 Part 1 – Key Highlights (Overview)

1. Technical Improvements

  • Default field definitions updated (fields.date.today()fields.Date.today()).

  • Model fields standardized (e.g., product_uomproduct_uom_id).

  • Cleaner naming conventions with _id suffixes.

2. User Interface Enhancements

  • Kanban layouts migrated from <kanban-box> to <card>.

  • Avatar widgets (many2one_avatar_user) replace older image calls.

3. Functional Adjustments

  • HR and Expense modules simplified, with obsolete objects removed.

  • Sales and Purchase fields cleaned up (e.g., taxes_idtax_ids).

4. API & Controller Updates

  • Controller routes now use JSON-RPC instead of legacy JSON.

  • Service calls in JavaScript modernized (no more useService("company")).

5. Cleanup & Deprecations

  • Deprecated models like hr.candidate, hr.expense.sheet, and res.partner.title removed.

  • Old APIs like _company_default_get() and @api.returns dropped.

  • Context handling simplified: self._contextself.env.context.

👉 Takeaway for Businesses: Odoo 19 is moving toward a cleaner, more modern, and developer-friendly platform, but this also means older customizations may need to be updated.


⚙️ Part 2 – Full Technical Comparison Table (For Developers)

Topic

Odoo 18.0

Odoo 19.0

Field default

default=fields.date.today()

default=fields.Date.today()

Kanban Layout

<t t-name="kanban-box">

<t t-name="card">

Purchase Order Line

product_uom

product_uom_id

Sale Order Line

product_uom

product_uom_id

Product UoM object field

category_id

Removed

Kanban widget

kanban_image()

widget="many2one_avatar_user"

Actions

groups_id

group_ids

HR Module

_name = "hr.employee.base"

Removed

JS Service

useService("company")

user.activeCompany / user.companies

Route Controller

type="json"

type="jsonrpc"

Website Sale

sale_get_order()

request.cart

Website Sale (cart creation)

sale_get_order()

_create_cart()

Security Groups

Direct category_id

Now must use privilege_id

Decimal precision

dp.get_precision('Account')

digits='Account'

Datetime default

fields.datetime.now()

fields.Datetime.now()

Group Categories

base.module_category_usability

Removed

Context

self._context

self.env.context

HR Expense

product_uom_category_id

Removed

HR Expense Sheet

hr.expense.sheet

Removed

Window Action Inline Edit

Available

Removed

Company Defaults

_company_default_get()

Removed

HR Employee field

gender

sex

Expression import

from odoo.osv.expression import OR

Removed → +=

Mail Template

ctx['name']

ctx.get('name')

Groups field

users

user_ids

ORM Create

@api.model def create(self, vals)

@api.model_create_multi def create(self, vals_list)

Product field

sale_line_warn

Removed

xlwt Import

from odoo.tools.misc import xlwt

import xlwt

Account Move Line

product_uom_category_id

Removed

HR Candidate

hr.candidate

Removed

HR Employee Base

hr.employee.base

Use hr.employee or hr.employee.public

Cursor

self._cr

self.env.cr

Account Account

deprecated

active (if deprecated=False)

Website Pricelist

website.pricelist_id

request.pricelist

Partner field

mobile

Removed

ORM Search

_search(..., order=None)

_search(..., order=None, *, bypass_access=False, **kwargs)

Website Cart

_cart_update(...)

_cart_add(product_id, quantity, *, uom_id=None, **kwargs)

Datetime Today

fields.datetime.today()

fields.Datetime.today

SQL Constraints

_sql_constraints

models.Constraint

CRM Lead

mobile

Removed

API returns

@api.returns

Removed

Signup Method

_signup_with_values(self, token, values)

_signup_with_values(self, token, values, do_login)

Controller Domain

odoo.osv.expression.AND

odoo.fields.Domain

Product field

uom_po_id

Removed

Sale Order Line

tax_id

tax_ids

Deprecation

Warning for odoo.osv

Removed

Membership module

Membership

Partnership

Maintenance Equipment

location field

location_id in stock_maintenance

Purchase Order

notes

note

MRP Production

_onchange_product_id

Removed

Stock Move

_onchange_product_id / _onchange_product_uom

Removed

Portal Method

check_access_rights

check_access

Partner field

last_website_so_id

Removed

POS

this.pos.get_order()

this.pos.getOrder()

Purchase Order Line

taxes_id

tax_ids

Partner

picking_warn

Removed

CRM Lead

_handle_partner_assignment(..., create_missing=True)

_handle_partner_assignment(..., create_missing=True, with_parent=None)

CRM Lead

_create_customer(self)

_create_customer(self, with_parent=None)

Partner Title

res.partner.title

Removed

Field Attribute

group_operator="avg"

aggregator="avg"

Res Users

groups_id

group_ids

XML Group

<group expand="0" name="group_by" string="Group By">

<group>

HR Employee

department_id direct

Use employee.current_version_id

Fleet Vehicle

first_contract_date

contract_date_start

ORM Query

self._where_calc(domain)

self._search(domain, bypass_access=True)


🚀 Migration Recommendations

  • Review all custom modules for renamed or removed fields.

  • Update XML views (Kanban, security groups, group attributes).

  • Refactor controllers & services to JSON-RPC and new domain imports.

  • Test HR, Expense, and Membership/Partnership modules carefully due to removals.

  • Update website & POS customizations (cart, pricelist, order methods).


Final Note

Odoo 19.0 emphasizes standardization, simplification, and modernization across its framework. While these changes improve long-term stability, they also require careful migration efforts from developers.

We’ll continue updating this blog as more changes are confirmed during the Odoo 19 development cycle.

“From a functional perspective, Odoo 19 is evolving rapidly—while some familiar features are being restructured, these changes are paving the way for a more streamlined user experience.”

Sananaz Mansuri • Consultant at Probuse

“As a developer, I see Odoo 19 as more than just an upgrade — it’s a refinement that simplifies coding standards, removes redundancies, and makes customizations cleaner and more future-ready.”

 Pooja • Developer at Probuse


Insights & Updates

Exploring changes, improvements, and what’s coming next

Shaping the Future

Technology, innovation, and practical perspectives

What’s New, What’s Next

Adapting to change and staying ahead in the ecosystem

The Journey of Change

Smarter systems, better practices, stronger outcomes

Ready for Odoo 19 ? 

if any questions, contact us.

Innovation in action: our team powering the future with Odoo 19.

 

Probuse: Empowering Businesses with Odoo Across the Globe Since 2014