Skip to Content
Upgrade step

Odoo 19 to 20: what changed

Community + Enterprise Community + Enterprise modules. 1,944 models in Odoo 19, 2,203 in Odoo 20.

434models added
175models removed
4,254fields added
1,686fields removed
53renames
102field type changes
3,552views removed
133modules removed

Breaking changes to know first

get_param() / set_param() removed

ir.config_parameter get_param() and set_param() were removed in Odoo 20.

What to do: Use the typed accessors get_str / get_int / get_float / get_bool and set_str / set_int / ...

Binary fields no longer take base64 bytes

Odoo 20 binary fields raise TypeError when given bytes such as the output of base64.b64encode().

What to do: Write raw content (BinaryBytes / attachment raw), or decode base64 to a str first.

read_group() takes the _read_group signature

In Odoo 20 read_group() takes groupby and aggregates and returns tuples, like _read_group().

What to do: Use formatted_read_group() for dictionary results, or adapt to read_group(domain, groupby, aggregates).

Record rules (ir.rule) replaced by ir.access

Odoo 20 replaced record rules (ir.rule) with access records that carry a domain (ir.access).

What to do: Use env['ir.access'] with a domain instead of ir.rule.

ir.model.access replaced by ir.access

Odoo 20 replaced access rights (ir.model.access) with ir.access (operations + optional domain).

What to do: Use env['ir.access'] with operation 'r' / 'rw' / 'crud' and an optional domain; the CSV file becomes security/ir.access.csv.

Renamed models and fields

Odoo 19Odoo 20Kind
ir.model.access ir.access model
ir.rule ir.access model
51 more field renames detected from matching names and types (likely, not confirmed)
ModelOdoo 19Odoo 20Confidence
res.config.settings l10n_co_dian_cert_credit_countl10n_co_edi_cert_credit_count likely
res.config.settings l10n_co_dian_cert_debit_countl10n_co_edi_cert_debit_count likely
res.config.settings l10n_co_dian_cert_invoice_countl10n_co_edi_cert_invoice_count likely
res.config.settings l10n_co_dian_certificate_idsl10n_co_edi_certificate_ids likely
res.config.settings l10n_co_dian_certification_processl10n_co_edi_certification_process likely
res.config.settings l10n_co_dian_demo_model10n_co_edi_demo_mode likely
res.config.settings l10n_co_dian_operation_mode_idsl10n_co_edi_operation_mode_ids likely
res.config.settings l10n_co_dian_test_environmentl10n_co_edi_test_environment likely
res.config.settings l10n_vn_edi_default_symboll10n_vn_edi_default_symbol_id possible
res.config.settings pos_iface_display_idpos_iot_display_id likely
res.config.settings pos_iface_printer_idpos_iot_printer_id likely
res.config.settings pos_iface_scale_idpos_iot_scale_id likely
res.config.settings pos_iface_scanner_idspos_iot_scanner_ids likely
res.config.settings send_request_wa_template_idsign_send_request_wa_template_id possible
res.config.settings stock_journalstock_journal_id possible
res.company l10n_co_dian_certificate_idsl10n_co_edi_certificate_ids likely
res.company l10n_co_dian_certification_processl10n_co_edi_certification_process likely
res.company l10n_co_dian_demo_model10n_co_edi_demo_mode likely
res.company l10n_co_dian_operation_mode_idsl10n_co_edi_operation_mode_ids likely
res.company l10n_co_dian_test_environmentl10n_co_edi_test_environment likely
hr.version new_carhas_new_car possible
account.move l10n_co_dian_attachment_idl10n_co_edi_attachment_id likely
account.move l10n_co_dian_claim_reasonl10n_co_edi_claim_reason likely
account.move l10n_co_dian_commercial_statel10n_co_edi_commercial_state likely
account.move l10n_co_dian_document_idsl10n_co_edi_document_ids likely
account.move l10n_co_dian_identifier_typel10n_co_edi_identifier_type likely
account.move l10n_co_dian_is_enabledl10n_co_edi_is_enabled likely
account.move l10n_co_dian_post_timel10n_co_edi_post_time likely
account.move l10n_co_dian_processed_by_get_event_status_cronl10n_co_edi_processed_by_get_event_status_cron likely
account.move l10n_co_dian_show_support_doc_buttonl10n_co_edi_show_support_doc_button likely
account.move l10n_co_dian_statel10n_co_edi_state likely
account.move l10n_co_dian_update_commercial_event_enabledl10n_co_edi_update_commercial_event_enabled likely
pos.config iface_display_idiot_display_id likely
pos.config iface_printer_idiot_printer_id likely
pos.config iface_scale_idiot_scale_id likely
pos.config iface_scanner_idsiot_scanner_ids likely
pos.config is_closing_entry_by_productuse_closing_entry_by_product likely
pos.config is_header_or_footeruse_header_or_footer likely
pos.config is_order_printeruse_order_printer likely
hr.payslip use_worked_day_linesstruct_use_worked_day_lines possible
pos.session statement_line_idsbank_statement_line_ids possible
account.asset account_depreciation_expense_idimport_account_depreciation_expense_id possible
account.asset account_depreciation_idimport_account_depreciation_id possible
marketing.campaign domainenroll_domain possible
marketing.campaign unique_field_idenroll_unique_field_id possible
marketing.activity domainsplit_domain possible
ai.composer ai_agentai_agent_id possible
event.event address_inlinecontact_address_inline possible
frontdesk.visitor host_idsstation_host_ids possible
event.event.ticket price_incltotal_price_incl possible
event.event.ticket price_reduce_taxinctotal_price_reduce_taxinc possible

