Ooidget for developers
Ooidget is an open format for interactive user interface, from a single control to an application’s whole window, written once as JSON and rendered alike on Windows, macOS, Linux, the web, iOS, Android, watches and, later, spatial devices.
A component is data: its state, layers drawn from that state, the children it contains and how they are laid out, and a behaviour that turns input into new state. Nothing in a component is specific to a platform, so the same file is the button in a desktop app, on a phone and on a web page.
The pieces
| Piece | What it is | Licence |
|---|---|---|
| Specification | The normative definition of the format: its objects, processing model and conformance. | CC BY 4.0 |
| JSON Schema and conformance tests | Validation for documents; the test suite runtimes are measured against. | MIT |
Reference core (ooidget) | Rust, with a C ABI: loads documents, keeps state, evaluates expressions, lays out and produces a draw list. | AGPL-3.0 or commercial |
| Web runtime | The core in WebAssembly, rendering to SVG: the reference rendering. | AGPL-3.0 or commercial |
| Bindings | C++, Swift, Kotlin, Go and Node packages over the C ABI or WebAssembly. | AGPL-3.0 or commercial |
| Ooidget Studio | The commercial IDE for authoring components and applications. | proprietary |
Built on standards
Ooidget specifies only its component model. Expressions and behaviours are ECMAScript; layout is CSS flexbox and CSS positioning; drawing is SVG and CSS painting; colours are CSS colours; design tokens are the W3C DTCG format; accessibility is WAI-ARIA. If you know the web platform, you already know most of Ooidget.
Where to start
- Your first component: a toggle button, from an empty file to a running widget.
- Embedding from C and C++: load components and draw them in your own application.
- The specification, when you need the exact rules.