Ultralight is a lightweight HTML rendering engine for games and native apps.

You generally:

1. **Build** your UI assets with the web technologies you already know.
2. **Render** them in your game or native app using Ultralight.
3. **Hook it up** to native logic and events using the DOM / JS bridge.

This documentation covers most of the things you need to know integrate Ultralight and use it in various environments.

See the following sections based on what you're building:

  * [Game Developers](#content-game-developers)
  * [Desktop App Developers](#content-desktop-app-developers)
  * [Embedded Developers](#content-embedded-developers)

## Prerequisites

Most guides assume you have the SDK on disk and a working build environment. Complete these steps before starting:

1. Get the SDK binaries in [Getting the SDK](/docs/2.0/getting-the-sdk).
2. Set up your environment in [Installing Prerequisites](/docs/2.0/installing-prerequisites).
3. Verify your build setup in [Trying the Samples](/docs/2.0/trying-the-samples).

## Game Developers

For game developers looking to integrate Ultralight into an existing game or game engine, see the following guides:

| Guide | Description |
| --- | --- |
| [Your First Game UI](/docs/2.0/your-first-game-ui) | Intro guide for games: Render a page to a texture using the CPU renderer. |
| [Integrating into a Game Engine](/docs/2.0/integrating-into-a-game-engine) | Embed the renderer into your game loop. |
| [Updating and Rendering](/docs/2.0/updating-and-rendering) | Update timers, advance animations, and render views. |
| [Mouse and Scroll Input](/docs/2.0/mouse-and-scroll-input) | Forward mouse and scroll events to a view. |
| [Keyboard Input](/docs/2.0/keyboard-input) | Forward key presses and typed text to a view. |
| [GPU Renderer Overview](/docs/2.0/gpu-renderer-overview) | Render accelerated views using your GPU pipeline. |
| [Optimizing Performance](/docs/2.0/optimizing-performance) | Profile bottlenecks and protect frame budgets. |

## Desktop App Developers

For desktop app developers looking to use Ultralight as the basis for their application (Electron and CEF-style), see the following guides:

| Guide | Description |
| --- | --- |
| [Writing Your First App](/docs/2.0/writing-your-first-app) | Intro guide for desktop app dev: Create a native window and load a local HTML page. |
| [Building a Desktop App](/docs/2.0/building-a-desktop-app) | Connect views to native logic and prepare to ship. |
| [App Lifecycle and Settings](/docs/2.0/app-lifecycle-and-settings) | Configure runtime settings and manage the application lifecycle. |
| [Laying Out Panels](/docs/2.0/laying-out-panels) | Arrange views into rows, columns, and resizable splits. |
| [Native Look and Feel](/docs/2.0/native-look-and-feel) | Support system themes, platform text editing, and window styling. |
| [Shipping Your App](/docs/2.0/shipping-your-app) | Package your application and assets for distribution. |

## Embedded Developers

For embedded software developers looking to use Ultralight in resource-constrained environments or device UI, see the following guides:

| Guide | Description |
| --- | --- |
| [Rendering to a Framebuffer](/docs/2.0/rendering-to-a-framebuffer) | Intro guide for embedded developers: Paint a page directly into a framebuffer on the CPU. |
| [Embedded and Device UI](/docs/2.0/embedded-and-device-ui) | Configure the renderer for resource-constrained hardware. |
| [Managing Memory](/docs/2.0/managing-memory) | Tune caches, memory limits, and garbage collection. |
| [About Data Bindings](/docs/2.0/about-data-bindings) | Synchronize native state with HTML markup. |
| [About the DOM API](/docs/2.0/about-the-dom-api) | Inspect and modify elements from C++. |

> 📘 Migrating from 1.4
>
> If you're upgrading an existing project from Ultralight 1.4, see [Porting from 1.4 to 2.0](/docs/2.0/migrating-from-1-4-to-2-0).
