Releases: ultralight-ux/Ultralight
v1.4.0-beta
Website | Chat on Discord!
⚡ Ultralight 1.4.0-beta now available!
We're releasing a public beta build of the 1.4 branch today!
Beyond the usual stability and performance improvements, this release:
- Adds support for the Linux arm64 platform (minimum arch:
armv8-a
) - Adds a new MiniBrowser tool to help users test and benchmark content on each renderer (see details below)
Porting Notes
If you're porting from 1.3 and are using the Renderer API directly (ie, Renderer::Create()
), you should make sure to call Renderer::RefreshDisplay(0)
before calling Renderer::Render()
. See the API notes for details.
Major Changes Since 1.4-dev-c36080e:
Major Improvements:
- Finish implementation of GPU renderer (now supported on all platforms)
- Finish Linux arm64 port (targets the
armv8-a
instruction set) - Improve performance of Windows port (now built via Clang instead of MSVC)
- Improve rendering performance of AppCore (supports high refresh-rate monitors, uses native platform timers where applicable)
- Improve Chinese-Japanese-Korean text rendering on Linux
- Improve scroll animation performance
Major API Changes:
- Add
Monitor::display_id()
- Add
Monitor::refresh_rate()
- Add
Window::EnableFrameStatistics()
- Add
ShowMessageBox()
Major Bugfixes:
- Fix SSL validation issues on Linux and macOS
- Fix crash when rendering certain paths
- Fix rendering issues with with certain SVG and CSS clip-paths
- Allow
history.replaceState()
on localfile://
URLs - Fix missing
ulCreateView()
symbol in C-API
New MiniBrowser Tool:
- SDK now includes "MiniBrowser" tool that can be used to test content, compare GPU/CPU renderers, and benchmark performance.
- Statistics are shown in the title bar during runtime.
- FPS: Average FPS
- Render Time: Total time spent performing layout and rendering in WebCore (and immediate-mode CPU rendering)
- Draw Time: (GPU Only) Total time spent drawing geometry on GPU.
- Frame Time: Total frame time (includes vsync if enabled)
- Build script includes experimental feature to embed assets directly in the binary (disabled by default, see
tools/MiniBrowser/CMakeLists.txt
)
Upcoming Changes:
There are still some things in progress before the final release:
- Finish Remote Inspector (currently disabled)
- Fix inset
box-shadow
rendering (currently broken) - Add image-source API to finish implementation of CSS
backdrop-filter
- Add more API to AppCore to support app icons, platform dialogs, drag handles, and automatic bundle generation
- Reduce binary size (no optimizations have been performed yet)
- Improve performance (no profile-guided optimizations have been performed yet)
v1.3.0
Website | Chat on Discord! | Browse C++ API | Browse C API | Support Docs | Twitter
🚀 Ultralight v1.3.0 is now available!
This major new release offers:
- Faster CPU rendering
- Improved text rendering
- Improved HTML/CSS support
- Reduced memory usage
- New remote inspection capabilities
- Multi-window support
- Gamepad input support
- Experimental video/audio support
- Xbox, PS4, and PS5 support
- and more (see full changelog below)!
Additional release notes:
📽️ Video/Audio Support in 1.3
Video support is experimental and in the process of being rewritten for 1.4, Windows bins with Video/Audio support are included (VP9 and h264 codecs enabled).
✨ Upcoming Changes in 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
💬 Discuss this release on Discord!
📚 See our porting guide if you're migrating from v1.2
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 of Ref<> class)
- Unify API to use String everywhere (instead of String16, String8, etc.).
- Make String class use String8 natively (utf-8 is now native representation instead of utf-16).
- Make all enums use 'enum class'
- Resources now load via FileSystem API instead of fopen().
- FileSystem now required to be defined in Platform API before creating Renderer.
- Buffer class now accomodates memory-mapped files and destruction callbacks.
- FileSystem interface has been reorganized to use new Buffer API.
- Portions of Config have been moved to ViewConfig (now certain options can be set per-View).
- App::Quit() must now be called manually when using AppCore API.
- Add Bitmap::LockPixelsSafe() and LockedPixels<> 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 to ViewConfig param)
- Add View::device_scale
- Add View::set_device_scale
- Add View::is_accelerated
- Add View::is_transparent
- Add View::JavaScriptVM
- Rename View::inspector to View::CreateLocalInspectorView
- Modify View::LockJSContext return value (now returns RefPtr<> 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 from JSStringRef (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.
v1.4-dev-c36080e
🚀 Ultralight v1.4-dev is now available for Windows and macOS!
This is an alpha release of the 1.4-dev branch for Windows and macOS (release config, JIT and mi-malloc enabled, video and allocator overrides disabled).
Major Changes:
- Synchronize with upstream WebKit (Safari 16.4.1 / WebKit 615.1.18.100.1)
- Update to cURL 7.88.1
- Add macOS ARM64 (Apple Silicon) support
- Add CSS Filter support (blurs, saturation, sepia, etc.)
- Add API to manage threads created by the library.
- Add API to handle memory allocations made by the library (not enabled in this build)
- Add support for downloads (see View::set_download_listener)
- Add support for network whitelist/blacklist (see View::set_network_listener)
- Animation events are now driven by Renderer::RefreshDisplay (if you're managing your own renderer, you should call this API each time the display refreshes otherwise animations / scrolling won't work correctly)
Bugfixes:
- Fix bug where cookies weren't being applied to subdomains.
- Fix bug where hard reloads weren't sending no-cache headers with request.
- Fix various crash bugs at shutdown.
More notes:
- The GPU renderer is still in progress (clipping issues), AppCore always uses the CPU renderer in this build.
- This build does not have the allocator overrides (Allocator API) or HTML5 Video/Audio enabled.
- Remote inspector is not yet enabled.
- CSS backdrop-filter is only available when using the CPU renderer with experimental compositor enabled (see ViewConfig to enable it)
v1.2.1
Website | Read the Docs | Join our Discord! | Browse C/C++ API | Follow on Twitter
Ultralight v1.2.1 stable is now available!
This incremental maintenance release contains the following changes:
- Improve anti-aliased font rendering in CPU renderer (especially when compositing brightly-colored fonts against dark or transparent backgrounds).
- Fix issue with transparency in CPU renderer (alpha channel was not cleared properly during certain painting operations).
- Fix image scaling issue in CPU renderer.
- Fix memory leak in frame loader.
- Fix memory growth issue with large, shortly-lived images.
- Fix issue with mouse cursor not being set properly on mouse enter on Windows.
💡 'Min' Packages: We've included a reduced-size build of Ultralight in this release (those ending in -min
)-- these packages are smaller in size (20MB smaller on Windows) and have JavaScript JIT, WebAssembly, and JavaScript Intl features disabled.
v1.2.0
Website | Read the Docs | Join our Discord! | Browse C/C++ API | Follow on Twitter
Ultralight v1.2.0 stable is now available!
This new release includes the following major changes:
- New CPU Renderer (easier to integrate into games / dynamic textures)
- Updated to latest WebKit
- Improved rendering accuracy
- Better HTML5/CSS/JS platform support
- Improved performance
- Decreased runtime memory usage
💡 'Min' Packages: We've included a reduced-size build of Ultralight in this release (those ending in -min
)-- these packages are smaller in size (20MB smaller on Windows) and have JavaScript JIT, WebAssembly, and JavaScript Intl features disabled.
💬 Discuss this release on Discord!
📚 See our porting guide if you're migrating from v1.1
What's New?
New Website and Branding
Our website got a facelift for the new release, check it out here.
We're Now on Discord!
We're now on Discord-- come chat with us about the library, ask questions, and share awesome projects!
New CPU Renderer
To make it easier to integrate Ultralight into games and other environments, we've added a new pure-CPU backend.
This new renderer can render HTML to a pixel buffer (optionally provided by you) using an SIMD-accelerated CPU rendering pipeline. Paths, gradients, and patterns in this mode are rasterized using Blend2D's high-performance JIT compiler.
Bindings for C#, Java, Rust, and more
Some awesome members of our community have ported Ultralight to other languages! Give these projects some love-- many of the maintainers hang out in Discord.
Improvements for Games
Many users have expressed desire to integrate Ultralight into games so we've updated our features and API to match!
We now offer an in-depth game integration guide and improved our API to make the integration process as easy as possible. (PS, we're porting Ultralight to Xbox, PS4, and more, contact us if you're interested!)
Better C API Coverage
Ultralight's offers a C++ API and a separate C API (available in <Ultralight/CAPI.h>
and <AppCore/CAPI.h>
respectively). This C API has now been improved to offer 100% coverage of the functionality available in our main C++ API.
New OpenGL Integration Sample
To better showcase the new CPU renderer we've created a new, OpenGL-based cover-flow browser sample. This sample demonstrates how to use the new Surface API with an OpenGL PBO for low-latency, DMA transfer to a GPU texture.
Future Work
We're already hard at work on the next major branch (1.3), here's a sneak peek at a couple of our priorities for the next release:
- Multi-window and multi-monitor support
- HTML5 platform improvements (Video and Audio support, CSS filters, SVG filters, SVG stroke dashed array, dashed borders, JS dialogs)
- Windowing improvements in AppCore (borderless windows, drag handles, app icons, context menus, notifications, and more)
- Multi-process API (for View/Renderer crash isolation and 32-bit host communication)
- DOM Manipulation API (modify DOM and hook DOM events from C/C++)
Changelog for 1.2.0
- Updated to latest WebKit
- Integrated latest updates (WebKit 608.3.10.10.1 / Safari 13.0.3)
- Added support for WebSockets over SSL
- Added support for WebAssembly
- Fixed several flexbox layout bugs
- Improved HTML5 platform support
- Improved SVG support
- Improved HTML5 canvas support
- Added support for IndexedDB
- Added support for
<select>
- Added support for
<input type="range">
- Added support for
<progress>
- Added support for
<a target="_blank">
andwindow.open()
- Sharper rendering at all DPIs
- Improved glyph compositing (hinting and gamma are now user-configurable)
- Improved pixel-snapping of various borders
- Improved hairline stroke rendering
- Better JavaScript performance
- Enabled FTL JIT for faster JavaScript performance
- Enabled Riptide GC for lower-latency collection
- Added accelerated CPU renderer
- Implemented an additional SIMD-accelerated CPU rendering backend
- Can paint directly to a user-supplied BGRA32 pixel-buffer
- Useful for integrating into games or environments with limited GPU
- Decreased memory usage
- Significantly decreased memory usage
- Added API to dump memory statistics
- Other improvements
- Added support for user-selection, cut, copy, and paste (new Clipboard API)
- Expanded C API support (we now expose all the Platform callbacks).
- Fix rendering issues with nested scrolling containers and iframes.
- Improved SSL certificate verification, uses bundled CA cert file (from Mozilla).
- Exposed network errors to LoadListener API
- Improved cursor support in AppCore
- Reduced ICU data size
v1.2.0-beta.2
Website | Read the Docs | Join our Discord! | Support Forum | Browse API | Follow on Twitter
Ultralight v1.2.0 is now ready for beta testing!
Please see our porting guide if you're migrating from v1.1.
This major update integrates latest changes from WebKit, improves upon a range of rendering issues, adds a new pure-CPU renderer for easier usage in games and limited-GPU environments, and offers improved performance and decreased runtime memory usage.
Note: no size optimizations have been performed on binaries yet, expect additional improvements for the final stable release
Changelog for 1.2.0
- Updated to latest WebKit
- Integrated latest updates (WebKit 608.3.10.10.1 / Safari 13.0.3)
- Added support for WebSockets over SSL
- Added support for WebAssembly
- Fixed several flexbox layout bugs
- Improved HTML5 platform support
- Improved SVG support
- Improved HTML5 canvas support
- Added support for
<select>
- Added support for
<input type="range">
- Added support for
<progress>
- Added support for
<a target="_blank">
andwindow.open()
- Sharper rendering at all DPIs
- Improved glyph compositing (hinting and gamma are now user-configurable)
- Improved pixel-snapping of various borders
- Improved hairline stroke rendering
- Better JavaScript performance
- Enabled FTL JIT for faster JavaScript performance
- Enabled Riptide GC for lower-latency collection
- Added accelerated CPU renderer
- Implemented an additional SIMD-accelerated CPU rendering backend
- Can paint directly to a user-supplied BGRA32 pixel-buffer
- Useful for integrating into games or environments with limited GPU
- Added support for UWP/Xbox
- Can be used to target Windows Store apps (Windows 10, HoloLens, Xbox One)
- (Contact us if you are developing with the Xbox toolchain)
- Decreased memory usage
- Significantly decreased memory usage
- Added API to dump memory statistics
- Other improvements
- Added support for user-selection, cut, copy, and paste (new Clipboard API)
- Expanded C API support (we now expose all the Platform callbacks).
- Fix rendering issues with nested scrolling containers and iframes.
- Improved SSL certificate verification, uses bundled CA cert file (from Mozilla).
- Exposed network errors to LoadListener API
- Improved cursor support in AppCore
v1.1.0
We're excited to announce our latest stable release, v1.1.0!
Links
What's New?
New Quick Start Tutorial
Building a desktop app? Get started in as little as 5 minutes with our new Quick-Start Tutorial
New Docs
Need help getting started? Want to integrate Ultralight into a game? Check our new Docs Website.
New Samples
All of the samples included in the SDK have been updated with new visuals and documentation.
New Compositor
The renderer/compositor back-end has been redesigned for more fluid CSS animations and transitions. This gives a noticeable performance boost on pages with complex CSS.
Commercial Licensing
We now offer commercial licensing options for Ultralight! Check out our website for more info.
Deprecating 32-bit Support
We will no longer be supporting 32-bit (x86) since upstream JavaScriptCore has dropped support. On the upside, this change will give a slight performance boost on 64-bit.
Changelog
This release brings many important stability, rendering, performance, and memory usage improvements to the library. Notable improvements include:- Rendering
-
- Added CSS 3D / perspective transforms
- Accelerated CSS transforms / transitions via new compositor
- Improved Font Hinting and CJK Font support
- Fixed many CSS / painting glitches (backgrounds, clips, transitions, etc.)
- Made rendering pipeline sRGB-aware and gamma-correct
- Improved scrollbar theming and sub-frame scrolling
- Added support for checkbox, text input, radio buttons
- Added support for radial gradients
- Improved SVG Path stroke/fill rendering
- Accelerated path rendering via MSAA
- Enabled primitive Canvas API support (filled/stroked paths only)
- Improved image scaling and memory usage for very large images
- JavaScript
-
- Fixed GC crash in pages with heavy JavaScript
- Enabled DFG JIT for faster performance with long-running scripts
- Enabled ES6 Module support
- Enabled bmalloc slab allocator on all platforms
- Reduced initial memory usage and heap scaling
- Platform / Drivers
-
- Added DirectX 12 driver support (experimental in AppCore repo)
- Fixed rendering glitches on macOS/Metal
- Added triple-buffering to macOS/Metal driver, improved performance
- Accelerated View/Window resizing
- Improve rendering with fractional DPI scales
- Improved tab key handling (tab navigation works correctly now)
- Enabled CPU-only WARP fallback in Windows/D3D11 driver
- Fixed crash during App destruction on Linux
- Added native Linux font loader (uses FontConfig)
- Made it easier to bundle shared libs on Linux by having the rpath search the executable path first
- Fixed crash when creating an App on Windows 7 platform
- Fixed issues with tracking mouse during drag operation
- Debugging / Profiling
-
- Added Web Inspector (useful for debugging JS / CSS locally)
- Added Config option to force repaints (for debugging GPUDriver)
- Debug symbols are now available for the WebCore and AppCore modules for every build/commit as part of our continuous delivery system.