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 113-rule preset for TypeScript and React.
Requirements: Node.js (a recent LTS β oxlint and oxfmt need at least Node 18). For Deno projects, you also need Node alongside Deno because
oxlintandoxfmtare 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 pinned to known-good versions.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.Override individual rules by extending the bundled config:
// .oxlintrc.json
{
"extends": ["./node_modules/oxc-standard/.oxlintrc.json"],
"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.48.0",
+ "oxlint": "^1.63.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"]}' > .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.
113 carefully selected rules across 5 oxlint plugins (unicorn, typescript, oxc, react, react_perf). The full list lives in .oxlintrc.json; the highlights are below.
Found an issue or want to suggest improvements? Open an issue or submit a pull request.
Local development:
npm install
npm run build # tsc β dist/
npm test # vitest
npm run lint # dogfood: lint this repo with oxlint+oxfmt
CI runs the full test suite on Node 20 and 22 across Linux and macOS, plus a smoke test of the setup CLI against npm, pnpm, yarn, bun, and Deno.
MIT Β© Johann Berger