██████╗ ██████╗ ███╗   ██╗███████╗██╗ ██████╗ 
██╔════╝██╔═══██╗████╗  ██║██╔════╝██║██╔════╝ 
██║     ██║   ██║██╔██╗ ██║█████╗  ██║██║  ███╗
██║     ██║   ██║██║╚██╗██║██╔══╝  ██║██║   ██║
╚██████╗╚██████╔╝██║ ╚████║██║     ██║╚██████╔╝
 ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝╚═╝     ╚═╝ ╚═════╝

Zero configuration.

The standard and ts-standard experience, across Oxlint, Oxfmt, Biome, ESLint and Prettier.

$ npx @jannael/config

Everything configured with one command

Linter, formatter, editor configuration and git hooks.

Automatic Configuration

Generates config files for ESLint, Prettier, Biome and more with a single command.

Multiple Linters

Support for ESLint, Oxlint and Biome. Choose the one that fits your project.

Multiple Formatters

Support for Prettier, Oxfmt and Biome. Optimized configuration for each one.

Modern Frameworks

Native support for React, Vue, Astro, Next.js and more.

Tailwind CSS

Automatic Tailwind plugin configuration for ESLint and Prettier with class sorting.

Git Hooks

Optional integration with Husky and lint-staged to run checks before each commit.

VSCode Settings

Automatically configures .vscode/settings.json with formatOnSave.

Ready Scripts

Adds lint, lint:fix, fmt and fmt:check scripts to your package.json.

Consistent by default,
compatible everywhere

All formatters share the same opinionated style, and we support the frameworks you love.

Formatting Style

No semicolons semi: false
Single quotes quoteStyle: 'single'
Print width 150 characters
Indent style Spaces
Indent width 2 spaces

Applied consistently across Prettier, Biome and Oxfmt.

Supported Technologies

JavaScript
TypeScript
React
React Native
Next.js
Vue
Solid
Astro
Lit
Tailwind CSS
HTML
J

Why I built Config

by Jannael

I was tired of starting a project with one linter and formatter, only to realize halfway through that the tech stack I chose wasn't fully supported. Then came the migration: uninstall, reinstall, reconfigure, debug the new config, repeat.

Even when you stick with one tool, the setup is painful. You have to search for the right ESLint plugins, figure out which parser you need, install everything, write the config file, then do it all over again for your formatter. Every. Single. Project.

Sure, you could ask an AI to generate the config for you. But that burns tokens, and you still need to verify it's correct, install the dependencies, and tweak it to your liking. It's not a real solution, it's just shifting the problem.

Config solves this by letting you pick your tech stack upfront and generating a complete, compatible configuration in one command. No migrations, no plugin hunting, no wasted tokens.