Research
Open research on code quality
Research on the lint rules Ultracite turns on: what each one measures, what it means for the people and agents writing the code, and what it costs at scale.
18 min read
Cognitive complexity and the cost of reading code
Where the metric came from, how it scores a function, what the research says it does and doesn't measure, and why it matters more when agents write the code.
- sonarjs/cognitive-complexity
- noExcessiveCognitiveComplexity
- complexity
14 min read
What happens to a promise nobody awaits
Why a floating promise loses its errors, where the rules that catch it came from, what they can and can't see, how often real codebases float promises and why, and what agents do when the linter flags one.
- no-floating-promises
- no-misused-promises
- require-await
- no-await-in-loop
15 min read
Security lint rules find the sink, not the bug
Where the rules against eval and innerHTML came from, what they see in real code, how few published vulnerabilities they would have caught, and why they still matter when agents write the code.
- no-eval
- no-implied-eval
- no-new-func
- sonarjs/code-eval
- no-script-url
- react/no-danger
- noDangerouslySetInnerHtml
16 min read
Why TypeScript lets you overrule its type checker
Where any, !, as and @ts-ignore came from, what the rules that ban them can and can't see, how real codebases use them, and what changes when an agent is trying to make a type error go away.
- no-explicit-any
- no-non-null-assertion
- ban-ts-comment
- no-unsafe-type-assertion
- noExplicitAny
- noNonNullAssertion
- noTsIgnore
Ship less slop
One command sets up your linter, formatter, editor and agents. Works with Oxlint, Biome and ESLint.