20 comments

[ 2.5 ms ] story [ 54.2 ms ] thread
This reminds me of the Servo project's journey. Always impressed to see another implementation of the WHATWG specs.

It's interesting to see Zig being chosen here over Rust for a browser engine component. Rust has kind of become the default answer for "safe browser components" (e.g., Servo, Firefox's oxidation), primarily because the borrow checker maps so well to the ownership model of a DOM tree in theory. But in practice, DOM nodes often need shared mutable state (parent pointers, child pointers, event listeners), which forces you into Rc<RefCell<T>> hell in Rust.

Zig's manual memory management might actually be more ergonomic for a DOM implementation specifically because you can model the graph relationships more directly without fighting the compiler, provided you have a robust strategy for the arena allocation. Excited to learn from Lightpanda's implementation when it's out.

This table is informative as to exactly what lightpanda is: https://lightpanda.io/blog/posts/what-is-a-true-headless-bro...

TL;DR: It does the following:

- Fetch HTML over the network

- Parse HTML into a DOM tree

- Fetch and execute JavaScript that manipulates the DOM

But not the following:

- Fetch and parse CSS to apply styling rules

- Calculate layout

- Fetch images and fonts for display

- Paint pixels to render the visual result

- Composite layers for smooth scrolling and animations

So it's effectively a net+DOM+script-only browser with no style/layout/paint.

---

Definitely fun for me to watch as someone who is making a lightweight browser engine with a different set of trade-offs (net+DOM+style/layout/paint-only with no script)

Wow. Lightpanda is absolutely bonkers of a project. I'd pay dearly for such an option a few years back.
I've been using it for months now ever since I saw their presentation at GitHub

This is a common flow for me

    lightpanda url | markitdown (microsoft) | sd (day50 streamdown) 
I even have it as a shell alias, wv(). It's way better than the crusty old lynx and links on sites that need JS.

It's solid. Definitely worth a check

A language which is not 1.0, and has repeatedly changed its IO implementation in a non-backwards-compatible way is certainly a courageous choice for production code.
So, I'm noodling around with writing a borrow checker for zig, and you don't get to appreciate this working with zig on a day to day level, but the internals of how the zig compiler works are AMAZING. Also, the io refactor will (I think) let me implement aliasing checking (alias xor mutable).
Love to see Zig winning!
This looks incredible, congratulations!
finally, rewrite in zig movement is coming
it's so tiring that every time there's a post about something being implemented in Zig or C or C++, the Rust brigade shows up trying to pick up a fight.
As part of the "all software should be liable brigade", it is a matter of misplaced goals after the cybersecurity agencies started looking into the matter.
It’s a site where programming nerds congregate to waste time arguing with each other. Where do you think you are?

This same pattern used to play out with Ruby, Lisp, and other languages in different eras of this site. It will probably never stop and calling it out seems to just fan the flames more than anything else.

I hate to say it, but time is quickly running out for Zig(( AI might never pick it up properly and without that it will never go out of its niche
Are you implying that programming languages are now going to be “frozen” because of AI?

I can understand the source of concern but I wouldn’t expect innovation to stop. The world isn’t going to pause because of a knowledge cutoff date.

In my experience LLMs are really good at following code examples and constraints (tests).

So even if they don't get to train much on some technology, all you need is some guidance docs in AGENTS.md

There's a plus in being fresh too: LLMs aren't going to be heavily trained on outdated tutorials and docs. Like React for example.

Claude Opus 4.5 is completely fluent in Zig.

I use it constantly, and it never occurred to me that someone might think there was a problem to be solved there.

Because We're Not Smart Enough for C++ or Rust

Very refreshing. Most engineers would rather saw their leg off.

Any older project similar to this? Headless browser with js support I mean, I want to check various implementations of this idea.