Diopter
See what your Angular project is made of, and what its next upgrade involves.
Point Diopter at an Angular workspace: deprecated and removed APIs in your code, an upgrade plan with the libraries that block it, a modernity score, template performance, bundle growth and known vulnerabilities. A local UI, a CI check and MCP tools from one definition.
One definition, four ways to run it
Run it
In any Angular workspace (it walks up to angular.json). Not on npm yet: build it from the monorepo and run the binary.
git clone https://github.com/geromegrignon/angular.courses
pnpm install && pnpm --filter @angular-courses/diopter build
cd ~/my-angular-app
node ~/angular.courses/packages/diopter/bin.mjs # UI
node ~/angular.courses/packages/diopter/bin.mjs check # CIGate it in CI
Each gate is a flag; the defaults fail only on removed APIs and environment issues.
diopter check \
--fail-on deprecated --fail-on-blockers \
--min-modernity 60 --fail-on-template-calls \
--max-initial-growth 5% --audit-level high \
--format markdown --output diopter.mdFor coding agents
Add it to .mcp.json (Claude Code) or .cursor/mcp.json. The agent gets the same report, upgrade plan, bundle and vulnerability data as the UI, plus the actions (rescan, fix Node pins).
{
"mcpServers": {
"diopter": { "command": "node", "args": ["<repo>/packages/diopter/bin.mjs", "mcp"] }
}
}What it checks
Every finding has a stable code and a page explaining what it means, how to fix it and which flag gates it. The API dataset is the one behind Angular Can I Use; libraries are checked the way the Library Health Check does; the modernity score follows the Modern Angular Path.
API health
DIOP00xxEnvironment
DIOP01xxLibraries
DIOP02xxPerformance
DIOP03xxBundle
DIOP04xxSecurity
DIOP05xxDiopter runs on your machine and in your CI. Nothing about your code leaves it: the only network calls are to the npm registry (library releases, the audit), and --offline turns those off.
Built with Devframe.