Models removed in Odoo 20 (175)

Grouped by the module that defined them in Odoo 19. E = Enterprise module.

account

account_peppol

account_reports

account_sepa_direct_debit

account_winbooks_import

ai

  • ai.topicECreate a topic that leverages instructions and tools to direct Odoo AI in assisting the user with their tasks.

appointment

barcodes

base

calendar

crm

data_cleaning

documents

esg_hr_fleet

frontdesk

google_calendar

helpdesk_fsm

hr

hr_appraisal_skills

hr_attendance

hr_expense

hr_holidays

hr_payroll

hr_recruitment

hr_skills

hr_work_entry

im_livechat

industry_fsm

industry_fsm_report

industry_fsm_stock

l10n_ar_withholding

l10n_be_hr_payroll

l10n_be_hr_payroll_acerta

l10n_be_hr_payroll_group_s

l10n_be_hr_payroll_partena

l10n_be_hr_payroll_prisma

l10n_be_hr_payroll_sd_worx

l10n_be_hr_payroll_ucm

l10n_be_pos_blackbox

l10n_be_reports

l10n_co_dian

l10n_dk_oioubl

l10n_es_reports

l10n_es_reports_2025

l10n_fr_hr_payroll

l10n_fr_pdp

l10n_fr_reports

l10n_hk_hr_payroll

l10n_hu_edi_receive

l10n_in

l10n_in_hr_payroll

l10n_it_hr_payroll_sd_worx

l10n_latam_base

l10n_lu_hr_payroll

l10n_mx_xml_polizas

l10n_ph

l10n_ph_reports

l10n_ro_reports_d300

l10n_se_returns

l10n_tr_nilvera_einvoice_extended

l10n_uk_reports

l10n_us_hr_payroll_adp

l10n_vn_edi_viettel

mail

mail_plugin

mass_mailing

planning

point_of_sale

pos_blackbox_be

pos_enterprise

pos_iot_six

pos_urban_piper

pos_urban_piper_enhancements

purchase_requisition

repair

sale_renting

sign

social

stock

stock_account

stock_intrastat

timesheet_grid

transifex

utm

voip

website_sale

Models added in Odoo 20 (434)

Modules with the most new models:

