Ultralight 1.3 Now Available
We are pleased to announce the stable release of Ultralight 1.3!
Download the SDK
You can download the free SDK here;
What’s New
This major new release improves rendering accuracy, offers new debugging tools, and add experimental support for Xbox, PS4, and PS5.
- ⚡ Improved CPU Rendering
- The CPU renderer has been rewritten to be faster and more accurate (new parallel engine built on Skia internals).
- 📝 Enhanced Text Rendering
- Refined text rendering for clearer and sharper display of text. Improved pixel-snapping and font scaling at various DPI scales.
- 🌐 Better HTML/CSS Support
- Extended support for modern HTML and CSS standards, specifically
box-shadow
,linear-gradient
,radial-gradient
, dashed strokes, and more. - 🧠 Reduced Memory Usage
- Optimized to consume less memory, making it more suitable for use in resource-constrained environments.
- 🔍 Remote Inspection Capabilities
- New tools for inspecting Views over the network, perfect for debugging web content on game consoles or embedded devices.
- 🖼️ Multi-Window Support
- The AppCore framework now offers support for creating and managing multiple windows on all major desktop platforms.
- 🎮 Gamepad Input Support
- HTML5 gamepad input is now natively supported, offering new interaction modalities on game consoles and PC.
- 🍿 Experimental Video/Audio Support
- Introduces experimental support for HTML5 video/audio, (Windows-only, VP9 and h264 codecs supported).
- 👾 Experimental Game Console Support
- We now offer experimental support for Xbox, PS4, and PS5 platforms, with more platforms on the way!
Upcoming Changes (1.4)
We’re already hard at work on the next version (1.4), major changes coming include:
- ARM64 and Apple Silicon Support
- Latest WebKit Trunk Changes
- Clean Restart/Shutdown and Memory Reclamation (recreate the Renderer multiple times in a single process)
- Improved CSS and SVG Filter Support
- Multi-Monitor Support
- New Memory and Thread Management API
- New Network / Resource Request API
- Display Link API
Porting from 1.2
Make sure to check out our porting guide for helpful hints on migrating from 1.2 to 1.3.
Full Changelog
Major Improvements
- Rewrite CPU renderer to be faster and more accurate (parallel engine built on Skia internals).
- Add support for Xbox, PS4, and PS5 platforms.
- Improve text rendering accuracy with more intelligent snapping and hinting.
- Improve font scaling accuracy at various device scales.
- Improve
box-shadow
rendering accuracy and performance. - Improve performance of layout and JavaScript execution using mimalloc.
- Improve performance of JavaScript garbage-collector, reduce per-frame stalls.
- Improve consistency of CPU and GPU renderers (both now blend in sRGB).
- Add memory profiler and memory statistics tracking.
- Add support for gamepad input devices.
- Add support for remote web inspector.
- Add support for multiple windows to AppCore.
- Add support for rendering only a subset of Views.
- Add support for dashed strokes to CPU renderer.
- Add support for SVG
onclick
and other events that require path picking. - Add support for HTML5 Video / Audio (experimental) via GStreamer/FFmpeg (disabled by default).
- Update
user-agent
string to reflect proper Safari / WebKit version. - Update to latest CA certificate chain.
- Unify build scripts and toolchain.
Major API Changes
- Unify API to use
RefPtr<>
everywhere (instead ofRef<>
class) - Unify API to use
String
everywhere (instead ofString16
,String8
, etc.). - Make
String
class useString8
natively (utf-8 is now native representation instead of utf-16). - Make all enums use
enum class
- Resources now load via
FileSystem
API instead offopen()
. FileSystem
now required to be defined inPlatform
API before creatingRenderer
.Buffer
class now accomodates memory-mapped files and destruction callbacks.FileSystem
interface has been reorganized to use newBuffer
API.- Portions of
Config
have been moved toViewConfig
(now certain options can be set per-View). App::Quit()
must now be called manually when using AppCore API.- Add
Bitmap::LockPixelsSafe()
andLockedPixels<>
utility class to manage lifetimes. - Add
WebKitVersionString()
to query corresponding WebKit version. - Extend AppCore API to enable multi-window support.
- Re-organize C API into logical header files.
- Add
Renderer::StartRemoteInspectorServer
- Add
Renderer::SetGamepadDetails
- Add
Renderer::FireGamepadEvent
- Add
Renderer::FireGamepadAxisEvent
- Add
Renderer::FireGamepadButtonEvent
- Add
Renderer::RenderOnly
- Modify
Renderer::CreateView
signature (options moved toViewConfig
param) - Add
View::device_scale
- Add
View::set_device_scale
- Add
View::is_accelerated
- Add
View::is_transparent
- Add
View::JavaScriptVM
- Rename
View::inspector
toView::CreateLocalInspectorView
- Modify
View::LockJSContext
return value (now returnsRefPtr<>
to manage lifetime) - Add
ViewListener::OnCreateInspectorView
- Add
ViewListener::OnRequestClose
- Add
WindowListener::OnKeyEvent
- Add
WindowListener::OnMouseEvent
- Add
WindowListener::OnScrollEvent
Major Bugfixes
- Fix issue managing clip in CPU and GPU renderers.
- Fix issue blending alpha in CPU renderer.
- Fix issue stroking paths in CPU renderer.
- Fix issue drawing glyphs with complex transformations.
- Fix issue drawing radial gradients with CPU renderer.
- Fix issue drawing gradients with more than 12 stops.
- Fix issue running library off the main thread on macOS.
- Fix issue rendering paths that begin with an ArcTo command.
- Fix issue where BGRA byte order was not used on all platforms.
- Fix issue painting dropdown menus.
- Fix issue calculating CSS button height.
- Fix issue displaying box-shadows on native inputs.
- Fix issue displaying context-menu in web inspector.
- Fix issue writing LocalStorage database on Windows.
- Fix issue with
KeyboardEvent.key
in JavaScript always returning null. - Fix issue with
LoadListener::OnBeginLoading
not passing correct URL. - Fix issue with
LoadListener::OnFailLoading
not being fired on non-200 HTTP status codes. - Fix issue resizing windows with GPU acceleration enabled (AppCore).
- Fix issue calling
Window::SetTitle
with Unicode strings (AppCore). - Fix issue with anti-aliasing when GPU acceleration is enabled on Linux (AppCore).
- Fix issue with automatic DPI switching on Windows (AppCore).
- Fix security issue allocating very large render layers.
- Fix major performance bug in cURL network code.
- Fix memory leak loading certain
file:///
URLs. - Fix memory leak when constructing
JSString
fromJSStringRef
(AppCore). - Fix various crashes and buffer overruns in Bitmap class.
- Fix crash loading certain Data URLs.
- Fix crash when
Config::bitmap_alignment
is 0. - Fix crash when encountering certain text-encodings.
- Fix crash when encountering certain JavaScript code.
- Fix crash in SQLite database code.
- Fix crash at process shutdown.