xojs

xojs/xo

TypeScript MIT Dev Tools

❤️ JavaScript/TypeScript linter (ESLint wrapper) with great defaults

8k stars
306 forks
active
GitHub +6 / week

8k

Stars

306

Forks

3

Open issues

30

Contributors

v4.0.0 06 Jul 2026

AI Analysis

XO is an opinionated ESLint wrapper for JavaScript/TypeScript that provides sensible defaults and eliminates configuration overhead. It serves developers who want strict, readable code enforcement without maintaining ESLint configurations, and is particularly valuable for teams seeking consistency across projects. It's a specialized tool for linting workflows, not a general-purpose application.

Dev Tools Developer Tool Discovery value: 4/10
Documentation 8/10
Activity 9/10
Community 8/10
Code quality 7/10

Inferred from signals mentioned in the README (tests, CI, type safety) — not a review of the actual code.

Overall score 8/10

AI's overall editorial judgment — not an average of the bars above, can weigh other factors too.

eslint-wrapper code-linting typescript-support zero-config developer-productivity
Actively maintained Well documented MIT licensed Popular Niche/specialized use case Beginner friendly Production ready
Deep Analysis · Based on README and public signals
2w ago

XO: opinionated ESLint wrapper that eliminates linting config decisions for JS/TS projects

XO is a zero-config-by-default JavaScript and TypeScript linter built on top of ESLint. It bundles a curated set of ESLint plugins (unicorn, import-x, ava, n, and others), enforces a consistent code style, and removes the need to maintain an eslint.config.js. It targets developers and teams who want consistent, strict linting without bikeshedding over rule sets — particularly those in the Sindre Sorhus / avajs ecosystem. With ~8k stars and active maintenance through mid-2026, it occupies a stable niche in the JS tooling space.

Origin

Created in August 2015 by Sindre Sorhus, XO predates widespread ESLint flat config adoption. It has evolved alongside ESLint, recently migrating to flat config support and TypeScript-first defaults, reflecting the broader JS ecosystem shift.

Growth

Growth has been steady but modest — 7,983 stars over ~11 years suggests organic adoption rather than viral growth. It benefits from Sindre Sorhus's prolific npm presence: hundreds of his packages use XO as their code style, creating a self-reinforcing ecosystem. Recent star velocity (5 stars in 7 days) indicates a stable, mature project rather than an actively growing one.

In production

Real-world adoption is verifiable within the Sindre Sorhus ecosystem: hundreds of npm packages authored by the maintainer and contributors use XO as the standard code style. Adoption beyond this cohort is not well-documented in the README. The npm download count is not cited but the package has been in active use since 2015. Adoption appears concentrated in the open-source library authoring community rather than large enterprise codebases.

Code analysis
Architecture

Appears to wrap ESLint's flat config API, injecting a curated default configuration that includes multiple ESLint plugins. Likely exposes both a CLI and a programmatic API. Based on README, it supports ESM-only projects, Prettier integration, and framework-specific extensions (Vue, Svelte, Astro, React). Config extends ESLint's flat config objects with XO-specific enhancements.

Tests

A Codecov badge is present in the README linking to branch coverage, indicating automated test coverage tracking exists. Specific coverage percentage is not stated in the README excerpt.

Maintenance

Last push was 2026-06-19, roughly 6 days before the evaluation date — clearly actively maintained. The repository has been continuously updated for over 10 years. This is a slow-growth but actively maintained project, not a stagnant one.

Honest verdict

ADOPT IF: you want a zero-friction, opinionated linting setup for ESM JavaScript or TypeScript projects and are comfortable with the choices XO makes — especially if you already use packages in the Sindre Sorhus ecosystem. AVOID IF: your team needs fine-grained ESLint control, you are on CommonJS-only projects (XO requires ESM), or you are evaluating Rust-based toolchains for performance-critical CI pipelines. MONITOR IF: you are watching whether XO adapts to Biome/OXC gaining dominance, which could erode ESLint-based tool relevance over a 2–3 year horizon.

Independent dimensions

Mainstream potential

3/10

Technical importance

6/10

Adoption evidence

4/10

Risks
  • ESLint dependency risk: if the broader ecosystem shifts to Rust-based linters (Biome, OXC) as defaults, XO's value proposition as an ESLint wrapper diminishes proportionally.
  • ESM-only requirement excludes a portion of existing JS projects still using CommonJS, limiting adoption in legacy or mixed codebases.
  • Ecosystem concentration: adoption appears heavily tied to Sindre Sorhus's own packages; broader enterprise or framework community adoption is not well evidenced.
  • Plugin version coupling: bundling many ESLint plugins means XO must coordinate upstream updates across multiple dependencies, which can create lag or breakage windows.
  • Opinionated defaults are a feature but also a barrier — teams with existing ESLint configs or different style preferences face friction when onboarding.
Prediction

XO is likely to remain a stable, well-maintained tool for its niche for the next several years. Mainstream potential is constrained by ESLint's own trajectory and the rise of faster alternatives. It will not expand dramatically but is unlikely to be abandoned.

0 found this helpful

Newsletter

Get analyses like this every Monday

Free weekly digest of the most interesting open-source discoveries.

Languages

TypeScript
95.2%
JavaScript
4.8%

Information

Language
TypeScript
License
MIT
Last updated
4d ago
Created
133mo ago
Analyzed with
anthropic/claude-haiku-4-5

Stars over time

Loading…

Contributors over time

Top 100 contributors only — repos with more will plateau at 100.

Loading…

Similar repos

oxc-project

oxc-project/oxc

Oxc is a high-performance JavaScript and TypeScript toolchain written in Rust,...

21.9k Rust Dev Tools
jaredpalmer

jaredpalmer/tsdx

TSDX is a zero-config CLI for building and publishing TypeScript packages,...

11.5k TypeScript Dev Tools
facebook

facebook/stylex

StyleX is a JavaScript styling library for building optimized user interfaces,...

9.6k JavaScript Web Dev
QuiiBz

QuiiBz/sherif

Sherif is an opinionated, zero-config linter for TypeScript and JavaScript...

1.2k JavaScript Dev Tools
sindresorhus

sindresorhus/eslint-plugin-unicorn

eslint-plugin-unicorn provides over 300 ESLint rules targeting JavaScript and...

5.2k JavaScript Dev Tools
vs. alternatives
ESLint (direct)

XO is a wrapper around ESLint, not a competitor. It reduces configuration overhead but inherits ESLint's rule engine. Teams wanting full manual control over ESLint config would not choose XO.

Biome

Biome is a standalone linter/formatter written in Rust, significantly faster and without ESLint dependency. XO depends on ESLint's ecosystem and plugins; Biome trades plugin richness for speed and zero-config simplicity. Different tradeoffs.

oxc-project/oxc

OXC is a Rust-based JS toolchain with a linter component. Far faster than XO but ecosystem and plugin coverage is still maturing. XO has a much richer plugin set today via ESLint compatibility.

eslint-config-airbnb / shared configs

Shareable ESLint configs like Airbnb's achieve similar goals but still require the user to manage ESLint installation and config files. XO removes that layer and provides a unified CLI.

sindresorhus/eslint-plugin-unicorn

Unicorn is one of the plugins bundled inside XO. Using unicorn directly still requires assembling the rest of the ESLint config manually; XO packages it alongside other plugins for a one-stop experience.