Owl 3: A minimalist UI framework built on Signals and Proxies

pointedulac1 pts0 comments

OWL Documentation | OWL

๐Ÿฆ‰">

Skip to content

Appearance

MenuReturn to top

OWL Documentation โ€‹<br>Owl is a modern UI framework (~30kb gzipped, zero dependencies) written in TypeScript, built by Odoo. It powers Odoo's web client, one of the largest open-source business applications, but is equally suited for small projects and prototypes.<br>Key features:<br>Signal-based reactivity โ€” Explicit, composable, and debuggable state management<br>Plugin system โ€” Type-safe, composable sharing of state and services<br>Class-based components โ€” Familiar OOP patterns with ES6 classes<br>Declarative templates โ€” XML templates with a clean syntax<br>Async rendering โ€” Concurrent mode for smooth user experiences<br>No toolchain required โ€” Works directly in the browser with native ES modules<br>Quick Example โ€‹<br>javascriptimport { Component, signal, mount, xml } from "@odoo/owl";

class Counter extends Component {<br>static template = xml`<br>div class="counter"><br>button t-on-click="this.decrement">-button><br>span t-out="this.count()"/><br>button t-on-click="this.increment">+button><br>div>`;

count = signal(0);

increment() {<br>this.count.set(this.count() + 1);<br>decrement() {<br>this.count.set(this.count() - 1);

mount(Counter, document.body);<br>count is a signal: calling this.count() reads it, and this.count.set(...) updates it. When the value changes, Owl re-renders the component automatically โ€” no manual subscriptions needed.

count signal button odoo class component

Related Articles