Ultralight

Lightweight, high-performance HTML renderer for game and app developers.

Downloads
10
Stars
4.7K
Committers
2

Bot releases are hidden (Show)

Ultralight - v1.4.0-beta Latest Release

Published by adamjs 6 months ago


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 local file:// 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)
Ultralight - v1.4-dev-c36080e

Published by adamjs 11 months ago

Website | Chat on Discord!

πŸš€ 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)
Ultralight - v1.3.0

Published by adamjs about 1 year ago

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.
Ultralight - v1.2.1

Published by adamjs almost 4 years ago

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.

πŸ’¬ Discuss this release on Discord!

πŸ“š See our porting guide if you're migrating from v1.1

Ultralight - v1.2.0

Published by adamjs almost 4 years ago

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

Our website got a facelift for the new release, check it out here.

We're now on Discord-- come chat with us about the library, ask questions, and share awesome projects!

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.

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.

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

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.

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.

gl_sample1

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++)
Ultralight - v1.2.0-beta.2

Published by adamjs about 4 years ago

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

Discuss this release in Discord!

Ultralight - v1.1.0

Published by adamjs almost 5 years ago

We're excited to announce our latest stable release, v1.1.0!

Building a desktop app? Get started in as little as 5 minutes with our new Quick-Start Tutorial

Need help getting started? Want to integrate Ultralight into a game? Check our new Docs Website.

All of the samples included in the SDK have been updated with new visuals and documentation.

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.

We now offer commercial licensing options for Ultralight! Check out our website for more info.

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.