The JavaScript Oxidation Compiler

(oxc.rs)

147 points | by modinfo 6 hours ago

16 comments

  • owickstrom 1 hour ago
    I'm using oxc_traverse and friends to implement on-the-fly JS instrumentation for https://github.com/antithesishq/bombadil and it has been awesome. That in combination with boa_engine lets me build a statically linked executable rather than a hodgepodge of Node tools to shell out to. Respect to the tools that came before but this is way nicer for distribution. Good times for web tech IMO.
  • pier25 4 hours ago
    All the Void Zero projects are super cool although I still wonder how they’re going to monetize all this.
    • rk06 4 hours ago
      they are going to use vite plus for monetization
    • shawn_w 1 hour ago
      Why should it be monetized?
    • hiuioejfjkf 1 hour ago
      attention is money
      • carlos22 19 minutes ago
        in the beginning yes, but VCs want to cash out eventually. Look at mongodb, redis and whatnot that did everything to get money at a certain point. For VCs open source is a vehicle to get relevant in a space you would never be relevant if you won't do open source.
  • wangzhongwang 3 hours ago
    Interesting to see more Rust-based JS tooling. The performance gains are real but I'm curious about the ecosystem compatibility - does it handle all the weird edge cases that existing tools have learned over the years?

    Also wondering if this could eventually replace parts of the webpack/vite pipeline or if it's more focused on the compilation step.

    • VPenkov 2 hours ago
      Oxc is not the first Rust-based product on the market that handles JS, there is also SWC which is now reasonably mature. I maintain a reasonably large frontend project (in the 10s of thousands of components) and SWC has been our default for years. SWC has made sure that there is actually a very decent support for JS in the Rust ecosystem.

      I'd say my biggest concern is that the same engineers who use JS as their main language are usually not as adept with Rust and may experience difficulties maintaining and extending their toolchain, e.g. writing custom linting rules. But most engineers seem to be interested in learning so I haven't seen my concern materialize.

      • saghm 2 minutes ago
        It's not like JS isn't already implemented in a language that's a lot more similar to Rust anyhow though. When the browser or Node or whatever other runtime you're using is already in a different language out of necessity, is it really that weird for the tooling to also optimize for the out-of-the-box experience rather than people hacking on them?

        Even as someone who writes Rust professionally, I also wouldn't necessarily expect every Rust engineer to be super comfortable jumping into the codebase of the compiler or linter or whatever to be able to hack on it easily because there's a lot of domain knowledge in compilers and interpreters and language tooling, and most people won't end up needing experience with implementing them. Honestly, I'd be pretty strongly against a project I work on switching to a custom fork of a linting tool because a teammate decided they wanted to add extra rules for it or something, so I don't see it as a huge loss that it might end up being something people will need to spend personal time on if they want to explore.

    • chronicom 2 hours ago
      The goal is for Vite to transition to tooling built on Oxc. They’ve been experimenting with Rolldown for a while now (also by voidzero and uses oxc) - https://vite.dev/guide/rolldown
    • silverwind 1 hour ago
      Depends on how conservative their minifier is. The more aggressive, the more likely bugs are. esbuild still hits minifier bugs regularily.
      • leptons 1 hour ago
        Over-minifying is kind of pointless, just do a basic minify and then gzip and call it a day.
  • lerp-io 7 minutes ago
    whats the point of writing rust memory safe for js if js is already memory safe, ant u just write it in js???
  • root_axis 4 hours ago
    I'm surprised to see it's that much faster than SWC. Does anyone have any general details on how that performance is achieved?
  • apatheticonion 3 hours ago
    I wrote a simple multi threaded transpiler to transpile TypeScript to JavaScript using oxc in Rust. It could transpile 100k files in 3 seconds.

    It's blisteringly fast

    • iberator 2 hours ago
      sounds impossible to even index and classify files so fast. What hardware?
      • AYBABTME 56 minutes ago
        Let's say 100k files is 300k syscalls, at ~1-2us per syscall. That's 300ms of syscalls. Then assume 10kb per file, that's 1GB of file, easily done in a fraction of a second when the cache is warm (it'll be from scanning the dir). That's like 600ms used up and plenty left to just parse and analyze 100k things in 2s.
      • ido 1 hour ago
        I’m assuming they meant 100kloc rather than 100,000 files of arbitrary size (how could we even tell how impressive that is without knowing how big the files are?)
  • sankalpmukim 4 hours ago
    I wonder why did it take so long for someone to make something(s) this fast when this much performance was always available on the table. Crazy accomplishment!
    • TheAlexLichter 1 hour ago
      For a couple of reasons:

      * You need have a clean architecture, so starting "almost from scratch" * Knowledge about performance (for Rust and for build tools in general) is necessary * Enough reason to do so, lack of perf in competition and users feeling friction * Time and money (still have to pay bills, right?)

    • chrysoprace 2 hours ago
      I believe it goes back a few years to originally being just oxlint, and then recently Void Zero was created to fund the project. One of the big obstacles I can imagine is that it needs extensive plugin support to support all the modern flavours of TypeScript like React, Vue, Svelte, and backwards compatibility with old linting rules (in the case of oxlint, as opposed to oxc which I imagine was a by-product).
    • WD-42 2 hours ago
      Because Rust makes developers excited in a way that C/C++ just doesn't.
      • pjmlp 54 minutes ago
        Yeah, it is as if there were never other compiled languages before to rewrite JavaScripting tooling.
        • dwattttt 24 minutes ago
          The word 'excited' in GP's post isn't decorative.
          • pjmlp 17 minutes ago
            I am fully aware of it, there have been many 'excited' posts in HN history about various programming languages, with related rewrite X in Y, the remark still stands.
      • grougnax 54 minutes ago
        C++ is pure trash

        C is fine but old

    • nullsanity 2 hours ago
      It takes a good programmer to write it, and most good programmers avoid JavaScript, unless forced to use it for their day job. in that case, there is no incentive to speed up the part of the job that isn't writing JavaScript.
      • pjmlp 53 minutes ago
        Some of us, already have all the speed we need with Java and .NET tooling, don't waste our time rewriting stuff, nor need to bother with borrow checker, even if it isn't a big deal to write affine types compliant code.

        And we can always reach out to Scala or F# if feeling creating to play with type systems.

  • galaxyLogic 2 hours ago
    Does oxc-parser make it easy to remove comments from JavaScript?

    In other words does it treat comments as syntactic units, or as something that can be ignored wince they are not needed by the "next stage"?

    The reason to find out what the comments are is of course to make it easy to remove them.

    • xixixao 1 hour ago
      Should be easy with any standard parser. See astexplorer.net
  • hu3 2 hours ago
    I expected a coparison to `bun build` in the transformer TS -> JS part.

    But I guess it wouldn't be an apples to apples com parison because Bun can also run typescript directly.

    • Jarred 1 hour ago
      You can find a comparison with `bun build` on Bun's homepage. It hasn't been updated in a little while, but I haven't heard that the relative difference between Bun and Rolldown has changed much in the time since (both have gotten faster).

      In text form:

      Bundling 10,000 React components (Linux x64, Hetzner)

        Bundler                    Version                  Time
        ─────────────────────────────────────────────────────────
        Bun                        v1.3.0               269.1 ms
        Rolldown                   v1.0.0-beta.42       494.9 ms
        esbuild                    v0.25.10             571.9 ms
        Farm                       v1.0.5             1,608.0 ms
        Rspack                     v1.5.8             2,137.0 ms
  • zdw 4 hours ago
    This compiles to native binaries, as opposed to deno which is also in rust but is more an interpreter for sandboxed environments?
    • ameliaquining 3 hours ago
      Oxc is not a JavaScript runtime environment; it's a collection of build tools for JavaScript. The tools output JavaScript code, not native binaries. You separately need a runtime environment like Deno (or a browser, depending on what kind of code it is) to actually run that code.
    • 3836293648 3 hours ago
      Deno is a native implementation of a standard library, it doesn't have language implementation of its own, it just bundles the one from Safari (javascriptcore).

      This is a set of linting tools and a typestripper, a program that removes the type annotations from typescript to make turn it into pure javascript (and turn JSX into document.whateverMakeElement calls). It still doesn't have anything to actually run the program.

      • ameliaquining 3 hours ago
        Deno uses V8, which is from Chrome. Bun uses JavaScriptCore.
      • lioeters 1 hour ago
        I'm going to call it: a Rust implementation of JavaScript runtime (and TypeScript compiler) will eventually overtake the official TypeScript compiler now being rewritten in Go.
        • madeofpalk 52 minutes ago
          ? Most JavaScript runtimes are already C++ and are already very fast. What would rewriting in Rust get us?
    • nine_k 3 hours ago
      No, it it a suite of tools to handle Typescript (and Javascript as its subset). So far it's a parser, a tool to strip Typescript declarations and produce JS (like SWC), a linter, and a set of code transformation tools / interfaces, as much as I can tell.
  • RealityVoid 1 hour ago
    For the love of god, please stop naming Rust projects with "corrosion" and "oxidation" and the cute word pwns related to Rust because they are currently overplayed.
    • hiuioejfjkf 1 hour ago
      what next, stop using py prefix?
  • latchkey 3 hours ago
    I've played with all of these various formatters/linters in my workflow. I tend to save often and then have them format my code as I type.

    I hate to say it, but biome just works better for me. I found the ox stuff to do weird things to my code when it was in weird edge case states as I was writing it. I'd move something around partially correct, hit save to format it and then it would make everything weird. biome isn't perfect, but has fewer of those issues. I suspect that it is hard to even test for this because it is mostly unintended side effects.

    ultracite makes it easy to try these projects out and switch between them.

    • AbuAssar 1 hour ago
      oxc formatter is still alpha, give it some time
  • Ecko123 4 hours ago
    [dead]
  • zenon_paradox 5 hours ago
    [dead]
  • sneak 2 hours ago
    Thought this was something related to Oxide Computer - they might want to be careful with that branding.
    • swiftcoder 1 hour ago
      There are like 50 rust projects named by oxidation puns. This is hardly the first
  • robofanatic 3 hours ago
    oxidation is a chemical process where a substance loses electrons, often by reacting with oxygen, causing it to change. What does it have to do with JavaScript?
    • nine_k 3 hours ago
      Oxidation of iron produces rust. Rust is the language of implementation of that compiler, and of the entire Oxc suite.
    • ayhanfuat 3 hours ago
      It is written in Rust…