An opinionated, zero-config ESLint wrapper for JavaScript and TypeScript with great defaults and automatic fixes.
XO is an opinionated linter for JavaScript and TypeScript that wraps ESLint with a curated set of rules and plugins. It enforces consistent code style with minimal configuration, automatically fixes issues, and includes support for modern frameworks and tools. The goal is to eliminate style debates and simplify linting setup in development workflows.
JavaScript and TypeScript developers, especially those working in teams who want to enforce code consistency without spending time configuring ESLint. It's also suitable for projects adopting modern frameworks like React, Vue, Svelte, or Astro.
Developers choose XO because it offers a batteries-included linting experience with zero initial configuration, automatic fixes, and seamless integration with popular tools. Its opinionated defaults reduce setup time and decision-making, while remaining flexible enough to customize when needed.
❤️ JavaScript/TypeScript linter (ESLint wrapper) with great defaults
Works immediately with curated rules like tab indentation and semicolons, eliminating the need for initial ESLint configuration and reducing team debates, as highlighted in the 'Zero-config, but configurable when needed' philosophy.
Corrects many common issues automatically with the --fix flag, streamlining development workflows and reducing manual code cleanup, as demonstrated in the CLI options.
Includes useful ESLint plugins like unicorn and import-x out of the box, providing comprehensive linting coverage without additional installation or setup, as listed in the 'Highlights' section.
Lints TypeScript files by default with automatic tsconfig.json handling, simplifying TypeScript project integration without manual configuration, as detailed in the 'TypeScript' section.
Requires projects to use ESM modules, which can be a barrier for legacy CommonJS codebases or teams not ready to migrate, as explicitly stated in the README: 'XO requires your project to be ESM.'
Enforces specific code styles like tab indentation and semicolons by default, which may not align with all team preferences and requires configuration overrides, adding friction for those with differing conventions.
While zero-config for basics, customizing beyond defaults involves navigating ESLint's flat config system, which can be complex and time-consuming, as noted in the 'Config' section's detailed options.
Find and fix problems in your JavaScript code.
expose yourself
A PHP parser written in PHP
:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.