ESLint 33초 걸리던 작업을 0.6초에 — Oxc가 JS 도구 생태계를 Rust로 통합하고 있다

Oxc 자바스크립트 툴체인

자바스크립트 프로젝트 하나 세팅하려면 설치할 게 한두 개가 아니에요. 린팅에 ESLint, 포맷팅에 Prettier, 트랜스파일링에 Babel이나 SWC, 번들링에 Webpack이나 Vite. 각각 다른 팀이 다른 언어로 만든 도구들을 조합해서 쓰다 보니 설정 파일만 여러 개, 플러그인 간 버전 충돌, 답답한 빌드 속도.

Oxc(The JavaScript Oxidation Compiler)는 이 파편화된 생태계를 Rust 하나로 통합하겠다는 프로젝트예요.

Vite 만든 Evan You가 만드는 회사에서 나왔다

Oxc는 VoidZero라는 회사에서 개발하고 있어요. VoidZero는 Vite의 창시자 Evan You가 설립한 자바스크립트 도구 전문 회사인데, Vite뿐 아니라 Vitest, Rolldown, Oxc까지 자바스크립트 생태계의 핵심 인프라를 통합적으로 관리하고 있어요. Shopify, OpenAI, Cloudflare, Linear 같은 회사들이 이미 VoidZero의 도구를 쓰고 있을 정도로 업계 신뢰가 있고요.

이름의 "Oxidation"은 Rust의 상징인 산화에서 따왔어요. 자바스크립트 도구를 Rust로 다시 만들겠다는 의지가 담긴 거죠.

기존에도 SWC(트랜스파일링)나 Lightning CSS(CSS 처리) 같은 Rust 기반 도구가 있었는데, 각각 하나의 역할에 특화돼 있었어요. Oxc는 한 발 더 나아가서 파서, 린터, 포맷터, 트랜스포머, 리졸버, 미니파이어까지 거의 모든 도구를 하나의 프로젝트 안에서 제공해요.

속도 차이가 좀 무서울 정도예요.

Oxlint — ESLint 33초를 0.6초로

Oxlint는 2025년 6월에 안정 버전(v1.0)이 나왔어요. 695개 이상의 규칙이 내장돼 있는데, ESLint 핵심 규칙은 물론이고 typescript-eslint, eslint-plugin-react, eslint-plugin-import, eslint-plugin-unicorn 등 인기 플러그인 규칙까지 포함하고 있어서 별도 플러그인 설치 없이도 바로 쓸 수 있어요.

설치하고 package.json에 스크립트 추가하면 끝이에요.

```bash bun add -D oxlint ```

```json { "scripts": { "lint": "oxlint", "lint:fix": "oxlint --fix" } } ```

그래서 실제로 얼마나 빠를까. 공식 벤치마크에 따르면 같은 코드베이스를 검사했을 때 ESLint이 약 33초 걸리는 작업을 Oxlint는 멀티스레드 기준 약 0.6초 만에 끝내요. 55배. Airbnb에서는 12만 6천 개 이상의 파일을 Oxlint로 7초 만에 린팅하고 있대요. (ESLint로는 타임아웃이 걸릴 정도였다고.)

설정은 `.oxlintrc.json`이나 `oxlint.config.js`로 관리하고, ESLint flat config와 비슷한 방식이라 익숙할 거예요.

Oxlint의 강점 중 하나가 타입 인식 린팅(type-aware linting)이에요. TypeScript의 Go 포트인 tsgo를 활용해서 네이티브 수준의 타입 정보를 기반으로 린팅을 수행하는데, Promise를 await 없이 사용하는 실수(floating promise) 같은 고급 검사가 가능하죠. 여러 파일에 걸친 분석(multi-file analysis)도 기본 지원이고, 순환 의존성 검사 같은 프로젝트 전체 수준의 검사를 할 수 있어서 대규모 프로젝트에서 특히 유용해요.

에디터 지원도 VS Code, WebStorm, Zed에서 Language Server Protocol로 실시간 피드백을 받을 수 있어요.

Oxfmt — Prettier와 100% 호환되면서 30배 빠르다

