Architecture
Overview of Ultralight's module architecture.
On this page
Ultralight is built as a small stack of modules that build on top of each other.
The Engine
Three libraries make up the core engine (see Linking to the Library).
| Library | What it holds |
|---|---|
Ultralight |
The API you program against. Responsible for managing Views, high-level rendering, input translation, compositing, resource policies, and event dispatch. |
WebCore |
The HTML/CSS layout engine, our fork of WebKit. It parses resources, applies styles, calculates layout, and turns the result into a tree of paint nodes. JavaScriptCore, WebKit's JavaScript VM, lives here too. |
UltralightCore |
Our drawing library, responsible for all low-level graphics routines (paths, fonts, GPU command lists, CPU rasterization, tessellation, image cache, etc.). |
The App Framework
AppCore is optional. It creates platform windows, runs the event loop, forwards input, drives the GPU with stock drivers— everything Writing Your First App leans on.
You can skip it when Ultralight lives inside your own engine or window system. Integrating into a Game Engine demonstrates that path, with the handlers you supply yourself in Setting Up the Platform.
AppCore is built from the reference implementations of the platform handlers in the SDK's platform folder (GPU drivers, font loaders, file systems, clipboards, and more), published under the Zlib license so you can copy them straight into your own engine.
The Page Bridges
Three opt-in header families connect native code to the page. None is pulled in by <Ultralight/Ultralight.h>— include the one you use.
- JavaScript bridge (
<Ultralight/JS.h>) — typed bindings between page script and native functions, classes, and promises. Start at About JavaScript Interop. - DOM API (
<Ultralight/DOM.h>) — documents, elements, styles, and events driven directly from native code, with or without JavaScript. Start at About the DOM API. - Data bindings (
<Ultralight/dom/data/Context.h>) — markup that keeps itself in sync with your application's data. Start at About Data Bindings.
All three are thin C++ layers over the C API, and JavaScriptCore's own C API remains available underneath for code that wants to go deeper (Using JavaScriptCore Directly).
The C API
Everything above is available from C as well— <Ultralight/CAPI.h> and <AppCore/CAPI.h> mirror the C++ surface, and the DOM and data-binding C headers under <Ultralight/CAPI/> are separate includes (see C API Conventions).