Shared configuration presets for typescript tooling. One package per tool, or all of them in a single install.
The presets ship as TypeScript and JSON source. There is no build step, so use them from a runtime or tool that can load .ts files from node_modules (Bun, or the tool's own loader).
| Package | Version | What it configures |
|---|---|---|
@configg/oxc |
oxfmt (/fmt) and oxlint (/lint) presets |
|
@configg/tsconfig |
Strictest tsconfig presets for Bun and Vite |
|
@configg/bases (this repo's root) |
All of the above under one name, straight from packages/* |
Install only what you use, or install @configg/bases and import everything from it:
@configg/bases/… |
Same as |
|---|---|
oxfmt |
@configg/oxc/fmt |
oxlint |
@configg/oxc/lint |
tsconfig/{bun,client,vite} |
@configg/tsconfig/{bun,client,vite} |
Tools are peerDependencies: you install oxfmt, oxlint and typescript yourself and pin the versions you want. The packages only supply the presets.
bun add -d @configg/bases oxfmt oxlint oxlint-tsgolint typescript// oxfmt.config.ts
import { defineConfig } from 'oxfmt'
import { configs } from '@configg/bases/oxfmt'
export default defineConfig(configs.client)// oxlint.config.ts
import { defineConfig } from 'oxlint'
import { configs } from '@configg/bases/oxlint'
export default defineConfig(configs.client)Installing a single package works the same way, for example @configg/oxc/fmt and @configg/oxc/lint.
oxfmtexportsconfigs:client(Tailwind class sorting, import grouping),scripts(shared base for tooling and config files) andserver(shared base).oxlintexportsconfigs:client(browser env, React, and a**/*.spec.{ts,tsx}override with Vitest and Testing Library rules) andscripts(Node env).tsconfig/bun(strictest+ Bun),tsconfig/vite(strictest+ Vite/React) andtsconfig/client(vitewith ambienttypescleared, so a package only picks up the@types/*it asks for).
The Oxlint presets don't enable anti-slop. antiSlop from the oxlint entry is an opt-in set with the plugin and all 18 rules as errors; unicorn/prefer-reflect-apply is off. See UPSTREAM.md for its source and update policy.
import { antiSlop, configs } from '@configg/bases/oxlint'
export default defineConfig({
...configs.client,
jsPlugins: [...antiSlop.jsPlugins],
rules: { ...configs.client.rules, ...antiSlop.rules },
})If your config has its own jsPlugins, keep the anti-slop entry in that array. The plugin ships as TypeScript, so run oxlint under Bun (bunx --bun oxlint): Node refuses to strip types from files in node_modules.
eslint-plugin-testing-library is only needed for configs.client in the oxlint preset.
The repo uses its own packages through the workspace, so there is nothing to build.
bun install
bun run check # fmt + lint (with type-check) + lockfile, in parallel