CodeVetter
← All unpacks
CodeVetter · Repo Unpack evidence

oxc-project/oxc

Scanned commit 7f65b757df dated 2026-10-02 — last upstream commit. Generated by codevetter 1.15.0 on 2026-10-02.

github.com/oxc-project/oxc ↗ · 4000 files · 12.6 MB · scan capped

[![MIT licensed][license-badge]][license-url] [![Build Status][ci-badge]][ci-url] [![Code Coverage][code-coverage-badge]][code-coverage-url] [![Discord chat][discord-badge]][discord-url] [![Playground][playground-badge]][playground-url] [![Website][website-bad

Deep analysis by cli:codex via the codex CLI on 2026-10-02 (394s) — every claim below links to its cited source files. Source inspection; upstream code and tests were not executed.

Overview

Oxc is a modular Rust toolchain for JavaScript and TypeScript, serving developers through Oxlint and Oxfmt and tooling authors through compiler crates and Node.js bindings. Its implementations share arena-backed ASTs, semantic analysis, diagnostics, and code generation, while application layers add file discovery, configuration, parallel processing, and editor integration. This brief examines commit 7f65b757df7c3225320d8f7e051e64873f80f988 through bounded source inspection; it does not establish runtime correctness or measured performance.

System map

The repository combines reusable compiler components with native applications and Node.js bindings. Runtime boundaries differ between Rust-only CLIs, NAPI callbacks, the stdio language server, and the optional tsgolint subprocess. Application persistence is visible as source-file rewrites and a JSON suppression baseline. Build and verification definitions span Cargo, pnpm, Just, and GitHub Actions.

Feature catalog

The inspected public surfaces cover linting, formatting, parsing, transformation, minification, and editor integration. Application features depend on the execution boundary: Node callbacks enable capabilities unavailable in the Rust-only formatter CLI. Framework and ecosystem names generally describe supported inputs or lint plugins, rather than a product frontend. This catalog covers the investigated interfaces and does not claim exhaustive enumeration of every rule or option.

Data flow

Source text enters through filesystem reads or explicit binding arguments and becomes arena-owned compiler data. Configuration resolution selects rule state or a typed formatting strategy before processing. Node parser output crosses an additional coordinate and serialization boundary. Filesystem outputs and suppression baselines are distinct from temporary allocator, module-graph, and directive state.

Behavior traces

The following traces were reconstructed by reading callers and callees, without execution. They follow parser API use, lint startup and fixes, suppression persistence, formatter startup and writes, and minification. Branch conditions matter: parser recovery differs from lint rejection, configuration can fail during streaming, and type-check-only alters the lint pipeline.

Testing signals

Tests and CI were inspected, not executed; test existence is not a passing result. Rust tests, Insta snapshots, Vitest bindings tests, formatter fixture harnesses, and external conformance tasks cover different boundaries. The inspected definitions expose important limits, including recorded idempotency failures and platform jobs that run only on main. This bounded inspection does not establish complete coverage or identify every untested path.

Risk map

These are source-observed trust boundaries and correctness hazards, not confirmed vulnerabilities. The most consequential inspected paths execute JavaScript configuration, select an external executable, transfer raw memory, or rewrite user files. Compiler-stage ordering and streaming configuration introduce additional coupling. Testing and documentation limits should be accounted for before making broader safety or correctness claims.

Extension points

Extensions attach to explicit Rust traits, generated registries, callback interfaces, and dispatch tables. Native lint rules and JavaScript lint plugins enter through different mechanisms. Formatter integration owns language routing and host services, while language crates implement formatting. Compiler hooks and filesystem abstractions provide composition points without requiring changes to application startup.

Contributor handoff

Use the pinned implementation and nearest package guidance to choose a narrow edit boundary. Tests and CI were inspected, not executed, and the inventory remains bounded rather than exhaustive. Future verification should target the changed runtime surface before broad workspace checks. Generated outputs, formatter policy, and Rust-versus-Node feature differences are recurring traps.

Languages

LanguageFilesShare of source
JavaScript415047%
Rust246328%
TypeScript204223%
JSON980docs/config
Markdown620docs/config
YAML83docs/config
TOML811%
Sass571%

Start reading here

Probable source entrypoint: Cargo.toml — inferred from the directory tree and manifest, not the upstream docs.

Source roots

crates/ (1925 files) packages/ (7 files)

Repository structure

Top-level pathFiles
crates/1925
apps/1470
tasks/380
napi/102
.github/54
npm/23
packages/7
.agents/4

Docs found: AGENTS.mdARCHITECTURE.mdCONTRIBUTING.mdREADME.md

Package

Cargo.toml — , 0 declared dependencies.

CI & config entrypoints

Structural health signals

Average score 6.2/10 across 96 analyzed source files; 55 hotspots surfaced.

These are deterministic review leads — size, churn, and structural signals — not proof of a bug in this project.

Recent history