Cached at:
06/05/26, 07:07 AM
TL;DR: The Ladybird browser’s May 2026 update brings major improvements in real‑world website compatibility, scrolling responsiveness, and platform infrastructure, including passing Cloudflare Turnstile, enabling MSE, an asynchronous scroll compositor, JavaScript bytecode caching, WASM JIT (Cranelift), incremental sweeping, and other key enhancements.
## Sponsors and Acknowledgements
This month’s update starts with thanks to our sponsors. Ladybird is entirely supported by sponsorships and donations from individuals and companies. This month we welcome two new sponsors: **Code Rabbit** ($10,000) and **Wheelofnames.com** ($1,000). Thanks for their support – we’ll try opening those sites later in the demo.
## Real‑World Website Compatibility
### Passing Cloudflare Turnstile
Cloudflare Turnstile is an anti‑bot mechanism. Previously, Ladybird was blocked because it looked like a bot. After years of accumulating web compatibility and engine correctness, Turnstile now recognizes us as a legitimate browser. This is not the result of a single change, but the sum of many small fixes. Special thanks to the Cloudflare team for their help.
### Media Source Extensions (MSE) Enabled by Default
Streaming websites can now supply media data in chunks via JavaScript. Previously, this couldn’t be enabled by default due to an age‑based data eviction policy, which has now been fixed. Seeking forward on YouTube is very fast, and 4K video playback is supported (performance still needs optimization, but the data flow works correctly).
### Other Site Fixes
- **TradingView**: Charts now display correctly (involved Service Worker and Canvas translucent alpha accumulation issues; colors are now correct).
- **Discord**: Numerous compatibility fixes.
- **Shopify**: Overflow issues fixed.
- **Reddit** and **Hacker News**: Ongoing improvements.
- Many more sites are being continuously fixed in preparation for the Alpha release.
## Responsiveness Improvements
### Asynchronous Scrolling
A new **compositor process** has been introduced, sitting between the UI and web content and dedicated to handling scrolling. When a scroll wheel event is received, the compositor immediately communicates with the UI process and updates the frame without waiting for JavaScript to finish executing. Scroll bar and trackpad operations become smooth. In the IMDb example, enabling asynchronous scrolling results in smooth, lag‑free scrolling. The compositor also manages the GPU context (future direction: a single GPU context shared across the entire browser to save resources).
### JavaScript Bytecode Cache
Bytecode is stored on disk alongside the HTTP resource cache. On a cache hit (hot load), the bytecode is memory‑mapped and executed directly without parsing or compilation; multiple tabs share the same bytecode. On a cold load, the main thread handles page tasks while a background thread parses and compiles the top‑level code. Once done, it hands off to the main thread, and the background continues compiling function bodies. After compilation, the bytecode is written to disk and replaces the heap‑resident temporary representation via a file‑backed memory mapping, allowing sharing across processes. If a function that hasn’t been compiled yet is needed during background compilation, the main thread compiles it lazily on demand.
### WebAssembly JIT (Cranelift)
WebAssembly is compiled to native code on the fly using **Cranelift**. Compilation happens in a separate process; after generating the executable, it is mapped into the web content process memory. The CoreMark WASM benchmark shows an approximately **8×** improvement.
### Incremental Sweeping
In the classical mark‑sweep GC, the sweep phase is now split into small chunks of at most **5 milliseconds** each, interleaved with JavaScript execution. GC pause times are reduced, resulting in less visual stuttering. Additionally, memory return operations have been moved to a background decommit thread, no longer blocking the main thread.
## Platform Infrastructure
### HTML Parser Rewritten in Rust
The tokenizer, HTML tree builder, and preload scanner have all been ported to Rust, as part of using a memory‑safe language for untrusted data input. After validation on about 7,000 websites, the output DOM is identical to the C++ version, and it unexpectedly performs about **10%** faster than the old parser.
### Content Blocking (adblock‑rust)
We adopted Brave’s open‑source **adblock‑rust** library, which supports the ABP / EasyList format. For network requests, the URL and metadata are passed, and the rules decide whether to block or allow. At the same time, style rule filtering is performed to implement CSS element hiding, eliminating the layout holes that occurred in the old approach where only network requests were blocked without modifying CSS. The settings UI is still basic, but the infrastructure is in place.
### CSS Container Queries
As part of ongoing engine work, CSS Container Queries are now supported, accommodating the growing number of websites that use them.
---
Source: Ladybird browser update (May 2026) (https://www.youtube.com/watch?v=GZoLy5e8y-4)