<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4" -->

---
title: This Month in Ladybird | daily.dev
description: The March update on Ladybird browser development covers 352 merged PRs from 49 contributors. Highlights include a new hand-written assembly interpreter...
canonical: https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: This Month in Ladybird | daily.dev
og:description: The March update on Ladybird browser development covers 352 merged PRs from 49 contributors. Highlights include a new hand-written assembly interpreter...
og:url: https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4
og:image: https://api.daily.dev/og/posts/mBtCDrUq4.png
og:image:alt: This Month in Ladybird
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# This Month in Ladybird

**[Ladybird Browser](https://daily.dev/sources/ladybird)** · 11 min read · 0 upvotes · 0 comments

## Summary

The March update on Ladybird browser development covers 352 merged PRs from 49 contributors. Highlights include a new hand-written assembly interpreter (AsmInt) for LibJS boosting benchmark scores (Kraken 1.44x, Octane 1.37x, SunSpider 1.69x), a from-scratch Rust rewrite of the regex engine (6x faster on Octane regexp), off-thread HTML script parsing, persistent bookmarks, a macOS IPC overhaul using Mach ports, deletion of the legacy JS compiler (~20,000 lines removed), and numerous CSS additions including if(), inherit(), @container, and @function parsing support. Style invalidation was made more precise via sibling invalidation sets, and WPT scores crossed 2 million subtests passed. Site compatibility fixes improved chess.com and microsoft.com rendering.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://ladybird.org/newsletter/2026-03-31>

## Questions this post answers

### How much faster is Ladybird's new Rust-based regex engine compared to the old one?

The rewritten ECMA-262 regex engine, built from scratch in Rust, makes the Octane regexp benchmark run about 6x faster than the previous engine. The old engine went directly from parser to bytecode with little room for optimization, while the new engine builds an AST first, enabling pattern analysis and transformation before bytecode generation. V8 and WebKit regex test suites were imported to verify correctness.

_Track engine-level performance rewrites like this one by following browser internals on daily.dev._

### What is AsmInt in Ladybird's LibJS engine?

AsmInt is a hand-written assembly bytecode interpreter added to LibJS, replacing the C++ threaded interpreter for hot paths. It uses a custom DSL that compiles to native x86_64 and AArch64 assembly, keeping arithmetic, comparisons, and property access entirely in hand-written assembly and only calling into C++ for complex operations. Combined with other optimizations, benchmark scores improved: Kraken 1.44x, Octane 1.37x, SunSpider 1.69x.

_Developers curious about JS engine internals can follow deep dives like this on daily.dev._

### Did Ladybird remove its old JavaScript compiler pipeline?

Yes, after making a reimplemented LibJS compiler frontend the default in the prior month, the old compiler pipeline was deleted entirely, including its parser, AST, lexer, and bytecode generator, removing roughly 20,000 lines of C++ code. This also allowed cleanup of codegen compatibility shims and a switch to cbindgen for automatically generating FFI headers.

_Follow major engine refactors like this to see how browser codebases evolve, on daily.dev._

## Similar posts on daily.dev

- [This Month in Ladybird](https://daily.dev/posts/this-month-in-ladybird-wmtgqhzgv) · Hacker News · 12 upvotes · 2 comments

---

Tags: [#javascript](https://daily.dev/tags/javascript), [#css](https://daily.dev/tags/css), [#rust](https://daily.dev/tags/rust)

[View this post on daily.dev](https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"This Month in Ladybird","url":"https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4"},"datePublished":"2026-08-31T05:54:46.909Z","dateModified":"2026-08-31T05:56:24.468Z","description":"The March update on Ladybird browser development covers 352 merged PRs from 49 contributors. Highlights include a new hand-written assembly interpreter...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/f0d04d597be9efdaf11883698ad30378?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/f0d04d597be9efdaf11883698ad30378?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Ladybird Browser","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Ladybird Browser","logo":"https://media.daily.dev/image/upload/s--gBOjamNh--/f_auto,q_auto/v1788155675/logos/ladybird?_a=BAMAMicg0","url":"https://daily.dev/sources/ladybird"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"javascript,css,rust","timeRequired":"PT11M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Ladybird Browser","item":"https://daily.dev/sources/ladybird"},{"@type":"ListItem","position":3,"name":"This Month in Ladybird"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/this-month-in-ladybird-mbtcdruq4#faq","mainEntity":[{"@type":"Question","name":"How much faster is Ladybird's new Rust-based regex engine compared to the old one?","acceptedAnswer":{"@type":"Answer","text":"The rewritten ECMA-262 regex engine, built from scratch in Rust, makes the Octane regexp benchmark run about 6x faster than the previous engine. The old engine went directly from parser to bytecode with little room for optimization, while the new engine builds an AST first, enabling pattern analysis and transformation before bytecode generation. V8 and WebKit regex test suites were imported to verify correctness. Track engine-level performance rewrites like this one by following browser internals on daily.dev."}},{"@type":"Question","name":"What is AsmInt in Ladybird's LibJS engine?","acceptedAnswer":{"@type":"Answer","text":"AsmInt is a hand-written assembly bytecode interpreter added to LibJS, replacing the C++ threaded interpreter for hot paths. It uses a custom DSL that compiles to native x86_64 and AArch64 assembly, keeping arithmetic, comparisons, and property access entirely in hand-written assembly and only calling into C++ for complex operations. Combined with other optimizations, benchmark scores improved: Kraken 1.44x, Octane 1.37x, SunSpider 1.69x. Developers curious about JS engine internals can follow deep dives like this on daily.dev."}},{"@type":"Question","name":"Did Ladybird remove its old JavaScript compiler pipeline?","acceptedAnswer":{"@type":"Answer","text":"Yes, after making a reimplemented LibJS compiler frontend the default in the prior month, the old compiler pipeline was deleted entirely, including its parser, AST, lexer, and bytecode generator, removing roughly 20,000 lines of C++ code. This also allowed cleanup of codegen compatibility shims and a switch to cbindgen for automatically generating FFI headers. Follow major engine refactors like this to see how browser codebases evolve, on daily.dev."}}]}
```

