🦉 Odoo Web Library 🦉

_A web framework for structured, dynamic and maintainable applications_ ## Project Overview The Odoo Web Library (OWL) is a small UI framework intended to be the basis for the [Odoo](https://www.odoo.com/) Web Client, and hopefully many other Odoo related projects. OWL's main feature is a _declarative component system_, with QWeb as a template engine, asynchronous rendering, and an underlying virtual dom. **Try it online!** An online playground is available at [https://odoo.github.io/owl/playground](https://odoo.github.io/owl/playground) to let you experiment with the OWL framework. ## OWL's Design Principles OWL is designed to be used in highly dynamic applications where changing requirements are common, code needs to be maintained by large teams. - **XML based**: templates are based on the XML format, which allows interesting applications. For example, they could be stored in a database and modified dynamically with `xpaths`. - **templates compilation in the browser**: this may not be a good fit for all applications, but if you need to generate dynamically user interfaces in the browser, this is very powerful. For example, a generic form view component could generate a specific form user interface for each various models, from a XML view. - **no toolchain required**: this is extremely useful for some applications, if, for various reasons (security/deployment/dynamic modules/specific assets tools), it is not ok to use standard web tools based on `npm`. Owl is not designed to be fast or small (even though it is quite good on those two topics). If you are interested in a comparison with React or Vue, you will find some more information [here](doc/comparison.md). ## Example Here is a short example to illustrate interactive components: ```xml ``` ```javascript class Counter extends owl.Component { state = { value: 0 }; increment() { this.state.value++; } } const qweb = new owl.QWeb(TEMPLATES); const counter = new Counter({ qweb }); counter.mount(document.body); ``` Note that we assume here that the xml templates are available in the `TEMPLATES` string. More interesting examples can be found on the [playground](https://odoo.github.io/owl/playground) application. ## Installing/Building If you want to use a simple `