Hacker news

  • Top
  • New
  • Past
  • Ask
  • Show
  • Jobs

Lightpanda migrate DOM implementation to Zig (https://lightpanda.io)

197 points by gearnode 6 days ago | 141 comments | View on ycombinator

barishnamazov 6 days ago |

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.

kristopolous 5 days ago |

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

lewdwig 5 days ago |

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.

nicoburns 6 days ago |

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)

deepriverfish 5 days ago |

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.

everlier 6 days ago |

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

MrBuddyCasino 5 days ago |

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

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

steeve 5 days ago |

This looks incredible, congratulations!

portly 5 days ago |

Love to see Zig winning!

tonyhart7 5 days ago |

finally, rewrite in zig movement is coming

pulkas 5 days ago |

zigdom all-diy

Copenjin 5 days ago |

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

neoden 5 days ago |

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