npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

oxc-standard

v1.4.0

Published

Fast, comprehensive TypeScript/React linting with JavaScript Standard Style philosophy using oxlint

Readme

oxc-standard

Lightning-fast JavaScript Standard Style linting and formatting

CI License: MIT

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.


Contents


🚀 Quick Setup

Requirements: Node.js (a recent LTS — oxlint and oxfmt need at least Node 18). For Deno projects, you also need Node alongside Deno because oxlint and oxfmt are invoked through npx. The CLI itself runs from any package manager's dlx-style runner.

Node.js Projects

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:

  • ✅ Removes ESLint, Prettier, and related packages and configs
  • ✅ Installs oxlint and oxfmt pinned to known-good versions
  • ✅ Writes .oxlintrc.json and .oxfmtrc.json
  • ✅ Adds a lint script to package.json — run with npm run lint / pnpm lint / yarn lint / bun run lint
  • ✅ Configures .vscode/settings.json and .vscode/extensions.json for the oxc-vscode extension

Deno Projects

Deno doesn't ship a dlx-style runner, so use npx (Node must be installed alongside Deno):

npx oxc-standard --type=deno

The setup will:

  • ✅ Detect your Deno project (via deno.json[c] or .vscode/settings.json deno.enable)
  • ✅ Write .oxlintrc.json with Deno-specific globals and ignore patterns
  • ✅ Write .oxfmtrc.json with Standard Style formatting
  • ✅ Add a lint task to deno.json
  • ✅ Configure VSCode integration

Then run:

deno task lint

For AI Agents

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.


📋 CLI Reference

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

✨ What You Get

  • Sub-second linting and formattingoxlint and oxfmt are native Rust binaries shipped via npm.
  • One command for both — the generated lint script runs oxlint --fix . followed by oxfmt . (semicolon, not &&, so formatting still runs even if lint reports an unfixable issue).
  • Standard Style enforced — no semicolons, single quotes, 2-space indent, strict equality, modern ES6+, React-hooks correctness, TypeScript consistency.
  • Pinned tool versionsoxc-standard declares the supported oxlint and oxfmt versions in both dependencies and peerDependencies, so the toolchain stays in sync with the rule set.
  • VSCode integration on by default — auto-fix and format-on-save via the official oxc.oxc-vscode extension.

🛠 Customization

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",
}

💡 VSCode Integration

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.


🆚 Migrating from ESLint/Prettier

Run npx oxc-standard and confirm the prompts. The script will:

  1. Detect existing ESLint/Prettier configs (.eslintrc*, eslint.config.*, .prettierrc*, prettier.config.*) and packages (eslint, prettier, common plugins/configs).
  2. Ask before deleting configs.
  3. Uninstall the legacy packages with your package manager.
  4. Install and configure oxc-standard.
  5. Update .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 separate scripts.format calling prettier --write, you'll want to remove it manually — oxfmt already runs as part of lint.


📖 Manual Installation

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

Node.js

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 ."

Deno

Add a task to deno.json:

{
  "tasks": {
    "lint": "npx oxlint --fix . && npx oxfmt .",
  },
}

Then run deno task lint.


🔧 Rule Reference

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.

  • eqeqeq - Strict equality (===)
  • curly - Consistent braces
  • no-var - Use const/let
  • space-infix-ops - Proper spacing
  • yoda - Readable comparisons
  • no-constructor-return - No return values from constructors
  • no-self-compare - Flags x === x tautologies
  • no-else-return - Removes redundant else after return
  • prefer-template - Template literals
  • prefer-destructuring - Modern patterns
  • prefer-object-spread - Clean objects
  • no-duplicate-imports - Organized imports
  • rules-of-hooks - Proper hooks usage
  • jsx-curly-brace-presence - Clean JSX
  • self-closing-comp - Concise components
  • jsx-no-duplicate-props - Catches duplicate prop bugs
  • void-dom-elements-no-children - No children on <img>, <br> etc.
  • no-danger (warn) - Flags dangerouslySetInnerHTML
  • jsx-no-constructed-context-values (warn) - Prevents needless re-renders
  • react_perf/jsx-no-jsx-as-prop (warn) - JSX in props causes re-renders
  • consistent-type-imports - Clean imports
  • array-type - Consistent syntax
  • prefer-as-const - Type assertions
  • prefer-optional-chain - a?.b over a && a.b
  • prefer-nullish-coalescing - ?? over || for null checks
  • no-unnecessary-qualifier - Removes redundant namespace qualifiers
  • no-useless-empty-export - Removes redundant export {}
  • no-duplicate-enum-values / no-mixed-enums - Enum correctness guards
  • no-unsafe-declaration-merging - Class+interface merge safety
  • prefer-includes - Better array methods
  • prefer-string-starts-ends-with - Modern strings
  • throw-new-error - Proper errors
  • prefer-string-slice - .slice() over .substring()
  • prefer-node-protocol - 'node:fs' over 'fs'
  • prefer-negative-index - arr.at(-1) over arr[arr.length - 1]
  • prefer-structured-clone - structuredClone() over JSON round-trip
  • no-negated-condition - Flips negated if/ternary for readability
  • no-typeof-undefined - x === undefined over typeof x
  • no-lonely-if - Hoists lone if out of else
  • no-useless-promise-resolve-reject - Removes redundant wrappers
  • no-instanceof-array - Array.isArray() over instanceof Array
  • no-negation-in-equality-check - !!x === y instead of !x === y
  • require-array-join-separator - Explicit separator in .join()
  • no-accumulating-spread - Prevents O(n²) spread in loops
  • no-map-spread (warn) - Spread in map callbacks
  • import/no-cycle - Detects circular imports

🤝 Contributing

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.


📄 License

MIT © Johann Berger