logoalt Hacker News

Lightpanda migrate DOM implementation to Zig

117 pointsby gearnodetoday at 9:42 AM58 commentsview on HN

Comments

barishnamazovtoday at 10:35 AM

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.

show 6 replies
kristopoloustoday at 12:28 PM

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

show 2 replies
lewdwigtoday at 12:35 PM

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.

show 3 replies
nicoburnstoday at 11:18 AM

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)

show 2 replies
everliertoday at 11:35 AM

Wow. Lightpanda is absolutely bonkers of a project. I'd pay dearly for such an option a few years back.

steevetoday at 1:41 PM

This looks incredible, congratulations!

portlytoday at 1:04 PM

Love to see Zig winning!

tonyhart7today at 1:42 PM

finally, rewrite in zig movement is coming