Lightning-fast JavaScript Standard Style linting and formatting β‘
A drop-in replacement for ESLint + Prettier built on the Rust-based oxc toolchain. Roughly 50β100Γ faster than the JavaScript equivalents, with a curated preset for TypeScript and React.
Requirements: Node.js
^20.19.0 || >=22.12.0, matching the bundled oxlint and oxfmt requirements. Development requires Node 22.12+ (22.x), Node 24.x, or Node 26+; Vitest 5 does not support Node 20. For Deno projects, you also need Node alongside Deno becauseoxlintandoxfmtare invoked throughnpx. The CLI itself runs from any package managerβsdlx-style runner.
Replace ESLint/Prettier in your project with one command β works with npm, pnpm, yarn, and bun:
npx oxc-standard # npm
pnpm dlx oxc-standard # pnpm
yarn dlx oxc-standard # yarn (berry)
bunx oxc-standard # bun
The setup auto-detects your package manager (via lockfile, then npm_config_user_agent, then the packageManager field in package.json) and uses the right install/uninstall commands. It then:
oxlint and oxfmt using the presetβs tested version ranges.oxlintrc.json and .oxfmtrc.jsonlint script to package.json β run with npm run lint / pnpm lint / yarn lint / bun run lint.vscode/settings.json and .vscode/extensions.json for the oxc-vscode extensionDeno doesnβt ship a dlx-style runner, so use npx (Node must be installed alongside Deno):
npx oxc-standard --type=deno
The setup will:
deno.json[c] or .vscode/settings.json deno.enable).oxlintrc.json with Deno-specific globals and ignore patterns.oxfmtrc.json with Standard Style formattinglint task to deno.jsonThen run:
deno task lint
Paste this into any coding-agent chat (Copilot, Claude Code, Cursor, opencode, etc.) when you want it to migrate the current repository:
Set up oxc-standard in this project by following https://raw.githubusercontent.com/JohnDeved/ox-standard/main/README.md β auto-detect the package manager and project type, run the CLI non-interactively, then verify the lint script works.
Or, for agents that prefer running a single shell command, point them at the deterministic non-interactive form:
# Node project (auto-detects npm/pnpm/yarn/bun)
npx -y oxc-standard --yes --no-vscode
# Deno project
npx -y oxc-standard --yes --type=deno --no-vscode
The --yes flag auto-accepts every prompt (required for non-interactive shells) and --no-vscode skips writing .vscode/ files. Drop --no-vscode if you do want VSCode integration.
npx oxc-standard [options]
| Flag | Description |
|---|---|
-y, --yes |
Skip every confirmation prompt (CI / scripted use). |
-t, --type=<node\|deno> |
Skip auto-detection and force the project type. |
-n, --dry-run |
Preview every destructive action (file writes, deletes, package installs) without touching anything. Implies --yes. |
--no-vscode |
Skip the .vscode/ integration step. |
-h, --help |
Print the help text and exit. |
Examples:
# Fully non-interactive Node setup (e.g. inside a CI job)
npx oxc-standard --yes --type=node --no-vscode
# Non-interactive Deno setup
npx oxc-standard --yes --type=deno
# Preview what setup would do without changing anything
npx oxc-standard --dry-run --type=node
oxlint and oxfmt are native Rust binaries shipped via npm.oxlint --fix . followed by oxfmt . (semicolon, not &&, so formatting still runs even if lint reports an unfixable issue).oxc-standard declares the supported oxlint and oxfmt versions in both dependencies and peerDependencies, so the toolchain stays in sync with the rule set.oxc.oxc-vscode extension.For projects set up before this refresh, add env (and any required globals) to the existing .oxlintrc.json; setup deliberately leaves existing configs unchanged.
Override individual rules by extending the bundled config. Oxlint does not inherit env or globals through extends; the setup CLI copies them for you. In manually written configs, declare the environments your project uses:
// .oxlintrc.json
{
"extends": ["./node_modules/oxc-standard/.oxlintrc.json"],
"env": { "browser": true, "node": true },
"rules": {
"no-console": "warn",
},
}
Tweak formatting:
// .oxfmtrc.json
{
"singleQuote": true,
"semi": false,
"printWidth": 120,
"tabWidth": 2,
"trailingComma": "es5",
}
The setup writes:
.vscode/settings.json β sets oxc-vscode as the default formatter, enables format-on-save, enables auto-fix-on-save, and turns on the experimental oxfmt support..vscode/extensions.json β recommends oxc.oxc-vscode (and typescriptteam.native-preview).When you open the project, VSCode will offer to install the recommended extensions. Accept, and lint + format on save just works.
Skip this step entirely with --no-vscode.
Run npx oxc-standard and confirm the prompts. The script will:
.eslintrc*, eslint.config.*, .prettierrc*, prettier.config.*) and packages (eslint, prettier, common plugins/configs).oxc-standard..vscode/ (unless --no-vscode).A typical package.json diff after migration:
"scripts": {
- "lint": "eslint . --fix",
+ "lint": "oxlint --fix .; oxfmt ."
},
"devDependencies": {
- "eslint": "^9.0.0",
- "eslint-config-standard": "^17.0.0",
- "prettier": "^3.0.0",
+ "oxc-standard": "^1",
+ "oxfmt": "^0.67.0",
+ "oxlint": "^1.82.0"
}
The script only touches
scripts.lint. If you have a separatescripts.formatcallingprettier --write, youβll want to remove it manually βoxfmtalready runs as part oflint.
Prefer to skip the script? Pick the install command for your package manager:
npm install --save-dev oxc-standard
pnpm add --save-dev oxc-standard
yarn add --dev oxc-standard
bun add --dev oxc-standard
echo '{"extends": ["./node_modules/oxc-standard/.oxlintrc.json"], "env": {"browser": true, "node": true}}' > .oxlintrc.json
cp node_modules/oxc-standard/.oxfmtrc.json .oxfmtrc.json
npm pkg set scripts.lint="oxlint --fix .; oxfmt ."
Add a task to deno.json:
{
"tasks": {
"lint": "npx oxlint --fix . && npx oxfmt .",
},
}
Then run deno task lint.
The preset combines explicit rule settings with correctness: error and suspicious: warn across 6 plugins (unicorn, typescript, oxc, react, react_perf, import) plus core ESLint rules. Category defaults automatically include newly supported checks; the explicit settings tune their severity and select additional style/performance rules. The full configuration lives in .oxlintrc.json.
The September 2026 refresh targets oxlint 1.82.0 and oxfmt 0.67.0. It enables the import plugin (previously configured import rules were inactive), replaces typescript/no-empty-interface with typescript/no-empty-object-type, and adds the following explicit selections:
| Rules | Level | Purpose |
|---|---|---|
one-var (never), prefer-regex-literals |
Error | Separate variable declarations and use literal regular expressions when the pattern is static. |
no-implied-eval, unicorn/no-array-fill-with-reference-type, oxc/bad-match-all-arg |
Error | Catch string-based timer evaluation, shared references in array fills, and non-global matchAll expressions. |
prefer-arrow-callback, unicorn/explicit-timer-delay, unicorn/prefer-export-from, unicorn/prefer-single-call |
Warning | Prefer concise callbacks, explicit delays, direct re-exports, and combined collection updates. |
react/no-object-type-as-default-prop, react/no-unstable-nested-components |
Warning | Avoid unstable default props and components recreated during rendering. |
The React plugin also gains compiler-backed correctness checks through the existing category defaults, including render purity and state-update checks. No React Compiler build integration is required to lint these patterns.
The default setup stays syntax-only and does not install oxlint-tsgolint. Configured rules that require type information (such as typescript/prefer-nullish-coalescing and typescript/no-unnecessary-type-assertion) only run when type-aware linting is enabled. To opt in for a TypeScript project with a tsconfig.json:
npm install --save-dev oxlint-tsgolint@^7.0.2001
// .oxlintrc.json
{
"extends": ["./node_modules/oxc-standard/.oxlintrc.json"],
"env": { "browser": true, "node": true },
"options": { "typeAware": true },
}
See the upstream type-aware guide for setup details. The highlights below include both syntax-only and opt-in type-aware rules.
Found an issue or want to suggest improvements? Open an issue or submit a pull request.
Local development:
npm ci
npm run check # build + read-only lint/format checks + all tests
npm run lint # auto-fix lint issues and format the repository
CI runs the full check on Node 22, 24, and 26 across Linux and macOS, plus a smoke test of the setup CLI against npm, pnpm, yarn, bun, and Deno.
MIT Β© Johann Berger