opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

Stop hand-rolling Oxlint, Oxfmt, and TypeScript configs
GitHub RepoImpressions4

Project Description

View on GitHub

Stop Copy-Pasting Your Config Files: Meet @epic-web/config

You know the drill: every new project starts with the same ritual. You dig through your old repos, copy a tsconfig.json, paste in your formatter settings, and hope you remembered all the right ignore patterns. It's not hard work, but it's exactly the kind of busywork that eats your afternoon. @epic-web/config from the Epic Web team is here to end that cycle—it's a single package that bundles reasonable defaults for Oxlint, Oxfmt, and TypeScript so you can get back to writing actual code.

What It Does

This package is a collection of shared configuration presets, published on npm as @epic-web/config. It currently ships defaults for three tools:

  • Oxlint — the linter
  • Oxfmt — the formatter (a Prettier alternative from the Oxc project)
  • TypeScript — the compiler, via a shared tsconfig base

The philosophy is straightforward: the authors made assumptions about how you prefer to develop software, baked those into configs, and gave you a starting point that's genuinely useful out of the box. You're not locked in—the README is clear that you configure everything yourself, but these presets are meant to be a solid foundation you can extend.

The Oxfmt preset is particularly clever. It's a plain .js module (the package uses "type": "module"), so when you import it in your own oxfmt.config.ts, Node doesn't need to strip TypeScript from files under node_modules. That's a small detail, but it's the kind of thing that prevents weird runtime errors.

Why It's Cool

The real value here isn't the configs themselves—it's the decisions behind them. The README links to a set of decision docs, which means you're not just getting a black box of settings. You can learn why they chose tabs over spaces, or why they set printWidth to 80.

Here's what stands out:

  • It embraces the new guard. Oxfmt and Oxlint are the Rust-based tools from the Oxc project, which are dramatically faster than their JavaScript predecessors. This package is betting on that future rather than maintaining legacy configs for Prettier and ESLint.

  • The formatter preset is thoughtful. It sets tabs (spaces only in package.json), no semicolons, single quotes, and trailingComma: "all". It even handles Tailwind class sorting natively via sortTailwindcss and includes MDX overrides for proseWrap and htmlWhitespaceSensitivity. That's attention to detail you'd normally have to piece together from multiple plugins.

  • It omits what doesn't work. Oxfmt doesn't support insertPragma or requirePragma, so those options are simply left out. No dead config, no confusing errors.

  • Sensible ignore patterns included. The preset covers common build, cache, Playwright, Prisma, and lockfile paths used across Epic projects. You can extend them, but you probably won't need to.

  • Spreading is the override mechanism. Since Oxfmt has no extends field, the preset is designed to be spread into your own config, with any top-level option set afterward. It's a simple, predictable pattern.

  • TypeScript setup is minimal. You create a tsconfig.json that extends the shared base, add your own path aliases, and create a reset.d.ts file. That's it.

How to Try It

Getting started is a two-step process. First, install the package:

npm install @epic-web/config

Then create an oxfmt.config.ts in your project root. You'll also need to install Oxfmt itself, since it's listed as a peer dependency:

import epicOxfmt from '@epic-web/config/oxfmt'
import { defineConfig } from 'oxfmt'

export default defineConfig({
	...epicOxfmt,
	printWidth: 100,
})

That example shows how to override the default printWidth of 80. If you want to tweak ignorePatterns, just spread the preset's patterns and append your own paths.

Add format scripts to your package.json:

{
	"scripts": {
		"format": "oxfmt",
		"format:check": "oxfmt --check"
	}
}

For TypeScript, create a tsconfig.json:

{
	"extends": ["@epic-web/config/typescript"],
	"include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
	"compilerOptions": {
		"paths": {
			"#app/*": ["./app/*"],
			"#tests/*": ["./tests/*"]
		}
	}
}

And a reset.d.ts file:

import '@epic-web/config/reset.d.ts'

If you want to go deeper, you can check out the repository and read the decision docs to understand the reasoning behind each choice.

Final Thoughts

This package isn't for everyone. If you have strong opinions about your formatter settings and enjoy fine-tuning every option, you'll probably want to keep doing that. But if you're tired of maintaining config files across a dozen projects and just want something that works, @epic-web/config is a solid choice. It's opinionated, but those opinions are documented and defensible. And since it's built around the fast, modern Oxc tooling, you're not just saving setup time—you're setting up for faster builds and linting too. Give it a shot on your next side project and see if it doesn't feel like one less thing to worry about.


Follow @githubprojects for more developer tools and open source projects.

Back to Projects
Project ID: 08468136-e9aa-4e31-bbac-69b6808408aeLast updated: August 11, 2026 at 02:44 AM