### 🚀 Features -ca649e0ecma: Define math constants as known globals and resolve their types (#26585) (Armano) -9ef028ccodegen: Add `ascii_only` option (#25994) (Samuel Attard) -80a76a0minifier: Negate binary comparison for `typeof x < 'u'` (#26367) (Armano) ### 🐛 Bug Fixes -8ca76daparser: Reject `accessor` modifiers on methods (#26617) (camc314) -1916f31parser: Reject `readonly` modifier on constructors (#26612) (camc314) -1c42008parser: Handle escaped let in for loops (#26583) (camc314) -d21d5cfparser: Recognize annotated empty arrows in conditionals (#26537) (camc314) -d7713adparser: Classify Unicode line breaks in block comments (#26536) (camc314) -75cd919transformer: Preserve receivers in private optional chains (#26535) (camc314) -b32d25dparser: Reject escaped import-phase keywords (#26534) (camc314) -47b8311parser: Recognize contextual binding names in type lookaheads (#26532) (camc314) -d6b6705parser: Require arrow separator in TypeScript function types (#26529) (camc314) -e98beefparser: Disambiguate await using in for initializers (#26527) (camc314) -92afee6parser: Allow parenthesized JSX comma expressions with preserve_parens=false (#26524) (camc314) -31508b1parser: Reject return types on constructor overloads (#26523) (camc314) -a091fc4parser: Validate await context for await using declarations (#26495) (camc314) -5501e86parser: Disallow in expressions in using for-loop initializers (#26490) (camc314) -c8e5fa7parser: Allow escaped type names in import and export specifiers (#26487) (camc314) -2dcee2fparser: Reject async modifiers on class fields (#26486) (camc314) -973d58eparser: Require comma after TypeScript this parameter (#26480) (camc314) -32d00c5codegen: Preserve instantiation expression precedence (#26424) (camc314) -cfa47abparser: Allow `in` expressions in class static blocks (#26423) (camc314) -5986187packages/codegen: Preserve private-in right operand precedence (#26420) (camc314) -f8e6c6cpackages/codegen: Preserve in restriction through yield arguments (#26421) (camc314) -d61e3bfparser: Validate TS named tuple rest elements (#26419) (camc314) -ae6c386codegen: Preserve in restriction through yield arguments (#26413) (camc314) -42ac916codegen: Preserve private-in right operand precedence (#26411) (camc314) -10521b2parser: Allow escaped type default import bindings (#26409) (camc314) -72cb5e3parser: Reject rest parameters in getters (#26400) (camc314) -6e15ad5packages/codegen: Print matching quoted import names as identifiers (#26404) (camc314) -bbbb4bcpackages/codegen: Preserve private-in left operand precedence (#26403) (camc314) -a111b5bpackages/codegen: Print accessibility modifiers before abstract (#26402) (camc314) -4e76602parser: Allow `in` in arrow block bodies within `for` initializers (#26395) (camc314) -b20fc19parser: Reject partially parenthesized mixed coalesce expressions (#26394) (camc314) ### ⚡ Performance -1f902a6isolated_declarations: Key scope maps by `Ident` (#26380) (Dunqing) -a242469minfiier: Reduce allocs when creating indirect access (#26601) (Armano) -5b4787fminifier: Update chain expressions in place (#26544) (Armano) -0bc1661minifier: Try merging before creating new expression statements (#26556) (Armano) -c78d707minifier: Process newly created stmt in handle_if_statement (#26541) (Armano) -029c84bminfier: Update expressions in place when substituting alternate syntax (#26460) (Armano) -d198982codegen: Outline postfix source mapping work (#26450) (camc314) -53f006eecmascript: Format small integer literals with itoa (#26446) (camc314) -8bfb8c0codegen: Avoid duplicate sourcemap name lookups (#26441) (camc314) ### 📚 Documentation -38533acast: Move type annotation span comment to span field (#26522) (camc314)
DIVERGENCES.md out from AGENTS.md (#26121)
⚓ Oxc
/oʊ ɛks siː/
The Oxidation Compiler is a collection of high-performance tools for JavaScript and TypeScript written in Rust.
Oxc is part of VoidZero's vision for a unified, high-performance toolchain for JavaScript. It powers Rolldown (Vite's bundler) and enables the next generation of ultra-fast development tools that work seamlessly together.
For more information, check out our website at oxc.rs.
* Oxidation is the chemical process that creates rust
🙋 Who's using Oxc?
Rolldown and Nuxt use Oxc for parsing. Rolldown also uses Oxc for transformation and minification. Nova, swc-node, and knip use oxc_resolver for module resolution. Preact, Shopify, ByteDance, and Shopee use oxlint for linting.
🔧 Lint or Format a Codebase
🧰 Build Tooling on Top of Oxc
- Parse JavaScript and TypeScript: Parser
- Transform TypeScript, JSX, and modern JavaScript: Transformer
- Minify JavaScript for production builds: Minifier
- Resolve modules for JavaScript and TypeScript: Resolver
✍️ Contribute
Check out some of the good first issues or ask us on Discord.
See CONTRIBUTING.md for guidance, or read the complete contributing guide on our website →
If you are unable to contribute by code, you can still participate by:
- Add a GitHub Star to the project
- Join us on Discord
- Follow me on X and post about this project
📚 Other Resources
Sponsored By
📖 License
Oxc is free and open-source software licensed under the MIT License.
Thank you to namespace.so for powering our CI/CD pipelines with fast, free macOS and Linux runners.
Oxc ports or copies code from other open source projects, their licenses are listed in Third-party library licenses.