Lightpanda migrate DOM implementation to Zig

(lightpanda.io)

145 points | by gearnode 7 hours ago

12 comments

  • barishnamazov 6 hours 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.

    • fbouvier 5 hours ago
      Hi, I am Francis, founder of Lightpanda. We wrote a full article explaining why we choose Zig over Rust or C++, if you are interested: https://lightpanda.io/blog/posts/why-we-built-lightpanda-in-...

      Our goal is to build a headless browser, rather than a general purpose browser like Servo or Chrome. It's already available if you would like to try it: https://lightpanda.io/docs/open-source/installation

      • nicoburns 5 hours ago
        I see you're using html5ever for HTML parsing, and like it's trait/callback based API (me too). It looks like style/layout is not in scope at the moment, but if you're ever looking at adding style/layout capabilities to lightpanda, then you may find it useful to know that Stylo [0] (CSS / style system) and Taffy [1] (box-level layout) are both avaiable with a similar style of API (also Parley [2] which has a slightly different API style but can be combined with Taffy to implement inline/text layout).

        [0]: https://github.com/servo/stylo

        [1]: https://github.com/DioxusLabs/taffy

        [2]: https://github.com/linebender/parley

        ---

        Also, if you're interested in contributing C bindings for html5ever upstream then let me know / maybe open a github issue.

      • parhamn 5 hours ago
        Off topic note: I read the website and a few pages of the docs and it's unclear to me for what I can use LightPanda safely. Like say I wanted to swap my it as my engine on playwright, what are the tradeoffs? What things are implemented, what isnt?
        • fbouvier 5 hours ago
          Thanks for the feedback, we will try to make this clearer on the website. Lightpanda works with Playwright, and we have some docs[1] and examples[2] available.

          Web APIs and CDP specifications are huge, so this is still a work in progess. Many websites and scripts already work, while others do not, it really depends on the case. For example, on the CDP side, we are currently working on adding an Accessibility tree implentation.

          [1] https://lightpanda.io/docs/quickstart/build-your-first-extra...

          [2] https://github.com/lightpanda-io/demo/tree/main/playwright

          • epolanski 3 hours ago
            I was actually interested into using lightpanda for E2Es to be honest, because halving the feedback cycle would be very valuable to me.
        • h33t-l4x0r 5 hours ago
          I think it's really more of an alternative to JSDom than it is an alternative to Chromium. It's not going to fool any websites that care about bots into thinking it's a real browser in other words.
      • barishnamazov 5 hours ago
        Thanks Francis, appreciate the nice & honest write-up with the thought process (while keeping it brief).
      • Jweb_Guru 2 hours ago
        Respectfully, for browser-based work, simplicity is absolutely not a good enough reason to use a memory-unsafe language. Your claim that Zig is in some way safer than Rust for something like this is flat out untrue.
        • hello_moto 58 minutes ago
          In that blog post, the author said safer than C not Rust.
      • quotemstr 4 hours ago
        Choosing something like Zig over C++ on simplicity grounds is going to be a false economy. C++ features exist for a reason. The complexity is in the domain. You can't make a project simpler by using a simplistic language: the complexity asserts itself somehow, somewhere, and if a language can't express the concept you want, you'll end up with circumlocution "patterns" instead.

        Build system complexity disappears when you set it up too. Meson and such can be as terse as your Curl example.

        I mean, it's your project, so whatever. Do what you want. But choosing Zig for the stated reasons is like choosing a car for the shape of the cupholders.

        • Philpax 2 hours ago
          Your Swiss Army Knife with a myriad of 97 oddly-shaped tools may be able to do any job anyone could ask of it, but my Swiss Army Knife of 10 well-designed tools that are optimal for my set of tasks will get my job done with much less frustration.
        • meheleventyone 3 hours ago
          > C++ features exist for a reason.

          But sometimes not good ones. Lot's of domains make tradeoffs about what features of C++ to actually make use of. It's an old language with a lot of cruft being used across a wide set of problems that don't necessarily share engineering trade offs.

        • hnlmorg 4 hours ago
          That’s not fully true though. There’s different types of complexity:

          - project requirements

          - requirements forced upon you due to how the business is structured

          - libraries available for a particular language ecosystem

          - paradigms / abstractions that a language is optimised for

          - team experiences

          Your argument is more akin to saying “all general purpose languages are equal” which I’m sure you’d agree is false. And likewise, complexity can and will manifest itself differently depending on language, problems being solved, and developer preferences for different styles of software development.

          So yes, C++ complexity exists for a reason (though I’d personally argue that “reason” was due to “design by committee”). But that doesn’t mean that reason is directly applicable to the problems the LightPanda team are concerned about solving.

        • vegabook 3 hours ago
          C++ features for complexity management are not ergonomic though, with multiple conflicting ideas from different eras competing with each other. Sometimes demolition and rebuild from foundations is paradoxically simpler.
        • zipy124 2 hours ago
          A lot of them only still exist for backwards compatabilities sake though. And a decent amount because adding something as a language extension rather than building the language around it has consequences.
    • pron 3 hours ago
      I don't think that a language that was meant to compete with C++ and in 10+ years hasn't captured 10% of C++'s (already diminished) market share could be said to have become "kind of the default" for anything (and certainly not when that requires generalising from n≅1).
      • pjmlp 2 hours ago
        It has for Amazon, Adobe, Microsoft, Google and the Linux kernel.

        It remains to be seen which big name will make Zig unavoidable.

        • pron 2 hours ago
          > It has for Amazon, Adobe, Microsoft, Google and the Linux kernel.

          I don't think so. I don't know about Adobe, but it's not a meaningful statement for the rest. Those companies default to writing safe code in languages other than Rust, and the Linux kernel defaults to unsafe code in C. BTW, languages favoured by those projects/companies do not reliably represent industry-wide preferences, let alone defaults. You could certainly say that of the two languages accepted so far in the Linux kernel, the only safe one is Rust, but there's hardly any "default" there.

          > It remains to be seen which big name will make Zig unavoidable.

          I have no idea whether or not Zig will ever be successful, but at this point it's pretty clear that Rust's success has been less than modest at best.

          • pjmlp 38 minutes ago
            It is a clear mandate on those companies that whatever used to be C or C++, should be written in Rust for green field development.

            Whatever could be done in programming languages with automatic memory management was already being done.

            Anyone deploying serverless code into Amazon instances is running of top of Firecracker, my phone has Rust code running on it, and whatever Windows 11 draws something into the screen, it goes through Rust rewrite of the GDI regions logic, all the Azure networking traffic going through Azure Boost cards does so via Rust firmware.

            Adobe is the sponsor for the Hylo programming language, and key figures in the C++ community, are doing Rust talks nowadays.

            "Adobe’s memory safety roadmap: Securing creativity by design"

            https://blog.adobe.com/security/adobes-memory-safety-roadmap...

            Any hobby language author would like to have 1% of the said modest Rust's success, I really don't get the continuous downplay of such achievement.

        • surajrmal 2 hours ago
          While certain teams within Google are using rust by default, I'm not sure rust is anywhere close in scale for new lines of code committed per week to c++.
      • anal_reactor 3 hours ago
        The problem is that the number of browser engines is n=2.
        • drnick1 48 minutes ago
          Interestingly, Ladybird, which aims at being the n = 3, is also written in C++.
    • pjmlp 5 hours ago
      And use-after-free, when that arena's memory goes away.
      • pron 3 hours ago
        But arenas have substantial benefits. They may be one of the few remaining reasons to use a low-level (or "systems programming") language in the first place. Most things are tradeoffs, and the question isn't what you're giving up, but whether you're getting the most for what you're paying.
        • pjmlp 3 hours ago
          Arenas are also available in languages with automatic memory management, e.g. D, C# and Swift, to use only modern languages as example.

          Thus I don't consider that a reason good enough for using Zig, while throwing away the safety from modern languages.

          • pron 2 hours ago
            First, Zig is more modern than any of the languages you mention. Second, I'm not aware that any of those languages offer arenas similar in their power and utility to Zig's while offering UAF-freedom at the same time. Note that "type-safe" arenas are neither as powerful as general purpose arenas nor fully offer UAF-freedom. I could be wrong (and if I am, I'd really love to see an arena that's both general and safe), but I believe that in all these languages you must compromise on either safety or the power of the arena (or both).
            • pjmlp 31 minutes ago
              Not really modern, it is Object Pascal/Modula-2 repackaged in C like syntax.

              The only thing relatively modern would be compile time execution, if we forget about how long some languages have had reader macros, or similar capabilities like D's compile time metaprogramming.

              There are several examples around of doing arenas in said languages.

              https://dlang.org/phobos/std_experimental_allocator.html

              You can write your own approach with the low level primitives from Swift, or ping back into the trusty NSAutoreleasePool.

              One example for C#, https://github.com/Enichan/Arenas

            • metaltyphoon 2 hours ago
              > First, Zig is more modern than any of the languages you mention

              How so? This feels like an empty statement at best.

    • galangalalgol 4 hours ago
      Too late now, but is the requirement for shared mutable state inherent in the problem space? Or is it just because we still thought OOP was cool when we started on the DOM design?
    • IshKebab 5 hours ago
      I don't think it's really that bad in Rust. If you're happy with an arena in Zig you can do exactly the same thing in Rust. There are a ton of options listed here: https://donsz.nl/blog/arenas/

      Some of them even prevent use after free (the "ABA mitigation" column).

      • mijoharas 4 hours ago
        I'm not super experienced with zig, but I always think that in the same way that rust forces you to think about ownership (by having the borrow checker - note: I think of this as a good thing personally) zig makes you think upfront about your allocation (by making everything that can allocate take an allocator argument.).

        It makes everything very explicit, and you can always _see_ where your allocations are happening in a way that you can't (as easily, or as obviously - imo) in rust.

        It seems like something I quite like. I'm looking forward to rust getting an effects system/allocator api to help a little more with that side of things.

        • IshKebab 2 minutes ago
          That's true and I liked the idea of it until I started writing some Zig where I needed to work with strings. Very painful. I'm sure you typically get a bit faster string manipulation code than what you'd get with Rust but I don't think it's worth the cost (Rust is pretty fast already).
        • silon42 4 hours ago
          The problem is deallocation... unless you tie the allocated object to an arena allocator with a lifetime somehow (Rust can model that).
          • mijoharas 4 hours ago
            Yep, rust forces you to think about lifetimes. Zig only suggests it (because you're forced to think about allocation, which makes you naturally think about the lifetime usually) but does not help you with it/ensure correctness.

            It's still nice sometimes to ensure that you have to think about allocation everywhere, and can change the allocation strategy for something that works for your usecase. (hence why I'm looking forward to the allocator api in rust to get the best of both worlds).

      • kryps 3 hours ago
        No, you can't do the same thing in Rust, because Rust crates and the standard library generally use the global allocator and not any arena you want to use in your code.
      • pjmlp 4 hours ago
        Which is hardly any different from me using PurifyPlus back in 2000.
    • 7bit 4 hours ago
      > without fighting the compiler

      It's unfortunate that "writing safe code" is constantly being phrased in this way.

      The borrow checker is a deterministic safety net. Claiming Zig is easier ignores that its lack of safety checks is what makes it feel easier; if Zig had Rust’s guarantees, the complexity would be the same. Comparing them like this is apples vs. oranges.

      • pron 3 hours ago
        That's a very narrow way of looking at things. ATS has a much stronger "deterministic safety net" than Rust, yet the reason to use Rust over ATS is that "fighting the compiler" is easier in Rust than in ATS. On the other hand, if any cost is worth whatever level of safety Rust offers for any project, than Rust wouldn't exist because there are far more popular languages with equal (or better) safety. So Rust's design itself is an admission that 1. more compile-time safety is always better, even if it complicates the language (or everyone who uses Rust should use ATS), and 2. any cost is worth paying for safety (or Rust wouldn't exist in the first place).

        Safety has some value that isn't infinite, and a cost that isn't zero. There are also different kinds of safety with different value and different costs. For example, spatial memory safety appears to have more value than temporal safety (https://cwe.mitre.org/top25/archive/2025/2025_cwe_top25.html) and Zig offers spatial safety. The question is always what you're paying and what you're getting in return. There doesn't appear to be a universal right answer. For some projects it may be worth it to pay for more safety, and for other it may be better to pay for something else.

        • Ygg2 2 hours ago
          > 1. more compile-time safety is always better, even if it complicates the language (or everyone who uses Rust should use ATS), and 2. any cost is worth paying for safety (or Rust wouldn't exist in the first place).

          You keep repeating this. It's not true. If what you said was true, Rust would have adopted HKT, and God knows whatever type astronomy Haskell & Scala cooked up.

          There is a balancing act, and Rust decided to plant a flag in memory safety without GC. The fact that Zig, didn't expand on this, but went backwards is more of an indictment of programmers unwilling to adapt and perfect what came before, but to reinvent it in their own worse way.

          > There are also different kinds of safety with different value and different costs. For example, spatial memory safety appears to have more value than temporal safety (https://cwe.mitre.org/top25/archive/2025/2025_cwe_top25.html)

          How did you derive this from the top 25 of CWEs? Let's say you completely remove the spatial memory issues. You still get temporal memory issues at #6.

          • pron 2 hours ago
            Rust does have a GC, but I agree it planted its flag at some intermediate point on the spectrum. Zig didn't "go backwards" but planted its own flag ever so slightly closer to C than to ATS (although both Rust and Zig are almost indistinguishable from C when compare to ATS). I don't know if where Rust planted its flag is universally better than where Zig planted its flag, but 1. no one else does either, 2. both are compromises, and 3. it's uncertain whether a universal sweet spot exists in the first place.

            > How did you derive this from the top 25 of CWEs? Let's say you completely remove the spatial memory issues. You still get temporal memory issues at #6.

            Sure, but spatial safety is higher. So if Rust's compromise, we'll exact a price on temporal safety and have both temporal and spatial safety, is reasonable, then so is Zig's that says, the price on temporal safety is too high for what you get in return, but spatial safety only is a better deal. Neither go as far as ATS in offering, in principle, the ability to avoid all bugs. Nobody knows whether Rust's compormise is universally better than Zig's or vice versa (or perhaps neither is universally better), but I find it really strange to arbitrarily claim that one compromise is reasonable and the other isn't, where both are obviously compromises that recognise there are different benefits and different costs, and that not every benefit is worth any cost.

            • Ygg2 1 hour ago
              > Rust does have a GC

              It doesn't. Not by any reasonable definition of having a GC.

              And "opt-in non-tracing GC that isn't used largely throughout the standard library" is not a reasonable definition.

              > Nobody knows whether Rust's compormise is universally better than Zig's

              When it comes to having more segfaults, we know. Zig "wins" most segfaults per issue Razzie Award.

              This is what happens when you ignore one type of memory safety. You have to have both. Just ask Go.

              • pron 43 minutes ago
                > And "opt-in non-tracing GC that isn't used largely throughout the standard library" is not a reasonable definition.

                Given that refcounting and tracing are the two classic GC algorithms, I don't see what specifying "non tracing" here does, and reference-counting with special-casing of the one reference case is still reference counting. I don't know if the "reasonable definition" of GC matters at all, but if it does, this does count as one.

                I agree that the one-reference case is handled in the language and the shared reference case is handled in the standard library, and I think it can be reasonable to call using just the one-reference case "not a GC", but most Rust programs do use the GC for shared references. It is also true that Rust depends less on GC than Java or Go, but that's not the same as not having one.

                > When it comes to having more segfaults, we know. Zig "wins" most segfaults per issue Razzie Award.

                And Rust wins the Razzie Award for most painful development and lack of similarly powerful arenas. It's like declaring that you win by paying $100 for something while I paid $50 for something else without comparing what we got for the money, or declaring that you win by getting a faster car without looking at how much I paid for mine.

                > This is what happens when you ignore one type of memory safety.

                When you have less safety for any property, you're guarnateed to have more violations. This is what you buy. Obviously, this doesn't mean that avoiding those extra violations is necessarily worth the cost you pay for that extra safety. When you buy something, looking just at what you pay or just at what you get doesn't make any sense. The question is whether this is the best deal for your case.

                Nobody knows if there is a universal best deal here let alone what it is. What is clear is that nothing here is free, and that nothing here has infinite value.

                • Ygg2 21 minutes ago
                  > I don't know if the "reasonable definition" of GC matters at all

                  If you define all non-red colors to be green, it is impossible to talk about color theory.

                  > And Rust wins the Razzie Award for most painful development and lack of similarly powerful arenas.

                  That's a non-quantifiable skill issue. Segfaults per issue is a quantifiable thing.

                  > When you have less safety for any property, you're guarnateed to have more violations.

                  If that's what you truly believed outside some debate point. Then you'd be advocating for ATS or Ada.SPARK, not Zig.

                  • pron 8 minutes ago
                    > If you define all non-red colors to be green, it is impossible to talk about color theory.

                    Except reference counting is one of the two classical GC algorithms (alongside tracing), so I think it's strange to treat it as "not a GC". But it is true that GC/no-GC distinction is not very meaningful given how different the tradeoffs that different GC algorithms make are. Even within these basic algorithms there are combinations. For example a mark-and-sweep collector is quite different from a moving collector, or CPython uses refcouting for some things and tracing for others.

                    > That's a non-quantifiable skill issue. Segfaults per issue is a quantifiable thing.

                    That it's not as easily quantifiable doesn't make it any less real. If we compare languages only by easily quantifiable measures, there would be few differences between them (and many if not most would argue that we're missing the differences that matter to them most). For example, it would be hard to distinguish between Java and Haskell. It's also not necessarily a "skill issue". I think that even skilled Rust users would admit that writing and maintaining a program in TypeScript or Java takes less effort than doing the same in Rust.

                    Also, ATS has many more compile-time safety capabilities than either Rust or Zig (in fact, compared to ATS, Rust and Zig are barely distinguishable in what they can guarantee at runtime), so according to your measure, both Rust and Zig lose when we consider other alternatives.

                    > Then you'd be advocating for ATS or Ada.SPARK, not Zig.

                    Quite the opposite. I'm pointing out that, at least as far as this discussion goes, every added value comes with added cost that needs to be considered. If what you truly believed is that more compile-time safety always wins, then it is you who should be advocating for ATS over Rust. I'm saying that we don't know where the cost-benfit sweet point is or, indeed, even if there's only one such sweey point or multiple. I'm certainly not advocating for Zig as a universal choice. I'm advocating for selecting the right tradeoffs for every project, and I'm rejecting the claim that whatever benefits Rust or Zig have compared to the other are free. Both (indeed, all languages) require you to pay in some way to get what they're offering.

      • senko 4 hours ago
        The fact that Zig doesn't have Rust's guarantees doesn't mean Zig does not have safety checks. The safety checks that Zig does have are different, and are different in a way that's uniquely useful for this particular project.

        Zig's check absolutely don't go to the extent that Rust's do, which is kind of the point here. If you do need to go beyond safe code in Rust, Zig is safer than unsafe code in Rust.

        Saying Zig lacks safety checks is unfortunate, although I wouldn't presume you meant it literally and just wanted to highlight the difference.

        • pjmlp 2 hours ago
          Thing is, those safety checks are also available in C and C++, provided that one uses the right tools like PVS and PurifyPlus (just to quote two examples), and now ongoing AI based tooling efforts for verification, thus the question is why a language like Zig in the 21st century, other than "I don't like either C++ or Rust".
  • kristopolous 4 hours 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

    • Philpax 2 hours ago
      Oh, huh, being able to convert arbitrary websites that may use JS for rendering to Markdown could be very handy indeed. Thanks for the tip!
    • daddykotex 2 hours ago
      Thanks for the tip, that's very cool. I did not know about `markitdown` and `streamdown`.
  • lewdwig 4 hours 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.
    • ivanjermakov 2 hours ago
      In my experience, migrating small-scale projects takes from minutes to single digit hours.

      Standard library is changing. The core language semantics - not so much. You can update from std.ArrayListUnmanaged to std.array_list.Aligned with to greps.

    • Philpax 2 hours ago
      It's certainly not a choice I would have made, but there's sufficient precedent for it now (TigerBeetle, Ghostty, etc) that I can understand it.
    • bluecalm 1 hour ago
      Right? People must really like the design choices in Zig to do that instead of choosing another language. It's very interesting just because of that.
    • steeve 3 hours ago
      the upside is absolutely worth it
  • deepriverfish 1 hour 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.
    • pjmlp 14 minutes ago
      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.
    • hobofan 1 hour ago
      Maybe just a reflex by people that had to hear a decade of "why not C++" whenever it was mentioned that Rust is being used?
  • nicoburns 5 hours 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)

    • karel-3d 5 hours ago
      When I was working before on something that used headless browser agents, the ability to do a screenshot (or even a recording) was really great for debugging... so I am not sure about the "no paint". But hey everything in life is a trade-off.
      • hobofan 1 hour ago
        Really depends on what you want to do with the agents. Just yesterday I was looking for something like this for our web access MCP server[0]. The only thing that it needs to do is visit a website and get the content (with JS support, as it's expected that most pages today use JS), and then convert that to e.g. Markdown.

        I'm not too happy with the fact that Chrome is one of our memory-hungriest parts of all the MCP servers we have in use. The only thing that exceeds that in our whole stack is the Clickhouse shard, which comes with Langfuse. Especially if you are looking to build a "deep research" feature that may access a few hundreds of webpages in a short timeframe, having a lightweight alternative like Lightpanda can make quite the difference.

        [0]: https://github.com/EratoLab/web-access-mcp

      • pzo 4 hours ago
        yeah I feel the same, I think even having a screenshot of part of rendered page or full page can be useful even for machines considering how heavy those HTML can be to parse and expensive for LLM context. Sometimes (sub)screenshot is just a better kind of compression
        • fbouvier 4 hours ago
          Yes HTML is too heavy and too expensive for LLM. We are working on a text-based format more suitable for AI.
          • httpteapot 2 hours ago
            What do you think of the DeepSeek OCR approach where they say that vision tokens might better compress a document than its pure text representation?

            https://news.ycombinator.com/item?id=45640594

            I've spent some time feeding llm with scrapped web pages and I've found that retaining some style information (text size, visibility, decoration image content) is non trivial.

    • warpech 4 hours ago
      > 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)

      Both projects (Lightpanda, DioxusLabs/blitz) sound very interesting to me. What do you think about rendering patterns that require both script+layout for rendering, e.g. virtual scrolling of large tables?

      What would be a good pattern to make virtual scrolling work with Lightpanda or Blitz?

      • nicoburns 4 hours ago
        So Blitz does technically have scripting, it's just Rust scripting rather than JavaScript scripting. So the plan for virtual scrolling would likely be to implement it in Rust.

        If your aim is to render a UI (ala Electron/Flutter) then we have a React-style framework (Dioxus) that runs on top of Blitz, and allows you access to the low-level Rust API of the DOM for advanced use cases (although it's still a WIP and this API is a bit rough atm). I'm also hoping to eventually have a built-in `RecyclerView`-like widget for this (that can bypass the style/layout systems for much more efficient virtual scrolling).

  • everlier 5 hours ago
    Wow. Lightpanda is absolutely bonkers of a project. I'd pay dearly for such an option a few years back.
  • Copenjin 46 minutes ago
    Any older project similar to this? Headless browser with js support I mean, I want to check various implementations of this idea.
  • steeve 3 hours ago
    This looks incredible, congratulations!
  • MrBuddyCasino 1 hour ago
    Because We're Not Smart Enough for C++ or Rust

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

  • tonyhart7 3 hours ago
    finally, rewrite in zig movement is coming
  • portly 3 hours ago
    Love to see Zig winning!
  • neoden 1 hour 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
    • shepherdjerred 3 minutes ago
      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.