Bun is being ported from Zig to Rust

(github.com)

167 points | by SergeAx 2 hours ago ago

88 comments

  • stingraycharles an hour ago

    Interesting to see this when the current top post on HN is someone worrying about Bun as it was acquired by Anthropic. The top comment there describes “Anthropic does experiments on their own codebase, the Bun team is not gonna do the same vibe coding experiments”.

    Yet here we are, what looks like a massive undertaking for vibe coding.

    Time will tell how this will turn out. Would be nice if the Bun maintainers could give some clarification about what they’re doing here, and why they’re doing this.

    • andkenneth 2 minutes ago

      They recently tried to upstream an improvement to zig, but were prevented from doing so because zig has a hard and fast "no AI code" rule. Whether you think this response is trying to put pressure on zig or whether they're just moving for practical reasons is up to you.

      It's probably a bit of both.

    • mroche an hour ago

      I do not know if there's any overlap between these teams, but it seems like Anthropic itself is fairly invested in the Rust ecosystem.

      They recently proposed some of their internal tools to be the official Rust implementation[0] of Connect RPC[1]. As a protobuf based library set, this includes a new Rust-based protobuf compiler, Buffa[2].

      [0]: https://github.com/orgs/connectrpc/discussions/7#discussionc...

      [1]: https://connectrpc.com/

      [2]: https://github.com/anthropics/buffa

    • malisper 7 minutes ago

      > what looks like a massive undertaking for vibe coding

      fwiw, I suspect it's less of an undertaking than you may think. I've been playing with AI to rewrite Postgres in Rust over the past couple of weeks and I found the AI to be exceptional at doing rewrites. Having an existing codebase you can reference prevents a lot of the problems you have with vibecoding. You have an existing architecture that works well and have a test suite that you can test against

      Over the course of a month I've gone from nothing to passing over 95% of the Postgres test suite. Given Jarred built Bun, I bet he'll be able to go much faster

      • nailer 2 minutes ago

        > I suspect it's less of an undertaking than you may think... having an existing codebase you can reference prevents a lot of the problems you have with vibecoding.

        That's because stingraycharles doesn't seem to understand what vibe coding is. Vibe coding was defined here https://x.com/karpathy/status/1886192184808149383

        > There's a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.

        This is very far from Anthropic's migration plans.

    • Avicebron an hour ago

      I imagine claude is better at Rust than Zig?

      • allthetime an hour ago

        Zig is a moving target. 0.15 -> 0.16 includes some massive structural changes concerning IO and async/threading.

        Claude has absolutely no idea what it's doing with bleeding edge zig unless you feed it source and guide it closely (in which case it's useful for focused work) - I'm building a game engine & tcp/udp servers with it and it requires a hands-on approach and actually understanding what's being built.

        I imagine these are not really concerns with rust at this point.

        In my ideal world the team behind bun would be putting in the work to keep up with modern zig, but it's starting to look like they are running mostly on vibes in which case rust might be a better choice.

        • rudedogg 29 minutes ago

          > it requires a hands-on approach and actually understanding what's being built.

          I think this is true regardless of what language you’re using.

          I’ve built a lot in Zig and there’s no difference between vibing stuff in it versus TypeScript/React. Claude can “one-shot” them both, and will mimic existing code or grep the standard library to figure everything out.

      • kllrnohj 21 minutes ago

        I would expect all LLMs are going to be better at Rust than Zig - a strong, thorough compiler will simply prevent more mistakes, and the benefits of a "simple" language decreases the larger the code base gets. The more abstractions exist, the less valuable "no hidden control flow" or "no hidden allocations" from the standard library get, and that's before you add the mother of all abstractions of vibe coding.

      • fcarraldo an hour ago

        Contributors and maintainers will also be easier to find in Rust than Zig.

        Zig is a great language and I want to see it succeed, but this is a prudent move for Bun.

        • GuB-42 13 minutes ago

          I wouldn't call any port "prudent". In general, taking mature software and doing any major rewrite is one of the riskiest thing you can do. It is a large scale attempt to fix what isn't broken.

          Sometimes it is worth it, but it may also kill projects. A risky move. And AI doesn't help its cause. AI can save a lot of time when making ports, it is one of the things it does best, but it doesn't protect from regressions.

          I am not using Bun in production, but if I was, I would consider it a risk. Not because of Rust vs Zig, but for changing things that works.

        • versecafe an hour ago

          This is likely irrelevant given bun has stopped taking community PR's entirely and Jarred is pitching that human contributors should be banned.

        • TheRoque 32 minutes ago

          Why didn't they use Rust in the first place then ? All this was true before AI

        • chrisweekly an hour ago

          100%. For many people, Bun is the only reason they've even heard of Zig. I'm not in a position to comment intelligently on comparative language features per se, but when it comes to mindshare and community size, Rust is a clear winner.

          • majormajor 13 minutes ago

            fwiw before today I'd heard of Zig and not Bun :D

            something JS-adjacent could certainly be more known than an obscure language but are that many people using drop-in node replacements?

        • unclad5968 an hour ago

          I don't think Zig is different enough from rust or any other systems language for it to matter. If you can write rust you can write Zig.

          • jaggederest an hour ago

            Anthropic makes claude, claude can write Rust like a champ and struggles at Zig. It's a straightforward "training data" argument.

            I think there are even longer term plays that Anthropic should be looking at, in this space, but it seems like they've decided rust is the right thing, so fair play. I would be (am!) thinking about making an LLM optimized high level language that you can generate / train on intensively because you control the language spec.

            • aabhay 30 minutes ago

              Claude doesn’t write Rust like a champ. It’s still miles ahead at js and python than it is at rust. It can do macros and single file optimizations but its gotten really stuck in type hell and tried to dyn everything on multiple occasions for me.

              • vlovich123 6 minutes ago

                Claude struggling at Rust: not getting types correct, using the wrong abstractions, not implementing things correctly

                Claude struggling at Zig: the above + memory safety issues if you run “fast” mode.

                It is generally true that Rust code tends to be written in a way that the compiler catches the issue at compile time. The same is not as true for Zig, Python or JS

            • dnautics an hour ago

              claude does not struggle with zig? not in my hands anyways.

          • speed_spread 29 minutes ago

            I'm reminded of the old joke "how to shoot yourself in the foot in 25 different languages". The first one was "C - you shoot yourself in the foot." Zig remains very close to that philosophy.

            So the difference is not in writing new stuff but in maintaining the existing codebase. Rust's rigidity makes it potentially harder to break stuff compared to Zig's general flexibility. As a project grows and matures, different types of contributors naturally come in and it's unreasonable to expect everyone to learn about historical footguns that may have accumulated.

    • NewsaHackO an hour ago

      But why should they? This just seems like the groundwork for an initial refactor and moving from one language to another. They haven't actually committed to switching from Zig to Rust yet. I mean, I get if you are an investor and you want to see if they are using their time effectively, but why would it matter to anyone else?

      • stingraycharles an hour ago

        They’re not required to do so, but like I said, it would be nice, because it removes a lot of speculation. And development is in the open, so people notice what they’re doing.

      • SergeAx an hour ago

        Lots of people, me included, heavily invested their time and expertise into Bun, using it as a daily driver, to bundle production code or even using it in production as a JS/TS runtime. Of course, we are interested in Bun to stay a useful tool. The Anthropic acquisition was worrying enough on its own.

        • NewsaHackO 17 minutes ago

          But there isn't any change in someone's expertise in Bun though, currently, just in development. Why would they have to dive you into a daily stand-up about their development process?

    • nailer an hour ago

      > what looks like a massive undertaking for vibe coding

      It doesn’t look like that at all. Do you think that all use of AI is vibe coding?

      • WD-42 4 minutes ago

        Did you look at the branch? This is vibed, even with the most liberal definition

        https://github.com/oven-sh/bun/compare/claude/phase-a-port

        This single commit is 65k lines of additions

        https://github.com/oven-sh/bun/commit/ffa6ce211a0267161ae48b...

      • stingraycharles 37 minutes ago

        I think the definition of vibe coding is a bit fluid, in this case I just meant it to be “code fully generated by AI, possibly not fully reviewed by human eyes”. I agree that this definitely not “coding based purely off vibes”, and the approach looks legit.

      • allthetime an hour ago

        what would you call a fully uncommented commit with

        "+27,939Lines changed: 27939 additions & 0 deletions"

        of new rust code

        • geodel 29 minutes ago

          I'm sure it will be called Systems Programing . Because Rust.

        • vips7L 32 minutes ago

          The blind leading the blind.

        • heddhunter 40 minutes ago

          Just another Monday in 2026.

      • MarsIronPI an hour ago

        It depends on what you mean by "vibe coding". Is AI coding based on an existing implementation vibe coding? What about only from a natural-language spec? How does manual reviewing affect whether or not it's vibe coding?

      • lmm an hour ago

        In practice all use of AI rapidly becomes vibe coding. Even if someone says they're going to carefully manually review everything that's generated, within a couple of days they get bored and just click approve.

        • jmull an hour ago

          While I'm sure you're speaking for many, this is definitely not true across the board.

        • p-e-w an hour ago

          Not to mention that manually writing code is itself a process of understanding. It cannot be replicated by reading code, no matter how carefully.

    • pstuart an hour ago

      Porting from one typed language to another seems like a perfect use for LLMs. I can see the appeal of both languages and why to consider such an action (e.g., rust is a mainstream PL vs zig's cult status (no slight intended)).

      • rtpg an hour ago

        I think the big difficulty here is that Rust's ownership model in particular tends to require certain kinds of control flow to avoid a bunch of weird churning/copying, which makes it not as straightforward of a port target from other imperative languages.

        Like maybe you get the LLM to try _really hard_ to churn through everything, but this feels like a big case of "perils of the lack of laziness".

        Of course if you have a good idea for how to deal with allocations etc "idiomatically" already maybe that works out well. And to the credit of the port guide writer bun seems to have its explicit allocations that are already mapping pretty well to Rust.

        • pstuart 29 minutes ago

          This is all wild conjecture, but I'd assume that teaching the LLM to do that mapping is an achievable goal and then it get's close to automatic -- effectively slurp the source AST into a rust AST and render.

          My only experience with ports so far is Python to Go, and it's been near flawless (just enough stupid shit to make me feel justified to be in the loop).

          • spem-in-allium 14 minutes ago

            I'm porting a large-ish delphi application to c sharp. It's been pretty hands-off except for converting to async and some language capability mismatch.

    • splittydev 31 minutes ago

      Honestly, this kind of thing seems to work quite well with vibe coding. If I remember correctly, the Ladybird JS engine was "vibe-ported" to Rust as well, and it passed 100% of the original test suite, in addition to new Rust tests.

  • kgeist 28 minutes ago

    Interesting how times have changed. Back in 2015, the entire Go runtime (already a mature codebase) was rewritten from C to Go semi-automatically: one of the maintainers wrote a C-to-Go conversion tool (for a subset of C they used) so that it compiled and produced identical output, and then the resulting code was manually refactored to make the Go code more idiomatic and optimized. And now you can just ask a language model.

    The slides: https://go.dev/talks/2015/gogo.slide#3

    An interesting similarity:

    >We had our own C compiler just to compile the runtime.

    The Bun team maintain their own fork of Zig too

  • tacitusarc 3 minutes ago

    I wonder if a successful, albeit slower, approach would be to walk the git commit history in lockstep, applying the behavioral intent behind each commit. If they did this, I would be interested in knowing if they were able to skip certain bug fix commits because the Rust implementation sidestepped the problem.

  • archargelod 35 minutes ago

    Linked commit is probably not the most convincing for this tagline. Here's a branch[0] of Claude mass rewriting Zig code into Rust which is currently at 773,950 additions and 151 deletions:

    [0]: https://github.com/oven-sh/bun/compare/claude/phase-a-port

  • hsaliak 14 minutes ago

    The problem with vibe coded re-writes is that you basically sign off on understanding the generated codebase at that point. Any historical knowledge of the codebase is gone.

  • toledocavani 6 minutes ago

    For better or for worse, at least Bun is open source, and the world is not lacking a NodeJS alternative.

    What is the most interesting here for me is:

    - a big, clear outcome and acceptance criteria, vibe coding project on - a public, working, high performance, full featured, production codebase by - the leading LLM model maker known for the strongest coding ability

    A good example no matter if it successes or not.

  • jr-14 an hour ago

    I want zig to succeed but given that zig is not yet 1.x I'd imagine a large code base like bun would have difficulties addressing major breaking changes. Also given the fact that bun is using a fork of zig https://x.com/bunjavascript/status/2048427636414923250?s=20

  • confessinator 5 minutes ago

    Aside from Zig's anti-AI stance and maintaining their own Zig fork, I think this port will showcase that Anthropic can re-engineer a massive codebase.

    As an aside, I've been bitten by Zig's breaking changes on my own projects as well. It's taken the shine off of Zig and I'm looking at alternatives.

  • elffjs an hour ago

    Comparing this claude/phase-a-port branch with main: “Showing 1,646 changed files with 773,950 additions and 151 deletions.”

  • inkysigma an hour ago

    So I can't tell if the linked commit is an actual attempt or just an experiment but it did always strike me as odd to make a JS runtime in Zig when my impression was there were a lot of work-stopping compiler bugs at the time.

  • cropcirclbureau 11 minutes ago

    The only Bun shipped product I've used in anger is OpenCode and I regularly run into segfaults on it. I doubt this is the reason for migration but every time it happens, it reminds me the real cost of unsafe code. That being said, Zig is an absolute pleasure to write and I can't wait until it has a real library ecosystem, Rust's greatest boon.

  • Humphrey an hour ago

    I'll be very interested in how this AI port turns out. I am involved in a number of active projects that are being held back by the language / framework is holding back the project, but where a rewrite would be too big of a project to undertake by using only human power.

    I've had more success vibe coding Rust than I have in more dynamic languages. I suspect the strictness of the Rust compiler forces the AI agent to produce better code. Not sure. It could be just that I am less familiar with Rust so it feels like it's doing a better job.

  • yladiz an hour ago

    Why? Are there particular reasons that the maintainers of Bun feel the need to attempt to migrate from Zig to Rust?

    • _--__--__ an hour ago

      Possibly related to https://simonwillison.net/2026/Apr/30/zig-anti-ai/ where the Bun team wanted to upstream work to Zig that was rejected by a blanket anti-LLM contribution policy.

    • nikeee an hour ago

      Zig is a moving target that has breaking changes in every release (which is fine as they are sub-1.0). But that means that AI tools have been trained on outdated syntax/etc. Zig isn't that common, so there is even less training data to begin with.

      Rust on the other hand is pretty established by now and has less breaking changes. It also has more compile-time safety-guarantees that makes vibe-coding a bit more confident.

      In top of that, Zig has rejected their upstream contributions. So they'd have to maintain their own compiler in the long run, which is probably just technical debt to maintain.

      • nullstyle an hour ago

        Most of my vibe coding is in zig, and it has been my experience that Claude and Codex both keep up with zig changes just fine. Every now and then I catch them writing outdated code that they burn some tokens on, but my experience says your local codebases’s idioms will influence what gets generated enough to stop this from being a problem.

    • reissbaker an hour ago

      Probably an experiment due to Bun's PRs to Zig being rejected (Zig does not allow AI use). If Rust works well enough, and the alternative is maintaining a fork of Zig, I'd guess they'd go with Rust.

      • philwelch an hour ago

        Also, if Zig itself doesn’t accept AI contributions, it’s probably NGMI unless somebody is willing to maintain that fork.

    • tom_ 43 minutes ago

      If the computer can do it for them, then why not?

  • thayne 35 minutes ago

    When I first heard that bun was written in zig, I thought that was an odd choice for such a large project, mostly because the language is "unstable" and is still making significant breaking changes.

    I would guess dealing with breaking changes is a big motivation for this.

  • anymouse123456 12 minutes ago

    This is a huge loss for the zig language and community.

    As a fan of the language, I hope it leads to some reflection on things that might need to change moving forward.

  • hbbio 38 minutes ago

    Given they have "unlimited" AI usage, do we expect the port to be complete tomorrow?

  • heldrida an hour ago

    I suspect that an experiment is being run. In any case, that'll be a hell of a story!

  • ratstew 25 minutes ago

    This feels more like a reaction to Zig's anti-LLM policy than anything. Anthropic would probably like to contribute something back to Zig at some point, but I doubt anyone would ever believe their PRs were not written by Claude.

  • root_axis 19 minutes ago

    Any confirmation that a genuine port is underway? This might just be an experiment.

  • Entambi 25 minutes ago

    hahaha eat your heart out "don't port it to rust" gang

    • sourcegrift 22 minutes ago

      I don't think problem ever is Rust, Rust is by far the best systems programming language.

      Problem is fanboys like YOU.

  • arthurcolle an hour ago

    Could just be an experiment or something. It's Monday, the week is young

  • booleandilemma 32 minutes ago

    Interesting. When I thought of Zig, I thought of Bun. In my mind it was the flagship application for that language. Is there another? I wonder how the Zig team feels about this. To me it seems like Rust has definitively won now.

    • swingboy 12 minutes ago

      Ghostty is mainly Zig aside from the UI parts.

  • larpa an hour ago

    "Claude, migrate bun to Rust, make no mistakes"

  • nothinkjustai 43 minutes ago

    Makes sense on merit. There really isn’t room for Zig when Rust exists, is more ergonomic, and also safe.

  • sergiotapia an hour ago

    >*No `tokio`, `rayon`, `hyper`, `async-trait`, `futures`.* No `std::fs`,

    I'm not a rust dev but even I kind of notice that tokio is kind of shunned in most projects. Why is that? Is it just bad or what?

    • Philpax 36 minutes ago

      It's not really shunned - it's the standard solution for async in Rust - but it's not the right solution for every project, especially if you have specific requirements for how your project's computation should be scheduled. I would guess that Bun is one of those projects, especially as it needs to be able to schedule JS async work itself.

    • arjie 10 minutes ago

      It's an async runtime. The whole async-await flow removes a little bit of scheduling control and adds some forced memory management in order to give you some nicer code in an application case, but if you're trying to build a runtime yourself I think you'd much rather retain control in this case. It's just hard to reason about.

      You much rather have this runtime you're building manage task scheduling and allocation and all that. It's the most natural design choice to make.

    • thombles 12 minutes ago

      The answer is in the next sentence: "Bun owns its event loop and syscalls." They clearly want to manage their use of threads explicitly, which is not _unusual_ for systems programming but probably less common. Note that `rayon` is different from most of these in that it has nothing to do with async Rust - it's a tool for spreading computation over a thread pool, very popular in non-async projects, but it would also go against their goals here.

    • mmastrac 19 minutes ago

      tokio is great and it's pretty performant, but you pay an allocation for every future unless you do some complex organization of your futures.

      Source: I worked on Deno, competed directly with Bun on HTTP performance (and won on some metrics).

    • allthetime 40 minutes ago

      You shouldn't have to pull in big complex dependencies to do what should be primitive things. Zig is putting a strong and thought-out effort into getting async & parallelism "right" inside the stdlib. I'm honestly not up to speed with where rust is at with it at the moment, but last time I checked it was a bit of a mess.

    • lstodd 39 minutes ago

      You try to use it you'll get it. Otherwise it's just words. Like these: rust failed at async.

    • dboreham 31 minutes ago

      Async is an anti-pattern but sometimes inexperienced developers don't realize that and will infect your codebase with it.

  • ConanRus an hour ago

    instead of writing it once in C++

  • 0x142857 an hour ago

    you can use both zig and rust in a single project, duh