We're very proud to announce that Ultralight 2.0 is now in public beta. This major update brings our cross-platform web renderer to greater parity with Chrome with a new high-performance GPU renderer and bare-metal DOM API for native code.
About Ultralight
Ultralight is a GPU-accelerated web-rendering SDK engineered for use in games, desktop, and embedded applications. It's used in AAA games, supports web standards, and runs across PC, console, and ARM64.
Better Web Compatibility
Ultralight 2.0 supports a broader range of modern web standards, bringing rendering much closer to desktop Chrome. Pages can now use CSS masks, blend modes, conic gradients, backdrop filters, SVG filters, and more.
The font engine also now supports kerning, ligatures, complex scripts, variable fonts, and color emoji, for greater parity with Windows and macOS text rendering.
Read more in our guides on supported web features and text rendering and fonts.
Faster Rendering
A new compositor coupled with our new Photon GPU vector renderer make 2.0 significantly faster and more efficient.
Photon draws vector paths and text analytically on the GPU using a novel algorithm that runs efficiently under a huge range of conditions, keeping edges pixel-perfect under extreme transforms and zooms.
For games and memory-conscious apps, Ultralight Pro adds native support for DDS textures in <img> tags and CSS. Textures stay compressed in video memory— using up to 8x less memory than uncompressed surfaces without any decoder delay.
Learn more in the GPU renderer overview and the guide to compressed textures.
Video and Audio
Ultralight Pro now supports HTML5 <video> and <audio> elements directly inside Views.
You can now play WebM media with VP9 video and Opus audio, including clips with transparent backgrounds. Video frames draw directly into pages and audio can route to an OS audio device or into your engine's existing audio engine.
For integration details, see the media and audio guide.
International Text Input
You can connect native OS input method editors (IMEs) to support typing in Chinese, Japanese, Korean, and other languages.
In AppCore, windows now handle IME automatically on Windows, macOS, and Linux. If you host Views directly in your own engine, the API lets you forward input events and position candidate lists for deep integration across platforms.
Read more in our guide to input method editors.
Memory Management
Ultralight 2.0 gives you precise control over memory usage and automatically reclaims unused RAM when pages sit idle. Configurable profiles let you choose between aggressive reclamation on low-memory devices or higher cache retention for peak performance.
In the Pro edition, you can also schedule garbage collection directly from native code. Letting you hide cleanups during level loads or scene transitions for smoother gameplay.
See the guide on managing memory for configuration details.
Diagnostics and Profiling
New diagnostic tools help you measure performance and find API mistakes during development.
In Ultralight Pro, you can stream renderer timing data into profilers like Tracy or export Perfetto trace files to track down slow frames. Frame timing breaks down layout, painting, and JavaScript execution alongside native engine markers.
We have also added a developer mode for our native JS, DOM, and data-binding APIs. Turn it on in debug buiilds to have the engine report runtime errors and binding mistakes to quickly track down bugs in your integration.
For setup instructions, see profiling and tracing and developer mode and diagnostics.
A Native JavaScript API
Ultralight 2.0 introduces a type-safe C++20 API for communicating with JavaScript.
Expose native functions, classes, and events directly to pages. Catch type errors at compile time and enforce strict typing during runtime JavaScript as well.
js::API app("app");
app["version"] = "2.1.0";
app["add"] = [](double a, double b) { return a + b; };
if (app.AttachTo(view.get()))
view->LoadURL("file:///app.html");
then, from the page, call your native API:
app.add(2, 3); // 5
You can also export your native API schema to TypeScript, providing autocomplete and type checking when writing scripts.
See about JavaScript interop and API schemas and TypeScript for examples.
A Native DOM API
Our new bare-metal DOM API lets you manipulate pages directly from native code—granting fast performance and ultra-low memory usage.
Its syntax closely mirrors that of JavaScript:
const status = document.querySelector("#status");
status.textContent = "Connected";
status.classList.add("online");
the equivalent code in C++ is almost identical:
auto status = document.querySelector("#status");
status.textContent = "Connected";
status.classList.add("online");
Learn more in the DOM API overview.
Data Bindings
Data bindings connect your native data and event handlers directly to HTML elements.
Declare where data should appear in HTML markup and Ultralight fills it in during runtime, efficiently batching layout updates for ultra-high performance.
<h1 ul-text="player.name"></h1>
<p>Armor: {{player.stats.armor}}</p>
Designers can also design and style data-bound pages in external browsers using mock data, without running or compiling your app.
All three native APIs (JavaScript, DOM, and data bindings) are also available in C.
Read more in our guides on data bindings and mocking bound pages.
Desktop App Runtime (AppCore)
AppCore adds modern window management, native styling, and multi-view layouts for desktop applications.
Use custom chrome to design your entire app (titlebar and all) in HTML and CSS. Use per-pixel transparency, native blurred backdrop materials, and popup windows that extend outside window boundaries for seamless menus and dropdowns.
To explore these features, see our guides on laying out panels, native window styling, popups and dialogs, and dark mode and color schemes.
Platforms
Ultralight 2.0 officially supports Windows, macOS, and Linux on desktop, alongside console platforms.
Prebuilt desktop binaries are available for:
- Windows: x64
- macOS: Apple Silicon
- Linux: x64 (requires glibc 2.31 or newer and an X11 desktop, or Wayland via XWayland)
For game consoles, Ultralight is available on PlayStation, Xbox, and Nintendo Switch. Please contact sales to request access.
Porting From 1.4
For assistance migrating to 2.0 from 1.4, we have documented all breaking changes and migration steps in our Porting Guide.
Roadmap
We want to hear your feedback as we polish 2.0. Join our community on Discord to share your thoughts, report issues, or ask questions.
Get the New Release
You can download the Ultralight 2.0 public beta today:
Helpful links to get started:
- Documentation: Read setup guides and feature overviews.
- Porting Guide: Migrate your project from 1.4 to 2.0.
- API Reference: Browse the C++ class documentation.
- Full Changelog: View the complete list of engine updates.
- Discord Community: Chat with our team and other developers.