Skip to main content
Public beta · macOS (Apple Silicon)

Real-time frontend feedback while you code with AI.

Vipr is a free, local-first static analysis platform for TypeScript, React, and Next.js that tracks codebase health over time. It runs entirely on your machine and your code never leaves it. The CLI, the desktop app, and the VS Code extension are all available today.

npx @vipr/cli analyze src/

Why Vipr

Built for

TypeScriptJavaScriptReactNext.js

TypeScript-native depth

25+ analyses tuned for React hooks, Next.js boundaries, and TS-specific patterns. Rules written for JS/TS, not ported from another language.

Your code stays yours

Analysis runs locally. No cloud upload, no telemetry on source, no account required to run a scan.

Works with your AI tools

An embedded MCP server lets Claude, Cursor, Antigravity, Kilo Code, and Windsurf query your repo metrics while they edit.

File detail, in context

Open a file. See why it scored that way.

Health score, the metrics behind it, threshold context, and AI guidance on one screen. Read the number, see what moved it, then decide what to fix.

ccorydora/src/MetricBreakdown.tsx
MetricBreakdown.tsx
src/components/MetricBreakdown.tsx
File-level Analysis
File health
Composite Health Score
59/ 100
React42/100
TypeScript92/100
Issues17/100
Anti-PatternsReactTypeScriptIssues (17)
MetricValueDescription
Stale closure in useEffectConcern
1 (critical)`filters` captured but missing from dep array
Premature memoization
3Cheap ops with no memoized children
Unstable Context value
2Provider re-renders every consumer
Array index as key
0No dynamic lists detected
Re-renders on mount
12Aim for ≤ 2 with stable deps
Anti-pattern documentation
Stale closure in useEffect

A value referenced inside useEffect is not listed in its dependency array, so the effect closes over the value from a previous render and silently uses stale data until the component re-mounts.

// missing `filters` in deps
useEffect(() => fetch(url, { filters }), [url]);
SeverityWhat happens
CriticalStale data shown to users until next remount
WarningEffect re-runs only when listed deps change
HealthyAll referenced values appear in dep array
AI analysis
Stale Closure in useEffect

The effect captures `filters` from the first render but never lists it in the dep array, so users see filtered results from the previous query until the next prop change forces a re-mount.

Stale closure: `filters` missing from dep array
Derived state set inside `useEffect`; should be `useMemo`
Fetch has no abort signal, so fast navigation can race

Overview

Arrange the dashboard around how you work

Drag, drop, and pin the widgets that match how your team works: score, hotspots, anti-patterns, budgets. Arrange them once and they stay put.

Overview
Health
72/100
Hotspots
38files
Drop to reorder
Coverage
84%
Health Trend
Apr 1Apr 8Apr 15Apr 22Today
Top Issues
Implicit any in callback
Prop drilling depth >3
Unused import chain
Hotspot Files
FileScoreTrendRisk
src/components/Dashboard.tsx87High
src/utils/parser.ts74Med
src/services/api.ts63Low
src/hooks/useAuth.ts59Med

Per-file metrics

Every file scored, every metric tracked

Composite health for each file, broken down by complexity, churn, and maintainability. Trend pills show what moved since the last commit.

File Health

Composite Health Score

72/100
+3.2
ExcellentGoodFairPoor
Complexity68/100
TypeScript82/100
React54/100
Next.js38/100

Churn × complexity

Four quadrants, one refactor queue

Files plot themselves by churn and complexity into four buckets: Concerning, Risky, Active, and Stable. The work order is clear before you start planning.

Churn × Complexity: 24 files
ConcerningRiskyActiveStable
0%25%50%75%100%0%25%50%75%100%CONCERNINGRISKYACTIVESTABLEChurn Rate (percentile)Complexity (percentile)Dashboard.tsxCONCERNINGChurn Percentile84%Complexity Percentile76%Risk Score82.3Commits41Age412d

What it tracks

One local engine running twenty-five analyses.

Analyses
25+ Cyclomatic, cognitive, Halstead, churn, anti-patterns, dead code, and the rest.
First analysis
~2 min 300 files scored end to end on a typical laptop.
Bytes uploaded
0 Local engine, local DB, local MCP. Your code never leaves the machine.

Hotspots

The files you change most are the ones worth fixing first

A treemap sized by impact and colored by risk. The dense, dark squares are where churn meets complexity. Those are the refactors that pay back fastest.

