Fast, opinionated linting and formatting for TypeScript. Powered by Oxlint, Oxfmt, tsgo, and Knip.
npm install @jterrazz/codestyle --save-devCreate oxlint.config.ts:
import { defineConfig } from 'oxlint';
import { oxlint } from '@jterrazz/codestyle';
export default defineConfig({
extends: [oxlint.node],
});Create oxfmt.config.ts:
import { defineConfig } from 'oxfmt';
import { oxfmt } from '@jterrazz/codestyle';
export default defineConfig(oxfmt);Run:
npx codestyle check # Check everything (types + lint + format + unused code)
npx codestyle fix # Fix lint and formatting issuesPick a base config:
| Preset | Use Case |
|---|---|
oxlint.node |
Node.js (requires .js extensions) |
oxlint.expo |
Expo / React Native |
oxlint.next |
Next.js |
Architecture preset (additive):
| Preset | Use Case |
|---|---|
oxlint.hexagonal |
Hexagonal architecture enforcement |
Enforce hexagonal architecture boundaries:
import { defineConfig } from 'oxlint';
import { oxlint } from '@jterrazz/codestyle';
export default defineConfig({
extends: [oxlint.node, oxlint.hexagonal],
});Rules enforced:
domain/cannot import from other layersapplication/cannot import infrastructurepresentation/ui/cannot import navigationfeatures/cannot import other features
codestyle check runs Knip to detect unused files, exports, and dependencies. A base config is automatically merged with any project-local knip.json, handling common ecosystem patterns:
@jterrazz/*packages auto-ignored- Published libraries:
exports/types/filesrules auto-disabled - Convention paths (
fixtures/,expected/,docs/) auto-ignored - Plugin dependencies (
*-plugin-*,@scope/*) auto-ignored
For fine-tuning, create a knip.json with only project-specific overrides.
codestyle check runs four tools in parallel:
| Tool | Purpose |
|---|---|
| tsgo | Type checking |
| oxlint | Linting |
| oxfmt | Formatting |
| knip | Unused code analysis |
codestyle fix runs three tools in parallel (knip excluded):
| Tool | Purpose |
|---|---|
| tsgo | Type checking |
| oxlint | Linting (with --fix) |
| oxfmt | Formatting |