What We Check

132 checks across 25 categories

19 core checks are free and open source. Activate a license to unlock all 132 checks including determinism, async safety, type validation, and more.

Free

Always included (19 checks)

๐Ÿ›ก

Security

7 checks
  • SEC001Hardcoded passwords, API keys, and secrets(Py, JS/TS, C#, Go, Rust, Ruby)
  • SEC002SQL queries built with string concatenation
  • SEC004Non-cryptographic random for security tokens

and 4 more checks

๐ŸŽฎ

C# / Unity

3 checks
  • CS001async void methods that crash on unhandled exceptions(C#)
  • CS002Debug.Log / Console.WriteLine left in production code(C#)
  • CS003GameObject.Find / GetComponent inside Unity Update() loops(C#)
๐Ÿ“

Schema Validation

2 checks
  • SCHEMA001Pydantic field nullability mismatches(Python)
  • SCHEMA002Pydantic/SQLAlchemy field type misalignment(Python)
โœจ

Quality Essentials

2 checks
  • QUAL001Silently swallowed exceptions hide real bugs(Py, JS/TS, C#, Go, Rust, Ruby)
  • QUAL009Files too long to review effectively
๐Ÿ“

Project Setup

2 checks
  • PROJ001Missing CLAUDE.md for AI assistant context
  • PROJ005CLAUDE.md tracked in git but should be gitignored
๐Ÿ”’

Session Safety

1 check
  • SESS002Thread-unsafe database session sharing
๐Ÿ—

Structure Essentials

1 check
  • STRUCT001Multiple classes in a single file(Python)
โšก

Async Essentials

1 check
  • ASYNC001Async function called without await(Py, JS/TS)
Pro

Unlock with a license (113 checks)

๐Ÿ”

Extended Security

9 checks
  • SEC007OAuth callback missing state validation(Py, JS/TS)
  • SEC013Missing security headers on HTTP responses(JS/TS)
  • SEC017Regex-based HTML sanitizer can be bypassed(JS/TS)

and 6 more checks

๐ŸŽฏ

Determinism

9 checks
  • DET001Dictionary iteration without sorting causes flaky behavior
  • DET005Random without seed causes non-reproducible results(Py, JS/TS)
  • DET009Uncached LLM calls break reproducibility and waste tokens

and 6 more checks

๐Ÿš€

Performance

7 checks
  • PERF001Database calls inside loops (N+1 queries)(Py, JS/TS)
  • PERF005Render-blocking font imports slow first paint(JS/TS)
  • PERF007Public pages without a CDN configured(JS/TS)

and 4 more checks

๐Ÿ› 

Code Quality

17 checks
  • QUAL004Mutable default arguments shared between calls(Python)
  • QUAL011Functions with excessive cyclomatic complexity
  • QUAL014Case-insensitive email comparison missing

and 14 more checks

๐Ÿท

Type Safety

12 checks
  • TYPE008Explicit 'any' type usage defeats TypeScript's purpose(TS)
  • TYPE009process.env.VAR! non-null assertion can crash at runtime(TS)
  • TYPE013JSON.parse without runtime validation is unsafe(Py, TS)

and 9 more checks

โฑ

Async & Concurrency

5 checks
  • ASYNC002Blocking calls inside async functions(Py, JS/TS)
  • ASYNC003Fire-and-forget tasks without error handling(Py, JS/TS)
  • CONC001Check-then-act race conditions

and 2 more checks

๐Ÿ”Œ

API Design

6 checks
  • API001API calls without error handling(Py, JS/TS)
  • API005Frontend/backend type definitions drift apart
  • API006Shared types defined in multiple places

and 3 more checks

๐Ÿ”—

tRPC

4 checks
  • TRPC001tRPC procedures without input validation(TS)
  • TRPC002Inline Zod schemas instead of shared types(TS)

and 2 more checks

๐Ÿ–ฅ

Frontend

9 checks
  • FRONT002window/document access without SSR guard(JS/TS)
  • FRONT005useEffect used for side effects that should be event handlers(TS)
  • FRONT007Unbounded AI output rendered in the DOM(JS/TS)

and 6 more checks

๐Ÿงช

Testing

10 checks
  • TEST001Tests marked as skipped accumulate silently(Py, JS/TS)
  • TEST007Critical user flows missing E2E test coverage
  • TEST009Playwright waitForTimeout instead of event-driven waits

and 7 more checks

๐Ÿงฉ

Project Structure

8 checks
  • STRUCT004Direct sys.path manipulation breaks packaging
  • STRUCT010No clear frontend/backend separation(JS/TS)
  • STRUCT011Duplicate modules across packages cause import ambiguity

and 5 more checks

๐Ÿง 

Memory Safety

4 checks
  • MEM001Unbounded database queries load entire tables into memory
  • MEM003In-process accumulators grow without bound
  • MEM004Global state singletons break in worker / serverless environments

and 1 more check

๐Ÿ“…

Datetime

3 checks
  • DATE002Naive datetime without timezone causes silent bugs
  • DATE003Database datetime used without timezone awareness
  • DATE004getDay() returning UTC day mismatches local expectations
โ˜ธ

Infrastructure

5 checks
  • KUBE001Local filesystem used for application data in containers
  • KUBE002Ingress missing SSL redirect
  • RATE001API endpoint without rate limiting(Py, JS/TS)

and 2 more checks

โš™

Project Config

3 checks
  • PROJ002Project not using git version control
  • PROJ003Missing pyright configuration
  • PROJ004Depending on beta / pre-release packages
๐Ÿ—

Session (Advanced)

1 check
  • SESS001Database session passed to background task
โ™ฟ

Accessibility

1 check
  • A11Y001Button text may be invisible on background color

Try it now

Free tier runs instantly with no signup. Upgrade anytime to unlock all 132 checks.

pip install stablestack