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

@wearemothership/oxc-config

v1.0.0

Published

Shareable oxlint configuration for TypeScript and React (type-aware, stylistic formatting via jsPlugins)

Readme

@wearemothership/oxc-config

Shareable oxlint configuration for TypeScript and React projects.

Formatting stays on @stylistic/eslint-plugin via oxlint JS plugins (keeps Stroustrup braces). Oxfmt is deferred until it supports a brace-style option — oxfmt always emits 1TBS today.

Features

  • Type-aware TypeScript via oxlint-tsgolint (options.typeAware: true) — requires TypeScript 7+ (see below)
  • Native plugins for core, TypeScript, promise, React (hooks / refresh), jsx-a11y, and import
  • Stylistic formatting through @stylistic recommended plus project overrides (tabs, 150 columns, double quotes, semis, no trailing commas, Stroustrup)
  • Composable base, react, importConfig, and storybook layers
  • Storybook opt-in via eslint-plugin-storybook JS plugin

Installation

npm install --save-dev @wearemothership/oxc-config oxlint oxlint-tsgolint typescript @stylistic/eslint-plugin

For Storybook projects, also install eslint-plugin-storybook.

Peer dependencies are listed in package.json.

Why TypeScript 7?

This config enables type-aware linting by default (options.typeAware: true). That path runs through oxlint-tsgolint, which embeds typescript-go (TypeScript 7) — it does not load your installed typescript package. Oxlint still documents TypeScript 7.0+ as required for type-aware mode (tsconfig / language semantics must match what the engine understands).

The typescript: ^7 peer keeps the project’s tsc and type-aware lint on the same major so diagnostics and supported tsconfig options stay aligned. Staying on TypeScript 5 while using this config is unsupported for type-aware runs.

Usage

Oxlint’s extends only merges rules, plugins, and overrides — not jsPlugins, options, env, or ignorePatterns. Prefer passing a composed config object as the root export (or use the exported compose helper).

React app (default)

import config from "@wearemothership/oxc-config";
import { defineConfig } from "oxlint";

export default defineConfig(config);

With Storybook

import config, { compose, storybook } from "@wearemothership/oxc-config";
import { defineConfig } from "oxlint";

export default defineConfig(compose(config, storybook));

With import rules

import config, { compose, importConfig } from "@wearemothership/oxc-config";
import { defineConfig } from "oxlint";

export default defineConfig(compose(config, importConfig));

Unresolved imports are not checked by oxlint (import/no-unresolved does not exist). Use tsc / type-aware lint for TypeScript, and the bundler or runtime for plain JavaScript.

Non-React package

import { base } from "@wearemothership/oxc-config";
import { defineConfig } from "oxlint";

export default defineConfig(base);

Formatting

Run autofixes (includes stylistic):

oxlint --fix

Suggested scripts:

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

Rule coverage vs the old ESLint config

Native oxlint plugins have no configs.recommended to spread. Enabling a plugin makes its rules available; only the correctness category runs by default. This package:

  • Spreads @stylistic recommended (JS plugin) then applies project overrides
  • Lists promise recommended rules that are not correctness (plus the previous overrides)
  • Enables react/rules-of-hooks explicitly (pedantic in oxlint)
  • Relies on correctness for most of eslint / typescript / jsx-a11y recommended coverage

That is narrower than the old js / typescript-eslint recommended spreads. Consumers can opt into more with e.g. categories: { suspicious: "warn" } in their own config.

Exports

| Export | Contents | |--------|----------| | default | base + react | | base | Ignores, browser env, type-aware options, promise, TypeScript, stylistic | | react | Native react + jsx-a11y | | importConfig | Native import rules (no unresolved-import check) | | storybook | eslint-plugin-storybook recommended (jsPlugins) | | compose | Merge layers (plugins / jsPlugins / rules / overrides / options / …) |

Subpath imports: @wearemothership/oxc-config/base, /react, /import, /storybook.

Style rules

Enforced via @stylistic (same intent as the previous ESLint config):

  • Indentation: tabs
  • Line length: 150
  • Quotes: double
  • Semicolons: always
  • Trailing commas: never
  • Brace style: Stroustrup
  • Arrow parens: always

Ignored paths

  • dist/
  • public/

Development

npm test   # lint this package with its own config, fixture smoke tests, and typecheck

Run npm test before publishing.

Oxfmt

Not included. Oxfmt cannot disable 1TBS brace layout; adopting it would fight Stroustrup. Revisit when oxfmt gains a brace-style option.

License

MIT © Mothership