l10n_be_hr_payroll 34 voip 31 l10n_fr_reports 20 l10n_ph_reports 15 l10n_es_reports 11 ai 9 mail 9 account_reports 8 whatsapp 7 l10n_hu_reports_a60 6 l10n_mx_edi 6 l10n_ph_hr_payroll 6 l10n_vn_reports 6 product 6 stock 6 hr_holidays 5

See all 434 new models, grouped by module

Modules removed and added

133 modules of Odoo 19 are gone

account_accountant_batch_paymentaccount_add_glnaccount_peppol_advanced_fieldsaccount_peppol_responseaccount_winbooks_importai_appbase_ibanbase_vatdelivery_mondialrelaydelivery_stock_picking_batchdocuments_fsmesg_csrdesg_csrd_aiesg_csrd_hresg_csrd_hr_fleetesg_projecthelpdesk_fsmhelpdesk_fsm_reporthelpdesk_fsm_salehr_contract_salary_holidayshr_contract_salary_payrollhr_holidays_homeworkinghr_homeworkinghr_homeworking_calendarhr_hourly_costhr_org_charthr_payroll_holidayshr_payroll_planninghr_payroll_sale_commissionhr_work_entry_attendancehr_work_entry_enterprisehr_work_entry_holidayshr_work_entry_holidays_enterprisehr_work_entry_planninghr_work_entry_planning_attendanceindustry_fsmindustry_fsm_repairindustry_fsm_reportindustry_fsm_saleindustry_fsm_sale_reportindustry_fsm_sale_subscriptionindustry_fsm_smsindustry_fsm_stockiot_baseiot_box_imagel10n_ar_reports_simplel10n_be_coda_extension_numberl10n_be_hr_payroll_acertal10n_be_hr_payroll_dimonal10n_be_hr_payroll_dimona_autol10n_be_hr_payroll_fixl10n_be_hr_payroll_fleetl10n_be_hr_payroll_group_sl10n_be_hr_payroll_partenal10n_be_hr_payroll_prismal10n_be_hr_payroll_sd_worxl10n_be_hr_payroll_ucml10n_be_intervatl10n_be_pos_blackboxl10n_be_pos_blackbox_hrl10n_be_pos_blackbox_hr_pos_blackbox_bel10n_be_pos_blackbox_loyaltyl10n_be_pos_blackbox_pos_blackbox_bel10n_be_pos_blackbox_self_orderl10n_be_pos_blackbox_settle_duel10n_be_pos_blackbox_urban_piperl10n_be_reports_client_nihill10n_br_edi_fiscal_reforml10n_br_edi_pos_fiscal_reforml10n_br_edi_sale_fiscal_reforml10n_br_website_sale_fiscal_reforml10n_cn_cityl10n_co_dianl10n_co_edi_mandatel10n_din5008_industry_fsml10n_dk_nemhandell10n_dk_nemhandel_responsel10n_dk_oioubll10n_ec_stockl10n_es_reports_2024l10n_es_reports_2025l10n_fr_hr_payrolll10n_fr_hr_payroll_accountl10n_fr_hr_work_entry_holidaysl10n_hk_hr_payroll_empfl10n_hu_edi_receivel10n_it_hr_payroll_sd_worxl10n_latam_basel10n_mx_hr_payroll_account_edil10n_mx_reports_closingl10n_mx_xml_polizasl10n_nl_returnsl10n_pk_reportsl10n_pl_bank_verificationl10n_pl_reports_account_saftl10n_pl_reports_jpk_fal10n_ro_cpv_codel10n_ro_edi_stock_batchl10n_sa_withholding_taxl10n_se_returnsl10n_tr_nilvera_base_vatl10n_tr_nilvera_einvoice_extendedl10n_us_hr_payroll_adpl10n_uy_posmrp_subcontracting_repairmrp_workorder_expirymrp_workorder_iotpos_blackbox_bepos_iot_ingenicopos_restaurant_adyenpos_restaurant_stripepos_restaurant_urban_piperpos_self_order_adyenpos_self_order_stripepos_self_order_viva_compos_urban_piper_enhancementspos_urban_piper_ubereatspurchase_requisition_salequality_control_picking_batchquality_mrp_workorder_iotstock_barcode_picking_batchstock_barcode_quality_control_picking_batchstock_picking_batchtheme_commontransifexvoip_onsipwebsite_sale_autocompletewebsite_sale_collect_wishlistwebsite_sale_comparisonwebsite_sale_comparison_wishlistwebsite_sale_mondialrelaywebsite_sale_stock_wishlistwebsite_sale_wishlist

