OXC
基于 Rust 构建的模块化高性能 JavaScript/TypeScript 工具链,包含解析器、转换器、压缩器、Linter(Oxlint)和格式化器(Oxfmt),是 Vite 8 和 Rolldown 的核心编译基础设施。
OXC 是完全使用 Rust 编写的模块化 JavaScript/TypeScript 工具链,解析器速度约为 SWC 的 3 倍,Oxlint 比 ESLint 快 50-100 倍,Oxfmt 比 Prettier 快 30 倍,是 Vite 8 和 Rolldown 的核心编译引擎。
OXC (The JavaScript Oxidation Compiler) — Rust 前端工具链
基于 Rust 构建的模块化高性能 JavaScript/TypeScript 工具链,包含解析器、转换器、压缩器、Linter(Oxlint)和格式化器(Oxfmt),是 Vite 8 和 Rolldown 的核心编译基础设施。
技术简介说明
OXC(The JavaScript Oxidation Compiler,"Oxidation"致敬 Rust 的氧化过程)是一个完全使用 Rust 编写的模块化 JavaScript/TypeScript 工具链。与 SWC 定位为"综合性编译器平台"不同,OXC 的愿景更为宏大——它旨在构建统一的、高性能的 JavaScript 工具链,覆盖解析、转换、压缩、linting、格式化和模块解析等前端开发的完整工具需求,替代 ESLint + Prettier + Babel + Rollup 等分散工具。
OXC 的核心竞争力在于其模块化设计和极致性能。每个组件(Parser、Transformer、Minifier、Resolver、Linter、Formatter)都是独立的 Rust crate,可以被其他工具单独引用。其解析器速度约为 SWC 的 3 倍,Oxlint 比 ESLint 快 50-100 倍,Oxfmt 比 Prettier 快 30 倍。这种性能优势使 OXC 成为 Vite 8 和 Rolldown 的核心编译引擎,直接影响着数百万前端开发者的构建体验。
2025-2026 年是 OXC 的爆发之年。Oxlint 1.0 于 2025 年 6 月发布稳定版,Oxfmt 于 2026 年 2 月进入 Beta,Vite 8(2026 年 3 月)开始使用基于 OXC 的 Rolldown 作为默认打包器。OXC 团队核心成员 Boshen Chen 加入 VoidZero(Evan You 创立的公司),VoidZero 于 2025 年 6 月被 Cloudflare 收购,为 OXC 的发展提供了强大的组织支撑。
基本信息
| 项目 | 详情 |
|---|---|
| 官网 | https://oxc.rs |
| GitHub | https://github.com/oxc-project/oxc |
| License | MIT |
| 最新版本 | oxlint v1.73.0 / oxfmt v0.58.0 / oxc crates v0.139.0 |
| 主要维护者 | Boshen Chen(创始人,VoidZero VP of Engineering) |
| 核心贡献者 | overlookmotel、camc314 (Cameron Clark)、Dunqing、leaysgur 等 |
| 公司支持 | VoidZero(2025.06 被 Cloudflare 收购) |
| GitHub Stars | ~21,900 |
| 总提交数 | 18,881+ |
| 贡献者 | 200+ |
| npm 周下载量 | oxc-parser ~1030 万 / oxlint ~670 万 |
快速上手
安装
Oxlint(Linter):
# npm 安装
npm install --save-dev oxlint
# 或使用独立二进制(更快)
# macOS
brew install oxc-project/tap/oxlint
# 或通过 curl
curl -fsSL https://oxc.rs/install.sh | shOXC Rust Crates(供 Rust 项目使用):
# Cargo.toml
[dependencies]
oxc_parser = "0.139"
oxc_ast = "0.139"
oxc_allocator = "0.139"基础配置
Oxlint 配置(.oxlintrc.json):
{
"rules": {
"no-unused-vars": "error",
"no-console": "warn",
"typescript/no-explicit-any": "error",
"react-hooks/rules-of-hooks": "error"
},
"categories": {
"correctness": "error",
"suspicious": "warn",
"pedantic": "off",
"style": "warn",
"nursery": "off",
"restriction": "off"
}
}最小示例
# 运行 Oxlint
npx oxlint src/
# 自动修复
npx oxlint src/ --fix
# 指定配置
npx oxlint src/ -c .oxlintrc.json
# 输出统计
npx oxlint src/ --diagnostic-level warning通过 Rust API 使用解析器:
use oxc_allocator::Allocator;
use oxc_parser::Parser;
use oxc_ast::ast::Program;
use oxc_span::SourceType;
fn parse(source_text: &str) {
let allocator = Allocator::default();
let source_type = SourceType::default().with_module(true);
let ret = Parser::new(&allocator, source_text, source_type).parse();
// ret.program 是解析后的 AST
// ret.errors 包含解析错误
println!("Parsed {} top-level statements", ret.program.body.len());
}核心概念与架构
模块化架构
OXC 采用高度模块化的设计,每个组件都是独立的 Rust crate:
┌────────────────────────────────────────────────────────────────┐
│ OXC 模块化架构 │
├────────────────────────────────────────────────────────────────┤
│ │
│ 基础设施层 │
│ ├── oxc_allocator — 内存分配器(基于 Bump allocator) │
│ ├── oxc_span — 源码位置追踪 │
│ ├── oxc_syntax — 语法基础定义 │
│ └── oxc_diagnostics — 诊断信息框架 │
│ │
│ 核心编译层 │
│ ├── oxc_parser — JS/TS 解析器 │
│ ├── oxc_ast — AST 定义和遍历 │
│ ├── oxc_transformer — TypeScript/JSX/ES 转换 │
│ ├── oxc_minifier — 代码压缩 + 死代码消除 │
│ └── oxc_codegen — 代码生成 │
│ │
│ 工具层 │
│ ├── oxlint — Linter(ESLint 兼容) │
│ ├── oxfmt — 格式化器(Prettier 兼容) │
│ └── oxc_resolver — Node.js 模块解析 │
│ │
│ 集成层 │
│ ├── Rolldown — Rust 打包器(Vite 8 核心) │
│ └── 外部工具集成 — SWC、Vite、各种编辑器 │
│ │
└────────────────────────────────────────────────────────────────┘
核心设计特点
- Bump Allocator:使用 bump allocation 策略,解析后一次性释放所有 AST 内存,避免逐个释放的开销
- 零拷贝解析:解析器通过
&str引用源码,不复制字符串数据 - SIMD 优化:词法分析器利用 SIMD 指令加速(Q3 2026 路线图重点)
- 独立 crate:每个组件可独立使用,不强制引入整个工具链
- WTF-8 编码:使用 WTF-8 编码处理 Unicode,兼容 JavaScript 的 UTF-16 语义
处理流程
源代码 (JS/TS/JSX/TSX)
│
▼
oxc_parser(词法分析 + 语法分析)
│
▼
oxc_ast(AST + 类型信息 + 源码映射)
│
├──→ oxc_transformer(TS 类型剥离、JSX 转换、ES 降级)
│ │
│ ▼
│ oxc_codegen(代码生成 → JS 输出)
│
├──→ oxc_minifier(压缩 + DCE + 变量混淆)
│ │
│ ▼
│ oxc_codegen(压缩后输出)
│
├──→ oxlint(规则检查 → 诊断信息)
│
└──→ oxfmt(格式化 → 美化输出)
核心特性
- 模块化 Rust 工具链:Parser、Transformer、Minifier、Linter、Formatter、Resolver 均可独立使用
- 极致性能:解析器比 SWC 快约 3 倍,Oxlint 比 ESLint 快 50-100 倍,Oxfmt 比 Prettier 快 30 倍
- Oxlint 1.0:800+ 规则,支持 ESLint、TypeScript、React Hooks、Testing Library 等
- Oxfmt:Prettier 兼容的格式化器,支持 JS/TS/JSON/YAML/CSS/Markdown/HTML/Vue 等
- oxc_resolver:Node.js 兼容的 CJS/ESM 模块解析,比
enhanced-resolve快 28 倍 - React Compiler:Rust 实现的 React Compiler(去除 Babel AST 中间层,性能提升 2x)
- 类型感知 Linting:基于 tsgo 的类型感知 linting(2025 年 12 月 Alpha)
- JS 插件支持:Oxlint 可运行大多数现有 ESLint 插件(2026 年 3 月 Alpha)
- 驱动 Rolldown/Vite 8:OXC 是 Vite 8 核心打包器 Rolldown 的编译引擎
- Bump Allocator:基于 bump allocation 的内存管理,极致性能
- WTF-8 编码:兼容 JavaScript UTF-16 语义的 Unicode 处理
- 跨平台:支持 macOS、Linux、Windows,提供独立二进制和 npm 包
生态图
OXC 生态系统
┌──────────────────────────────────────────────────────────────────────┐
│ OXC 生态系统 │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ 核心工具 │
│ ├── Oxlint — Linter(800+ 规则,ESLint 兼容) │
│ ├── Oxfmt — 格式化器(Prettier 兼容,30x 更快) │
│ └── oxc_resolver — 模块解析器(28x faster than enhanced-resolve)│
│ │
│ 编译引擎(Rust Crates) │
│ ├── oxc_parser — JS/TS 解析器 │
│ ├── oxc_transformer — TypeScript/JSX/ES 转换 │
│ ├── oxc_minifier — 代码压缩 │
│ ├── oxc_codegen — 代码生成 │
│ └── oxc_ast — AST 定义和遍历 │
│ │
│ 集成项目 │
│ ├── Rolldown — Rust 打包器(Vite 8 核心,使用 OXC 编译) │
│ ├── Vite 8 — 默认打包器从 esbuild 切换到 Rolldown │
│ └── Rolldown 插件 — 兼容 Rollup 插件生态 │
│ │
│ JS 插件生态 │
│ ├── Oxlint JS Plugins — 运行 ESLint 插件(Alpha,~80% 可迁移) │
│ └── ESLint 兼容 — 覆盖标准 ESLint + TS + React + Testing Lib │
│ │
│ 组织支撑 │
│ ├── VoidZero — Evan You 创立的公司(Vite/Rolldown 母公司) │
│ ├── Cloudflare — 2025.06 收购 VoidZero │
│ └── oxc-project — GitHub 组织 │
│ │
│ 企业用户 │
│ ├── Shopify、Airbnb、Mercedes-Benz │
│ ├── ByteDance、Shopee、Bun、Preact │
│ └── 更多企业迁移中... │
│ │
└──────────────────────────────────────────────────────────────────────┘
适用场景
- 替代 ESLint 进行 Linting:Oxlint 速度快 50-100 倍,适合大型代码库
- 替代 Prettier 进行格式化:Oxfmt 速度快 30 倍,支持更多格式
- Vite/Rolldown 项目:Vite 8 自动使用基于 OXC 的 Rolldown
- Rust 项目中的 JS 处理:需要在 Rust 工具中解析/转换 JS/TS 代码
- 大型代码库 CI/CD:利用 Oxlint 的速度优势加速 CI lint 步骤
- 替代 Babel 进行转译:当不需要 Babel 的复杂插件生态时
- 模块解析优化:
oxc_resolver比enhanced-resolve快 28 倍 - React Compiler:Rust 实现的 React Compiler 性能更优
开发与工程化
Oxlint 配置进阶
{
"rules": {
"no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
"no-console": ["warn", { "allow": ["warn", "error"] }],
"typescript/no-explicit-any": "error",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
},
"categories": {
"correctness": "error",
"suspicious": "warn",
"pedantic": "off",
"style": "warn"
},
"overrides": [
{
"files": ["**/*.test.ts", "**/*.spec.ts"],
"rules": {
"no-console": "off"
}
}
]
}CI/CD 集成
# GitHub Actions 示例
- name: Run Oxlint
run: npx oxlint src/ --format github
# Oxfmt 检查
- name: Check Formatting
run: npx oxfmt --check src/
# 缓存
- name: Cache OXC
uses: actions/cache@v4
with:
path: .oxlint-cache
key: ${{ runner.os }}-oxlint-${{ hashFiles('.oxlintrc.json') }}与现有 ESLint 的渐进迁移
# 1. 安装 Oxlint
npm install --save-dev oxlint
# 2. 运行并查看差异
npx oxlint src/ --format json > oxlint-results.json
# 3. 对比 ESLint 和 Oxlint 的规则覆盖
# 使用 oxlint 的 ESLint 规则映射
npx oxlint src/ --eslint-config .eslintrc.json编辑器集成
| 编辑器 | 插件 |
|---|---|
| VS Code | oxc.oxc-vscode |
| Cursor | 兼容 VS Code 插件 |
| Zed | 内置 OXC 支持 |
| IntelliJ | oxc-intellij-plugin |
| Neovim | 通过 LSP 或 null-ls 集成 |
性能与安全
性能数据
| 场景 | 数据 | 对比 |
|---|---|---|
| Oxlint vs ESLint | 615ms vs 33.5s | 50-100x 更快 |
| Oxfmt vs Prettier | — | 30x 更快 |
| Oxfmt vs Biome | 首次运行无缓存 | 3x 更快 |
| Resolver vs enhanced-resolve | — | 28x 更快 |
| 解析器 vs SWC | — | ~3x 更快 |
| Node.js 仓库 lint | ESLint 1:43 → Oxlint 21s | 4.8x(含插件) |
| Airbnb 126,000+ 文件 | 7 秒 | 实际案例 |
| Mercedes-Benz | lint 时间减少 71% | 实际案例 |
性能优化建议
- 使用独立二进制:直接安装
oxlint二进制比通过 npm 包更快 - 合理配置规则:禁用不需要的规则类别(如
nursery、restriction) - 增量 Linting:在 CI 中使用
--fix结合缓存减少重复工作 - 并行处理:Oxlint 自动利用多核 CPU 并行处理文件
- 类型感知 Linting 谨慎使用:类型感知规则需要加载 TypeScript 类型信息,速度较慢
安全注意事项
- 输入验证:OXC 的 Rust 实现天然具有内存安全优势
- 插件安全:Oxlint JS 插件在沙箱中运行
- 依赖审计:Rust 依赖通过 cargo audit 检查
- Unicode 处理:WTF-8 编码处理需要注意跨平台一致性
技术对比
与同类工具的详细对比
| 维度 | OXC | SWC | Babel | esbuild |
|---|---|---|---|---|
| 实现语言 | Rust | Rust | JavaScript | Go |
| 定位 | 完整工具链 | 编译器 | 编译器 | 编译器 + 打包器 |
| Linter | ✅ Oxlint(一流) | ❌ | ❌(ESLint 独立) | ❌ |
| Formatter | ✅ Oxfmt | ❌ | ❌(Prettier 独立) | ❌ |
| Resolver | ✅(28x 更快) | ⚠️ 有限 | ❌ | ✅ |
| 解析器速度 | ~3x SWC | 快 | 慢 | 快 |
| TypeScript | ✅ 剥离类型 | ✅ 剥离类型 | ✅ 剥离类型 | ✅ 剥离类型 |
| 类型检查 | ❌(通过 tsgo 支持感知) | ❌ | ❌ | ❌ |
| 插件系统 | 发展中 | ✅ Wasm | ✅ 最丰富 | ⚠️ 有限 |
| 打包能力 | ✅(通过 Rolldown) | ❌ | ❌ | ✅ |
| 框架集成 | Vite 8、Rolldown | Next.js、Parcel | Webpack、Rollup | Vite (dev)、Angular |
| npm 周下载量 | ~1030 万(parser) | ~3950 万 | ~6.5 亿 | ~2.37 亿 |
| 维护模式 | VoidZero/Cloudflare | 团队 + 社区赞助 | 3 人 + 机构赞助 | 单人 BDFL |
| 版本状态 | 各组件独立版本 | v1.15+ | v8.0+ | 仍 0.x |
与 SWC 的对比
| 维度 | OXC | SWC |
|---|---|---|
| 定位 | 模块化高性能工具集 | 综合性编译器平台 |
| Linter | ✅ Oxlint(50-100x faster) | ❌ 无对标产品 |
| Formatter | ✅ Oxfmt(30x faster) | ❌ 无对标产品 |
| 解析器速度 | ~3x SWC | 快 |
| 整体转换成熟度 | 仍在追赶 | 成熟稳定 |
| 插件生态 | 发展中(JS 插件 Alpha) | 已有成熟的 Wasm 插件生态 |
| 框架集成 | Vite/Rolldown 核心 | Next.js 核心 |
| 维护者 | Boshen Chen(VoidZero/Cloudflare) | Donny 강동윤 |
| 优势场景 | Linting、格式化、Vite 工作流 | 成熟框架(Next.js 等) |
何时选择 OXC
- 需要极速 Linting 替代 ESLint → Oxlint
- 需要极速格式化替代 Prettier → Oxfmt
- Vite 8 / Rolldown 项目 → 自动使用 OXC
- Rust 项目中的 JS 处理 → OXC crates
- 追求完整工具链统一 → OXC 全家桶
何时考虑替代方案
- 需要成熟的编译器插件生态 → Babel
- Next.js 项目 → SWC(默认集成)
- 需要打包器但不用 Vite → esbuild 或 Webpack
最佳实践
从 ESLint 迁移到 Oxlint
- 并行运行:先同时运行 ESLint 和 Oxlint,对比规则覆盖差异
- 规则映射:使用 Oxlint 的 ESLint 规则映射功能确认覆盖率
- 渐进替代:逐步关闭 ESLint 规则,确认 Oxlint 输出一致
- JS 插件:对于 ESLint 自定义规则,使用 Oxlint 的 JS 插件支持
- CI 集成:在 CI 中先用 Oxlint 加速,保留 ESLint 作为兜底
常见陷阱
- AST 形状差异:OXC 的 AST 形状与 Babel AST 存在差异,迁移自定义 Babel 插件时需注意
- 规则覆盖不完整:Oxlint 的 800+ 规则虽然多,但仍有一些 ESLint 社区规则未覆盖
- 格式化兼容性:Oxfmt 虽通过 Prettier 一致性测试,但某些极端格式可能有差异
- 版本碎片化:OXC 各组件独立版本(oxlint、oxfmt、oxc crates),需注意兼容性
- 类型感知 Linting 性能:启用类型感知规则会显著降低 lint 速度
生产环境推荐配置
{
"rules": {
"no-unused-vars": "error",
"no-debugger": "error",
"no-duplicate-case": "error",
"no-empty": "error",
"no-constant-condition": "warn",
"typescript/no-explicit-any": "warn",
"typescript/no-unused-vars": "error",
"react-hooks/rules-of-hooks": "error"
},
"categories": {
"correctness": "error",
"suspicious": "warn"
}
}技术局限与边界
已知限制
- 编译器成熟度:相比 SWC 和 Babel,OXC 的转换器仍在追赶成熟度
- 插件生态年轻:JS 插件处于 Alpha 阶段,约 80% 的 ESLint 插件可迁移
- 公共 API 不稳定:OXC Rust crates 的 API 仍在快速变化
- 社区规模:相比 Babel 和 SWC,OXC 的用户基数和生态规模较小
- 文档完善度:文档不如 Babel 和 SWC 完善,学习曲线较陡
- 格式兼容性:Oxfmt 虽然通过一致性测试,但与 Prettier 的某些边缘行为可能有差异
不适用场景
- 深度依赖 Babel 插件生态的项目 → 继续使用 Babel
- Next.js 项目 → 使用内置 SWC
- 需要稳定公共 API 的 Rust 集成 → 等待 OXC 1.0
- 需要最早支持 TC39 提案 → Babel
- 对 Babel AST 兼容性有严格要求 → SWC
Q3 2026 路线图
| 方向 | 负责人 | 内容 |
|---|---|---|
| Vite 7→8 迁移阻塞项 | Dunqing | ECMA 装饰器、minifier 属性混淆、WTF-8 修复 |
| 3x 解析器性能 | overlookmotel | 基于 SIMD 的 JS 词法分析 |
| TypeScript 7 类型感知 | camc314 | 同步 tsgo 实现,解决性能和内存问题 |
| Oxfmt 完全 Rust 化 | leaysgur | 去除 Prettier 依赖,全 Rust 原生 |
| OXC 走向 1.0 | camc314 | 稳定 API 和 AST 形状 |
| Rust 版 React Compiler | Boshen | 去除 Babel AST 中间层,性能提升 2x |
学习资源
- 官方文档:https://oxc.rs
- Oxlint 文档:https://oxc.rs/docs/guide/usage/linter
- Oxfmt 文档:https://oxc.rs/docs/guide/usage/formatter
- OXC 博客:https://oxc.rs/blog
- GitHub 仓库:https://github.com/oxc-project/oxc
- Q3 2026 路线图:https://github.com/oxc-project/oxc/issues/23976
- VoidZero 博客:https://voidzero.dev/posts
- Oxlint 1.0 发布公告:https://voidzero.dev/posts/announcing-oxlint-1-stable
- Oxfmt Beta 公告:https://oxc.rs/blog/2026-02-24-oxfmt-beta
- Oxlint JS 插件 Alpha:https://oxc.rs/blog/2026-03-11-oxlint-js-plugins-alpha.html
- Discord:OXC 官方 Discord 社区
2026 年现状
最新版本
- oxlint v1.73.0(2026 年 7 月)
- oxfmt v0.58.0(2026 年 6 月)
- oxc crates v0.139.0
发展趋势
- 前端工具链新基础设施:OXC 正在成为 Vite 生态的核心编译基础设施,影响力持续扩大
- Cloudflare backing:VoidZero 被 Cloudflare 收购后,OXC 获得了强大的组织支撑
- 工具链统一趋势:越来越多的开发者倾向于使用 OXC 全家桶替代分散的 ESLint + Prettier + Babel
- Rust 工具链成熟:从解析器、转换器到 Linter、Formatter,OXC 的全栈 Rust 方案日趋成熟
- 企业采用加速:Shopify、Airbnb、Mercedes-Benz、ByteDance 等大型企业已采用 OXC
2025-2026 重要里程碑
| 时间 | 里程碑 |
|---|---|
| 2025 年 3 月 | Oxlint Beta 发布 |
| 2025 年 6 月 | Oxlint 1.0 稳定版(500+ 规则) |
| 2025 年 6 月 | VoidZero 被 Cloudflare 收购 |
| 2025 年 11 月 | Oxfmt Alpha |
| 2025 年 12 月 | Vite 8 Beta(集成 Rolldown) |
| 2025 年 12 月 | 类型感知 Linting Alpha(基于 tsgo) |
| 2026 年 2 月 | Oxfmt Beta |
| 2026 年 3 月 | Vite 8.0 稳定版发布 |
| 2026 年 3 月 | Oxlint JS 插件 Alpha(~80% ESLint 可迁移) |
| 2026 年 6 月 | oxlint v1.72.0 / oxfmt v0.56.0 |
| 2026 年 7 月 | oxlint v1.73.0 / oxfmt v0.58.0 |
社区活跃度
| 指标 | 数值 |
|---|---|
| GitHub Stars | ~21,900 |
| 总提交数 | 18,881+ |
| 贡献者 | 200+ |
| oxc-parser npm 周下载量 | ~1030 万 |
| oxlint npm 周下载量 | ~670 万 |
| 发布频率 | 每周多次 |
| 组织支撑 | VoidZero / Cloudflare |
总体评价
OXC 是 2025-2026 年前端工具链领域最引人注目的新兴力量。它通过 Rust 实现了全面超越现有工具的性能,并以模块化设计提供了灵活的工具链组合能力。Oxlint 1.0 的稳定发布和 Oxfmt 的快速发展表明,OXC 正在从"编译器引擎"进化为"完整工具链平台"。VoidZero 被 Cloudflare 收购为项目提供了长期保障,而 Vite 8 的采用则将 OXC 推向了数百万前端开发者的日常工作流中。
OXC 的核心竞争力在于性能和统一性——用一套 Rust 工具链替代多个分散的 JavaScript 工具,同时获得数量级的速度提升。对于新项目,OXC 全家桶(Oxlint + Oxfmt + Rolldown)是值得认真考虑的选择;对于现有项目,渐进式从 ESLint → Oxlint、Prettier → Oxfmt 迁移可以立即获得显著的效率提升。