Oxfmt는 2026년 2월에 베타가 나온 코드 포맷터예요. Prettier의 자바스크립트/타입스크립트 적합성 테스트를 100% 통과하기 때문에 기존 설정을 거의 그대로 유지하면서 전환할 수 있어요.

```bash bun add -D oxfmt ```

```json { "scripts": { "fmt": "oxfmt", "fmt:check": "oxfmt --check" } } ```

파일 몇 개인 작은 프로젝트에서는 체감이 안 되겠지만, 수천 개 파일을 포맷팅해야 하는 대규모 코드베이스의 CI에서는 몇 분이 몇 초로 줄어드는 경험을 하게 돼요.

Oxfmt가 특히 매력적인 건, Prettier에서는 별도 플러그인이 필요했던 기능들이 내장돼 있다는 점이에요. import 정렬, Tailwind CSS 클래스 정렬, package.json 필드 정렬, CSS-in-JS 포맷팅까지 추가 플러그인 없이 바로 사용 가능해요. `prettier-plugin-tailwindcss` 따로 설치하고 설정하던 번거로움이 사라지는 거죠.

지원 파일 형식도 넓어요. JS/TS는 당연하고 JSON, YAML, TOML, HTML, Vue, CSS, SCSS, Less, Markdown, MDX, GraphQL까지 돼요. Vue.js, Turborepo, Hugging Face, Sentry JavaScript SDK 같은 프로젝트들이 이미 Oxfmt를 쓰고 있고요.

ESLint/Prettier에서 전환하기

이미 ESLint를 쓰고 있으면 한 번에 교체하지 말고 점진적으로 가는 게 좋아요. `eslint-plugin-oxlint` 플러그인을 쓰면 Oxlint와 ESLint를 동시에 실행하되, 겹치는 규칙은 ESLint 쪽에서 자동으로 꺼져요.

```javascript import oxlint from "eslint-plugin-oxlint";

export default [ // 기존 ESLint 설정... oxlint.configs["flat/recommended"], ]; ```

실행 순서는 Oxlint 먼저, 나머지를 ESLint가 처리하는 방식이에요.

```json { "scripts": { "lint": "oxlint && eslint" } } ```

Oxlint가 처리할 수 있는 규칙이 점점 늘어나고 있어서, 시간이 지나면 ESLint를 완전히 걷어낼 수 있을 거예요. 기존 ESLint flat config를 변환하려면 `bunx oxlint-migrate eslint.config.js`를 쓰면 되고요.

Prettier에서 Oxfmt로의 전환은 더 간단해요. 적합성 테스트 100% 통과니까 대부분 패키지만 교체하면 끝. 기존 `.prettierrc` 설정도 대부분 호환돼요.

Vite 8에는 이미 들어가 있다

여담인데, Oxc를 단독으로 안 쓰더라도 Vite 8을 쓰면 이미 혜택을 받고 있어요.

2026년 3월에 나온 Vite 8은 JS/TS 변환과 코드 압축을 Oxc가, 번들링은 Rust 기반 Rolldown이, CSS 처리는 Lightning CSS가 담당해요. 빌드 파이프라인 전체가 Rust 기반으로 통일되면서 Rollup 대비 10~30배 빠른 빌드 속도를 달성했어요.

여기에 Oxlint와 Oxfmt까지 도입하면 린팅, 포맷팅, 트랜스파일링, 번들링, 압축까지 자바스크립트 빌드 파이프라인의 거의 모든 단계가 Rust 기반이 돼요. 예전에는 상상하기 힘들었던 일이에요.

SWC가 Babel을 대체하고, Lightning CSS가 PostCSS를 대체하기 시작한 것처럼, Oxc는 ESLint와 Prettier까지 아우르고 있어요. Oxlint는 이미 안정 버전이고, Oxfmt도 베타지만 호환성이 검증돼 있어서 도입 장벽이 낮아요. 대규모 프로젝트에서 린팅과 포맷팅에 답답함을 느꼈다면, 33초를 0.6초로 바꿔보는 경험을 한번 해볼 만해요.