docs

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.

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).