❤️ JavaScript/TypeScript linter (ESLint wrapper) with great defaults
8k
Stars
306
Forks
3
Open issues
30
Contributors
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.
Inferred from signals mentioned in the README (tests, CI, type safety) — not a review of the actual code.
AI's overall editorial judgment — not an average of the bars above, can weigh other factors too.
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.
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 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.
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.
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.
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.
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.
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
- 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.
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.
Newsletter
Get analyses like this every Monday
Free weekly digest of the most interesting open-source discoveries.
Languages
Information
- Language
- TypeScript
- License
- MIT
- Last updated
- 4d ago
- Created
- 133mo ago
- Analyzed with
- anthropic/claude-haiku-4-5
Stars over time
Contributors over time
Top 100 contributors only — repos with more will plateau at 100.
Open issues
Open pull requests
No open pull requests.
Top contributors
Recent releases
Similar repos
| Repository | Stars | Week Δ | Language | Score | Updated |
|---|---|---|---|---|---|
|
|
8k | +6 | TypeScript | 8/10 | 4d ago |
|
|
21.9k | — | Rust | 9/10 | 6h ago |
|
|
11.5k | — | TypeScript | 8/10 | 5mo ago |
|
|
9.6k | — | JavaScript | 8/10 | 4d ago |
|
|
1.2k | — | JavaScript | 8/10 | 6d ago |
|
|
5.2k | — | JavaScript | 9/10 | 13h ago |
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 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 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.
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.
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.