Hotspots: top 24 files
Risk:LowMediumHighCritical
Dashboard.tsx412 LOC
api.ts286 LOC
parser.ts224 LOC
router.ts198 LOC
state.ts176 LOC
UserList.tsx234 LOC
auth.ts162 LOC
cache.ts158 LOC
utils.ts142 LOC
reducer.ts196 LOC
forms.tsx184 LOC
schema.ts168 LOC
hooks.ts144 LOC
theme.ts122 LOC
icons.ts98 LOC
ChartCard.tsx156 LOC
Table.tsx138 LOC
Avatar.tsx92 LOC
format.ts86 LOC
router.tsx132 LOC
env.ts64 LOC
Dashboard.tsxCritical
src/components/Dashboard.tsx
Risk Score
87.4
Risk Level
High
Complexity
64
Dependency Impact
28
Hotspot Issues
6
Lines of Code
412
Click to open file analysis

Dependencies

Trace the blast radius of any file

Walk upstream to see what pulls a module in. Walk downstream to see what breaks if it changes. Cycles get flagged the moment they form.

Dependencies: clients/desktop/src/renderer/UserList.tsx
Circular DependencyuseUserStore.tssrc/stores12 importsStrongapiClient.tssrc/services8 importsModerateUser.types.tssrc/types4 importsType-onlyUserList.tsxclients/desktop/.../renderer7 importsModerateUserListItem.tsxsrc/components6 importsStrongPagination.tsxsrc/components3 importsModerateformatName.tssrc/utils2 importsWeak

Day zero

Open a repo, get a verdict in minutes

A first-pass readout of overall health, top hotspots, and architectural shape. Useful on legacy code you inherited and on greenfield work that just shipped.

Initial Assessment

Architecture Review

Identify architectural anti-patterns, circular dependencies, and high coupling that may impact maintainability.

Anti-Patterns
51
Circular Deps.
0
High Coupling
0
Top Architectural Concerns (4)
Anti-Pattern Type
Files Affected
Severity
Duplicate Code
3
High
Dead Code
27
Medium
Safety Erosion
3
Low
Type Gymnastics
1
Low

Differentiation

How Vipr compares to a linter and to AI review.

Linters check style and syntax. AI review works one pull request at a time. Vipr scores the whole codebase and tracks it across commits.

Capability Vipr ESLint / Biome AI code review
Understands React (hooks, boundaries, props) ~
Tracks quality as you code
Can run 100% offline
Works with AI agents via MCP
Flags framework anti-patterns, not style ~ ~
One-time license, not per-seat or subscription-based

Changelog

Shipped recently

Aug 24, 2026 CLI

Official CLI release notes for v0.37.0 covering features and bug fixes.

Aug 24, 2026 Desktop

Official Desktop App release notes for v0.50.0 covering features, bug fixes, and performance improvements.

Aug 24, 2026 VSCode

Official VSCode Extension release notes for v0.42.0 covering features.

Pricing

Free CLI forever. One-time payment for the rest.

No subscription. No per-seat fees. One purchase covers three devices and every update inside that major version. Powered by Polar.sh.

CLI

Free forever

Analyze any JS/TS repo from your terminal. No account, no usage limits.

Check out the CLI

VSCode Extension Pro

$49 once

Inline scores, hover cards, CodeLens, dashboard webview.

Buy VSCode Extension Pro
Bundle with VSCode Extension Pro for $129

Desktop Pro

$99 once

The full local dashboard. History, hotspots, MCP server.

Buy Desktop Pro
See full pricing →

Want lifetime upgrades? Believer’s Bundle at $249 one-time, every future major version included.

(Lifetime means all future major-version releases tied to your license key.)

Run it on the code you have been putting off.

Vipr reads the code on your machine. Nothing is uploaded, and there is nothing to configure before the first run.

npx @vipr/cli analyze src/

Free forever. No account.

Download Vipr Desktop

macOS · Apple Silicon · v0.49.4 · signed and notarized

The desktop app is free to use and free to keep. Pro unlocks the history: backfill, velocity, trend projections, and A/B compare.

What public beta means

We run this engine on Vipr's own codebase every day.

Bugs still surface. When one does, it lands in the changelog with a version number next to it.

Buying now covers all of v1: every release between here and v2, not just the build you downloaded today.

Fourteen days, full refund. Email support@vipr.dev.