250 new modules in Odoo 20

account_accountant_payment_intercoaccount_direct_debitaccount_loans_extractaccount_payment_customaccount_payment_intercoaccount_reports_spreadsheetai_account_reportsai_agenticai_agentic_documentsai_agentic_knowledgeai_calendarai_cloud_storageai_documents_fleetai_esgai_helpdeskai_hr_recruitment_integration_website_livechatai_html_builderai_marketing_automationai_marketing_automation_crmai_marketing_automation_loyaltyai_marketing_automation_smsai_marketing_automation_website_saleai_marketing_automation_whatsappai_mass_mailingai_mcpai_portalai_productai_projectai_purchaseai_saleai_sale_marginai_sale_stockai_socialai_stockai_timesheet_gridai_website_appointment_livechatai_website_appointment_saleai_website_blog_livechatai_website_event_livechatai_website_helpdeskai_website_saleai_website_sale_livechatai_website_sale_slidesai_website_slides_livechatbase_report_paper_muncherbase_report_wkhtmltoxcrm_sale_projectdata_merge_productdelivery_fedex_certifieddelivery_shipstationdocuments_hr_recruitmentdocuments_hr_recruitment_signdocuments_hr_signdocuments_hr_skillsdocuments_l10n_ph_hr_payrolldocuments_spreadsheet_signfleet_maintenancefrontdesk_partnershipfrontdesk_smsfrontdesk_whatsapphelpdesk_planning_field_servicehelpdesk_planning_field_service_sale_timesheethelpdesk_timesheet_calendarhr_address_extendedhr_attendance_biometric_integrationhr_attendance_esslhr_attendance_mantrahr_attendance_zktecohr_calendar_googleiot_webseriall10n_ae_hr_contract_salaryl10n_be_hr_payroll_expensel10n_be_hr_payroll_signl10n_be_posl10n_be_reports_vat_commentl10n_be_saftl10n_bg_intrastatl10n_bg_saftl10n_br_edi_extractl10n_ci_edil10n_cl_reports_f29l10n_din5008_planning_field_servicel10n_do_edil10n_eg_edi_posl10n_eg_hr_contract_salaryl10n_es_reports_posl10n_es_website_salel10n_eu_account_viesl10n_fr_account_loansl10n_fr_paymentl10n_fr_reports_accountant_knowledgel10n_gfl10n_gpl10n_gr_edi_delivery_notel10n_gr_edi_e_invool10n_gr_intrastatl10n_gt_reportsl10n_hk_autopayl10n_hk_payment_autopayl10n_hu_intrastatl10n_hu_reports_a60l10n_id_pos_self_order_qrisl10n_in_boel10n_in_hr_contract_salaryl10n_iq_hr_payrolll10n_iq_hr_payroll_accountl10n_kr_salel10n_kw_hr_payrolll10n_kw_hr_payroll_accountl10n_mkl10n_mk_reportsl10n_mml10n_mql10n_mt_intrastatl10n_no_saft_importl10n_om_hr_payrolll10n_om_hr_payroll_accountl10n_pe_edi_withholdingl10n_ph_hr_payrolll10n_ph_hr_payroll_accountl10n_ph_invoicel10n_ph_reports_assetl10n_ph_reports_stockl10n_ph_salel10n_pk_edil10n_pk_edi_posl10n_pl_edi_jstl10n_rel10n_ro_reports_d390l10n_rs_intrastatl10n_sa_hr_contract_salaryl10n_sa_hr_payroll_attendancel10n_sa_hr_payroll_gosil10n_se_intrastatl10n_tr_currency_live_ratel10n_tr_nilvera_edispatch_qualityl10n_tr_nilvera_einvoice_subscription_salel10n_tw_edi_ecpay_salel10n_us_reports_avataxl10n_uy_edi_posl10n_uz_hr_payrolll10n_uz_hr_payroll_accountl10n_vn_edi_viettel_stockl10n_vn_hr_payrolll10n_vn_hr_payroll_accountl10n_ytl10n_za_hr_payrolll10n_za_hr_payroll_accountmail_trackingmail_tracking_mass_mailingmail_tracking_smsmaintenance_enterprisemarketing_automation_loyaltymarketing_automation_websitemarketing_card_eventmrp_deliverymrp_iotmysubscriptionoboxobox_androidobox_mrpobox_point_of_saleobox_point_of_sale_androidobox_pos_mobileobox_pos_self_orderobox_pos_self_order_androidobox_qualityobox_quality_androidobox_quality_controlobox_quality_control_androidplanning_field_serviceplanning_field_service_hr_attendanceplanning_field_service_repairplanning_field_service_sale_stockplanning_field_service_sale_subscriptionplanning_field_service_sale_timesheetplanning_field_service_sale_timesheet_barcodesplanning_field_service_sale_worksheetplanning_field_service_smsplanning_field_service_stockplanning_field_service_stock_subscriptionplanning_field_service_worksheetplanning_sale_subscriptionpopulateportal_discusspos_bancontact_paypos_mobile_androidpos_partner_autocompletepos_planningpos_sale_commissionpos_sale_deliverypos_sale_planningpos_sale_purchase_stock_inter_company_rulespos_sale_renting_planningpos_sale_stockpos_self_order_bancontact_paypos_self_order_eventpos_self_order_mobilepos_self_order_smspos_self_order_urban_piperpos_stockpos_stock_enterprisepricerprinterproject_enterprise_hr_todoproject_timesheet_forecast_field_service_salepurchase_alternativepurchase_alternative_salepurchase_alternative_stockpurchase_quality_controlquality_control_iot_webserialsale_project_enterprisesale_project_marginsale_renting_intrastatsale_renting_loyaltysale_renting_pdf_quote_buildersale_subscription_loyaltyspreadsheet_dashboard_hr_appraisalspreadsheet_dashboard_sale_timesheet_enterprisespreadsheet_dashboard_voipspreadsheet_edition_accountstock_barcode_barcodelookup_product_expirystock_barcode_fleetstock_intrastat_posstock_intrastat_purchase_stockstock_intrastat_sale_stockstock_pricertheme_brutalisttheme_caretheme_eclipsetheme_lineatheme_musetheme_pawtastictheme_zenithtimesheet_grid_calendartimesheet_grid_hr_attendancevoip_cloud_storage_googlevoip_projectvoip_salewebsite_address_autocompletewebsite_generator_blogwebsite_mass_mailing_eventwebsite_partnershipwebsite_planning_field_servicewebsite_sale_collect_rentingwebsite_sale_enterprisewebsite_sale_projectwhatsapp_crmwhatsapp_planningwhatsapp_pos_self_order

Views, menus and actions removed

XML ids that existed in Odoo 19 and no longer exist in Odoo 20. Customisations that inherit or reference them fail to install. See the full list.

And 386 more modules in the full list.

Coverage. Odoo 16 to 17 and 17 to 18 compare Community modules only (the Enterprise 16 and 17 sources are not available to us). Odoo 18 to 19 and 19 to 20 include Community and Enterprise modules. Everything here comes from a static read of the Odoo source code: a field counts as removed only when no parent model, mixin or delegated model still provides it. Fields created dynamically at run time can be missed, and entries we could not confirm are marked as low confidence.