Desktop Pro
The full picture,
on your machine.
Overview, file drill-in, metric documentation, historical analysis, budgets, and action items in one app. Local-first, offline-capable, and built for the codebase you actually maintain.
Private alpha · macOS, Windows, Linux · $99 one-time at launch
Runs on
macOS 13 Ventura+ · Universal binary
Windows 10+ · x64 & ARM64
Linux AppImage & .deb · x86_64 & ARM64
Inside the app
Ten glimpses into the quality loop.
Tap any tab to flip the screenshot. Every surface ships in the alpha. These are real captures of the desktop app, not illustrations.
Offline by design
Your source code is never stored in the cloud.
Vipr talks to our servers only for license activation and authentication. Static analysis, storages, and the MCP server all run locally.
Source stays local
No upload. No telemetry on code.
Your repository never leaves the machine. No account required to analyze a project.
Local LLMs for Targeted AI Questions
Offline models. No internet needed.
Vipr works with downloadable models (Qwen 2.5 Coder, 7B and 14B). Chat and AI guidance keep working offline.
Bring your own key (BYOK)
Claude, Gemini, or Codex.
Prefer a frontier model? Drop in your own API key for Anthropic, Google, or OpenAI. Your key, your provider.
Source inspector
From a finding to the offending line in one click
Open the drawer and the file opens with severity markers in the gutter. The metric, the rule, and the code stay visible together.
1import React, { useEffect, useState } from 'react';2import { UserRecord } from '../types';34interface Props {5 users: UserRecord[];6 onSelect: (id: any) => void;7}89export function renderUserCard({ users, onSelect }: Props) {10 const [active, setActive] = useState(null);1112 // @todo refactor: extract into hook13 useEffect(() => {14 if (users.length > 0) {15 setActive(users[0].id);16 }17 }, [users, active, onSelect]);1819 return (20 <ul className="user-list">21 {users.map(u => (22 <li key={u.id} onClick={() => onSelect(u.id)}>23 <span className="name">{u.firstName} {u.lastName}</span>24 {u.id === active && <span className="badge">active</span>}25 </li>26 ))}27 </ul>28 );29}3031// @todo: memoize sorted output once api stabilizes32function sortByActivity(list: UserRecord[]) {33 return [...list].sort((a, b) => {34 const delta = b.lastSeen - a.lastSeen;35 return delta !== 0 ? delta : a.firstName.localeCompare(b.firstName);36 });37}3839export const UserList = React.memo(renderUserCard);Budgets
Set a ceiling for any metric and hold the line
Define budgets per file, directory, or metric. Vipr enforces them across every commit and shows exactly which files crossed, by how much, and when.
Choose which metric to enforce.
Commit compare
Diff two snapshots and see what really changed
Side-by-side metrics for any two commits or saved snapshots. Spot the regression that slipped past review and the refactor that quietly paid off.
Ready?
One price. Yours forever.
$99 once. Three devices. All updates inside this major version included. Or bundle with VSCode Extension Pro for $129.