CodeOX Logo
CodeOX Logo
Vol. I — No. 1
Featured Article
Sep 30, 2026

What's New in Odoo's JavaScript Framework

Reported By

Faisal

What's New in Odoo's JavaScript Framework
Figure 1. What's New in Odoo's JavaScript Framework · Original Photography for The Chronicle

Prepared by Faisal · Codeox Technologies

The Big Picture, in One Line

Odoo rebuilt the entire front-end of the website (the part that powers e-commerce, forms, and page building) almost from scratch, while the core back-office framework stayed mostly stable with a lot of smaller, useful upgrades — especially around speed and offline support.

Odoo's own summary slide: a big refactor on the website side, and a steady stream of improvements on the web client side.
Odoo's own summary slide: a big refactor on the website side, and a steady stream of improvements on the web client side.

Two Frameworks Living Side by Side

A lot of people assume Odoo only has one JavaScript framework, called Owl. That's not quite right. There are really two different systems working together, and understanding the split helps explain why some things changed a lot this year and others barely changed at all.

The web client (back-office apps like Accounting, CRM, Inventory) is built on Owl. The website (e-commerce, landing pages) now uses a new, lighter system called "Interaction."
The web client (back-office apps like Accounting, CRM, Inventory) is built on Owl. The website (e-commerce, landing pages) now uses a new, lighter system called "Interaction."

Owl is Odoo's component system — think of it as similar in spirit to React. It's used to build the apps we work in every day: Sales, Accounting, Inventory, CRM, and so on. The website works differently: pages are rendered by the server first, and then a lighter layer of JavaScript is "attached" on top to add behavior like pop-ups, sliders, or add-to-cart buttons. Because these two things work so differently, Odoo has always needed two separate approaches — but this year they closed the gap significantly.

Both back-office apps (CRM, Invoicing, Accounting, POS) and website features (e-commerce, Survey) plug into the same underlying framework, just through different doors.
Both back-office apps (CRM, Invoicing, Accounting, POS) and website features (e-commerce, Survey) plug into the same underlying framework, just through different doors.

The Website Got a Complete Rebuild

This was the headline change. For years, the website side of Odoo relied on something called "Public Widgets" — an older, clunkier way of attaching JavaScript behavior to web pages. It worked, but it felt disconnected from the rest of Odoo's codebase, which made it harder for developers to move between website work and back-office work. Odoo has now replaced Public Widgets entirely with a new, lightweight system called "Interactions."

The three big website changes: Public Widgets are gone, there's a new HTML editor, and the Website Builder has been rebuilt using Owl.
The three big website changes: Public Widgets are gone, there's a new HTML editor, and the Website Builder has been rebuilt using Owl.

What are "Interactions"?

Think of Interactions as a stripped-down, simpler cousin of Owl — built specifically for websites. It's not meant to replace a full app interface; it's meant to attach small bits of behavior (like a click handler, a counter, or showing/hiding something) onto pages that are still rendered by the server. The benefit: website code and app code now speak a much more similar language, and in the future Odoo could even offer super-lightweight pages that don't need the whole framework loaded at all.

Interactions are described as a lightweight, "reactive" replacement for Public Widgets that can still tap into Odoo's core services (like notifications) directly.
Interactions are described as a lightweight, "reactive" replacement for Public Widgets that can still tap into Odoo's core services (like notifications) directly.
Here's what the new code actually looks like — a modern JavaScript class with clear rules for what to watch on the page (dynamicContent) and what happens on events like clicks.
Here's what the new code actually looks like — a modern JavaScript class with clear rules for what to watch on the page (dynamicContent) and what happens on events like clicks.

A Rebuilt Website Builder

On top of the new Interactions system, Odoo also rebuilt the entire drag-and-drop Website Builder — the tool clients use to design their pages — using Owl. Around 30 developers worked on this. The good news for us: the underlying technology changed, and the options panel has a new syntax for developers, but existing custom snippets (the building blocks clients already use) should keep working without needing to be rebuilt.

The new Website Builder interface, rebuilt in Owl — same drag-and-drop experience for end users, modernized code underneath.
The new Website Builder interface, rebuilt in Owl — same drag-and-drop experience for end users, modernized code underneath.

The Back-Office (Web Client): Fewer Big Changes, More Quiet Wins

Unlike the website, the core web client — the part behind Sales, Accounting, Inventory, and every other back-office app — barely changed on the surface. Odoo confirmed that Owl itself had fewer than 20 commits in the entire year. That's good news for us: it means our customizations and modules are unlikely to break because of this layer. Instead, the real effort went into making Odoo faster and more resilient, especially around offline use.

Caching and "Offline Mode"

Odoo has been quietly building a caching system so the app can remember data it already fetched, instead of always waiting on the server. Developers can now mark specific data calls to be cached — either in memory (RAM) or on disk — and choose how often that cache should refresh.

