Odoo’s frontend is shedding its jQuery skin faster than most people realize. Five new field widgets — ProgressBarField, EmailField, PercentageField, PhoneField, and UrlField — have landed as fully reactive OWL components, and they represent one of the most tangible milestones yet in the project’s sprawling WOWL migration. If you’ve been tracking Odoo’s shift from its legacy widget architecture to the OWL (Odoo Web Library) framework, this batch of components tells you how far along that transition really is.
The WOWL Migration, Explained
For years, Odoo’s web client relied on a homegrown jQuery-based widget system that served the platform well enough through versions 10 through 16. But jQuery widgets are imperative, hard to test in isolation, and increasingly difficult to maintain as the frontend grows more complex. The answer was OWL — Odoo’s own reactive component framework, inspired by the same ideas that drive React and Vue but purpose-built for Odoo’s architecture.
Internally, the effort to rewrite every frontend widget, view, and action as an OWL component is known as “WOWL” — Web OWL. It’s not a single release or a flag you flip. It’s a multi-year, module-by-module rewrite of everything that renders in the browser. The five field widgets shipping now are part of that broader campaign, and they replace some of the most commonly used legacy field renderers in the system.
ProgressBarField: Finally, a Native Progress Bar
The most visually striking of the five is ProgressBarField, which renders any numeric field as a horizontal progress bar. Think task completion percentages on project kanban cards, manufacturing order progress, or CRM pipeline stage indicators. The old jQuery widget could do something similar, but it was essentially a styled<div>with inline width calculations. The OWL version is a proper reactive component that re-renders automatically when the underlying value changes — no manual DOM manipulation required.
What makes ProgressBarField particularly useful is its dual-mode behavior. In display mode, it shows a clean, read-only bar with the current value. In edit mode, users can interact with it directly. Validation is built in, so values outside the expected range are caught before they hit the server.
EmailField and PhoneField: Communication Links Done Right
EmailField and PhoneField sound simple — and conceptually, they are. EmailField renders an email address as a clickablemailto: link. PhoneField renders a phone number as a clickable tel: link with proper international formatting. But the devil has always been in the implementation. The legacy widgets handled these as plain text with click handlers bolted on, which meant inconsistent behavior across browsers and no graceful degradation on mobile devices.
The OWL versions treat these as first-class interactive components. EmailField validates email format before rendering the link. PhoneField understands international dialing conventions and formats numbers accordingly. Both switch seamlessly between display mode, where they appear as styled clickable links, and edit mode, where they become standard input fields with type-appropriate validation. It’s the kind of polish that users rarely notice but developers deeply appreciate.
For organizations running Odoo on tablets or phones — which is increasingly common in warehouse and field service deployments — these components make a real difference. A tel:link on a mobile device launches the dialer. A mailto:link opens the mail client. The old widgets technically did this too, but not reliably, and not with the formatting consistency that comes from a proper reactive component.
PercentageField: Decimals Meet Human Readability
PercentageField solves an annoyance that has plagued Odoo users since the beginning: decimal fields that store values like 0.87 but need to display as 87%. The legacy approach was a formatting widget that converted the value for display and converted it back on save, with all the rounding errors and edge cases that implies. The OWL PercentageField handles the conversion natively, formats the output with locale-appropriate separators, and ensures that what the user sees is always consistent with what’s stored in the database.
It’s a small component with outsized impact. Discount fields on sales orders, tax rates, completion metrics on timesheets, probability scores in CRM — all of these use percentage display, and all of them benefit from a single, well-tested component that handles the conversion correctly every time.
UrlField: Taming the Long Address
UrlField rounds out the batch by rendering URL values as clickable hyperlinks. That sounds trivial until you consider what URLs actually look like in a typical Odoo deployment. Supplier website fields, document links, integration callback URLs — these can easily stretch to 200 characters or more, breaking table layouts and making list views unreadable.
The OWL UrlField includes built-in truncation that shortens displayed URLs to a readable length while preserving the full address in the underlying link. In display mode, a long URL might show as “https://supplier.example.com/catalog/...” while still linking to the complete address. In edit mode, the full URL is visible and editable with proper validation to catch malformed addresses before they’re saved.
What This Means for the WOWL Roadmap
These five widgets aren’t flashy. They don’t add new business logic or unlock capabilities that weren’t possible before. What they do is replace some of the most fundamental building blocks of Odoo’s user interface with modern, reactive, component-based alternatives. Every form view that displays an email address, every kanban card with a progress bar, every list view with a phone number — all of these now run on OWL instead of jQuery.
The broader significance is architectural. Each legacy widget that gets rewritten as an OWL component is one fewer dependency on the old imperative rendering system. At some point — and Odoo seems to be approaching it faster than many expected — the jQuery widget system can be removed entirely. That unlocks performance improvements, simplifies the JavaScript build pipeline, and makes the frontend dramatically easier for third-party module developers to extend.
For developers building custom modules, the takeaway is clear: if you’re still writing jQuery widgets, you’re writing for a system that’s actively being retired. The OWL component API — now in its v2/v3 iteration — is the present and the future. These five field widgets are proof that the migration isn’t theoretical. It’s shipping, one component at a time.