A look at the code: developers can now flag any data request to be cached, choose whether it lives in memory or on disk, and decide how often it should refresh.
A look at the code: developers can now flag any data request to be cached, choose whether it lives in memory or on disk, and decide how often it should refresh.

Faster-Feeling Screens (Optimistic Rendering)

Because of this caching work, Odoo can now show a screen immediately using the last-known data, fetch the real data in the background, and quietly update the screen only if something actually changed. In practice, this makes the app feel noticeably snappier, even though the underlying request still happens. It's worth noting Odoo was clear that this is not full offline editing yet — you generally can't create or change records with no internet connection today. It's about making things feel fast and staying usable when the connection is slow or briefly drops.

"Optimistic rendering": show what you already have, fetch the latest in the background, and only refresh the screen if the data actually changed.
"Optimistic rendering": show what you already have, fetch the latest in the background, and only refresh the screen if the data actually changed.

Small Changes That Are Easy to Love

Alongside the big rebuilds, there were several smaller improvements that are worth flagging because clients and users will notice them directly.

Other framework additions this year: support for add-on-specific translations, custom template directives for advanced developers, and better developer tools.
Other framework additions this year: support for add-on-specific translations, custom template directives for advanced developers, and better developer tools.
  • Middle-click / Ctrl-click now works properly across the interface — for example, opening a task from the Project view in a new browser tab, something that wasn't possible before Odoo 19.
  • Bottom-sheet pop-ups on mobile: mobile pop-ups now open as a "bottom sheet" (sliding up from the bottom of the screen) by default, which is a much more natural pattern on phones.
  • jQuery removed from the rebuilt website code. It's technically still bundled for backward compatibility, but any custom code we've written that depends on it will need to be reviewed at some point going forward.
  • A mini "date language" for filters: filters can be written as plain expressions like "today", "-monday", or "now -5M" instead of complex code — much easier to read and set up.
  • A new /doc endpoint gives a browsable, always-up-to-date reference of every model and field in a given Odoo instance — handy for scoping integrations or writing technical documentation for clients.
Middle-click and Ctrl-click now reliably open records in a new tab across the interface — a small thing, but a genuinely welcome one for daily use.
Middle-click and Ctrl-click now reliably open records in a new tab across the interface — a small thing, but a genuinely welcome one for daily use.
On mobile, menus and filters now slide up as a "bottom sheet" instead of a floating pop-up — a much more natural, app-like feel.
On mobile, menus and filters now slide up as a "bottom sheet" instead of a floating pop-up — a much more natural, app-like feel.
jQuery isn't gone entirely, but it's no longer a dependency of the rebuilt website code.
jQuery isn't gone entirely, but it's no longer a dependency of the rebuilt website code.
Filters and dates can now be written in plain language instead of complex expressions — a small change that makes life easier for anyone configuring custom views or filters.
Filters and dates can now be written in plain language instead of complex expressions — a small change that makes life easier for anyone configuring custom views or filters.
The new /doc endpoint gives a live, browsable reference of every model and field — useful for technical scoping and documentation.
The new /doc endpoint gives a live, browsable reference of every model and field — useful for technical scoping and documentation.

Why This Matters for Us

For our day-to-day project work, the practical takeaways are:

  • Existing website snippets and customizations should keep working, but any custom module that hooks into the old Public Widget system or relies on jQuery in the website layer will eventually need a review when we touch those projects again.
  • Back-office customizations (the bulk of our work — CRM, Accounting, Inventory, MRP) are on a much more stable foundation this year, since Owl itself changed very little.
  • Clients running on newer Odoo versions should feel a noticeably snappier, more mobile-friendly interface without us having to do anything extra.
  • The new /doc endpoint could genuinely save us time during requirement-gathering and technical scoping on new engagements.

The Balancing Act

Odoo's own developers were upfront that this kind of change is never risk-free. Every rewrite risks breaking someone's customization, but standing still isn't an option either — the codebase has to evolve to stay maintainable and to keep adding the features clients ask for.

Odoo's own framing of the trade-off: they have to keep the API reasonably stable, keep adding features, and keep reducing technical debt — all at the same time.
Odoo's own framing of the trade-off: they have to keep the API reasonably stable, keep adding features, and keep reducing technical debt — all at the same time.

Bottom Line

This year's release is really a story in two halves: a major, ground-up rebuild of the website and page-builder technology (Interactions and the new Website Builder), paired with a quieter, more conservative year for the core back-office framework that focused on speed, caching, and small quality-of-life fixes. For our clients, that should mean a faster, more modern experience with minimal disruption to existing customizations — with the main thing to watch being any older website-layer code that leaned on Public Widgets or jQuery.

What's New in Odoo's JavaScript Framework