Open-source accessibility CLI for React & TypeScript. Scan JSX/TSX for WCAG-related issues locally or in CI, get JSON reports, built-in fix hints, and AI explanations via `isoso explain`. Includes `scan`, `rules`, `github` workflow setup, and static analysis: developer-first, no dashboard required.
See the code
Static WCAG-oriented rules in your terminal · Auto-fix codemods · Optional AI review · CI-ready JSON reports
Catch alt text gaps, keyboard traps, and unlabeled controls before they reach production.
Isoso reads your .tsx / .jsx source (not the live DOM) and flags patterns that commonly break WCAG expectations—missing alt text, clickable <div>s without roles, unlabeled inputs, and more.
flowchart LR
subgraph input [Your repo]
JSX[.tsx / .jsx files]
end
subgraph isoso [Isoso CLI]
Parse[Babel JSX extract]
Static[57 static rules]
AI[Optional AI pass]
Report[Text or JSON report]
end
subgraph output [Outcomes]
Term[Terminal]
CI[Exit code for CI]
Artifact[JSON artifact]
end
JSX --> Parse
Parse --> Static
Parse --> AI
Static --> Report
AI --> Report
Report --> Term
Report --> CI
Report --> Artifact
| Mode | When to use |
|---|---|
| Static rules | Fast, free, deterministic—ideal for CI and pre-commit |
isoso fix | Apply codemods for 57 fixable static rules (writes to disk by default; use --dry-run to preview) |
| AI scan | Deeper pass on each file when you set an AI key; findings use the same rule IDs and severities as static mode |
| Explain | Turn a finding into impact + remediation narrative (AI or built-in copy) |
Note: Isoso is source-level analysis. It complements—not replaces—browser tools (axe, Lighthouse), screen reader testing, and manual QA.
Isoso Cloud (dashboard, org analytics, GitHub-connected scans, policies) is a separate product. This repository is the open-source CLI and rule engine (Phase 1).
npm package: @isoso.dev/isoso (scoped). There is no unscoped isoso package on npm—the name is reserved/blocked. The CLI command is still isoso.
Requirements: Node.js 18+
package.json change)Use the scoped name with npx:
npx @isoso.dev/isoso scan
npx @isoso.dev/isoso rules
npx @isoso.dev/isoso explain --rule img-missing-alt --file src/App.tsx --line 12
Pin a version when you care about reproducibility:
npx @isoso.dev/isoso@0.3.3 scan
Install as a dev dependency in the app you want to scan, not in unrelated projects:
npm install -D @isoso.dev/isoso
Then run the isoso binary from that project (local install or npm scripts):
npx isoso scan
isoso rules
npx isoso … uses node_modules/.bin/isoso after install. npm @isoso.dev/isoso is not valid—npm expects subcommands like install, not a package name.
npm install -g @isoso.dev/isoso@latest
isoso scan
isoso --version
Global isoso does not auto-update when a new version is published. After upgrades on npm, run npm install -g @isoso.dev/isoso@latest again (or keep using npx @isoso.dev/isoso@latest …).
| You type | When it works |
|---|---|
npx @isoso.dev/isoso scan | Always (downloads/runs the published CLI) |
npx isoso scan | After npm install -D @isoso.dev/isoso in this directory |
isoso scan | After local install (npm script / node_modules/.bin) or global install |
npm @isoso.dev/isoso … | Never — use npm install or npx |
# Scan the current directory (AI if ISOSO_AI_KEY is in .env, else static rules)
npx @isoso.dev/isoso scan
# Or, after npm install -D @isoso.dev/isoso in this repo:
npx isoso scan
# Scan a sample app in this monorepo (after clone + build)
npx isoso scan examples/sample-app
# Static only—no API calls
npx @isoso.dev/isoso scan --static
# JSON for pipelines + fail the job on serious+ findings
npx @isoso.dev/isoso scan --format json -o isoso-report.json --fail-on serious
# See every rule id and WCAG mapping (57 rules; fixable rules tagged in output)
npx @isoso.dev/isoso rules
# Auto-fix static findings (preview first, then apply)
npx @isoso.dev/isoso fix --dry-run
npx @isoso.dev/isoso fix
# Explain one rule (AI when a key is set)
npx @isoso.dev/isoso explain --rule img-missing-alt --file src/App.tsx --line 12
Suggested package.json script:
{
"scripts": {
"a11y": "isoso scan --static --fail-on serious",
"a11y:report": "isoso scan --format json -o isoso-report.json",
"a11y:fix": "isoso fix --dry-run"
}
}
isoso scanScan a project tree for accessibility issues in JSX/TSX.
isoso scan [path] [options]
| Option | Default | Description |
|---|---|---|
[path] | . | Project root to scan |
-f, --format <type> | text | text or json |
-o, --output <file> | — | Write report to a file (stdout stays clean in JSON mode when combined with -o) |
--fail-on <severity> | serious | Exit code 1 if any finding is at or above this severity (critical, serious, moderate, minor) |
--rules <ids> | all | Comma-separated rule ids (e.g. img-missing-alt,button-missing-name) |
--static | — | Force built-in rules only |
--ai | — | Require AI scan (errors if ISOSO_AI_KEY is missing) |
What gets scanned
**/*.{tsx,jsx}node_modules, dist, build, .next, coverageExample text output (abbreviated)
Isoso accessibility scan
Engine: static rules
Root: /app
Files scanned: 42
Findings: 3
critical: 1
serious: 2
[critical] img-missing-alt — src/Hero.tsx:18:7
<img> is missing an alt attribute.
Fix: Add alt="..." describing the image, or alt="" if decorative.
Completed in 124ms
isoso fixApply automatic codemods for findings from the static rule engine. Each fixable rule id is marked [fixable] in isoso rules. Fixes run on the same .tsx / .jsx files as scan (AI findings are not auto-fixed).
isoso fix [path] [options]
| Option | Default | Description |
|---|---|---|
[path] | . | Project root |
--dry-run | — | List edits without writing files (default is to write) |
--rules <ids> | all fixable | Comma-separated fixable rule ids |
Typical workflow
isoso scan --static
isoso fix --dry-run # review proposed edits
isoso fix # apply to disk
Review diffs in git before merging—codemods handle common patterns but cannot replace judgment on every component.
isoso rulesPrint all static rules with id, human name, severity, and WCAG success criteria references.
isoso rules
Use the ids with --rules or isoso explain --rule <id>.
isoso explainExpand a finding into Summary, Impact, and Remediation.
isoso explain --rule <id> [options]
| Option | Description |
|---|---|
--rule <id> | Required. Rule id from isoso rules |
--file <path> | File path for context |
--line <n> | Line number (default 1) |
--message <text> | Override the finding message |
--snippet <text> | Code snippet from your scan |
--builtin | Curated WCAG guidance only—no API call |
Environment: ISOSO_AI_KEY in .env (see below). Optional ISOSO_AI_MODEL, ISOSO_AI_BASE_URL, or ISOSO_AI_CHAT_URL for your provider.
57 static checks ship with @isoso/core (images, forms, keyboard, landmarks, media, tables, focus, document structure, autocomplete, captions, and viewport). Severity drives --fail-on and CI gates.
List every rule id, WCAG reference, and severity:
npx @isoso.dev/isoso rules
Categories include: text alternatives (img-missing-alt, svg-missing-accessible-name, role-img-missing-label, …), keyboard & focus (click-without-keyboard-handler, tabindex-zero-without-role, outline-none-utility, …), forms (input-missing-label, label-without-htmlfor, fieldset-needs-legend, …), links & buttons, landmarks (nav-missing-label, multiple-main-landmarks, …), media, and document (html-missing-lang, multiple-h1).
Run a subset:
npx @isoso.dev/isoso scan --static --rules img-missing-alt,button-missing-name
Static (--static) | AI (default when key present) | |
|---|---|---|
| Speed | Very fast | Slower (per-file API calls) |
| Cost | Free | Provider usage (API billing) |
| Determinism | Same input → same output | May vary by model |
| Finding shape | ruleId, severity, WCAG, line, message, fix | Same schema as static rules |
Auto behavior
ISOSO_AI_KEY is set → AI scan (unless --static).--ai → fail fast if no key.Setup
.env.example → .env in this repo or in the app where you run isoso.ISOSO_AI_KEY=... (your provider’s API key)npx @isoso.dev/isoso scan (omit --static), or isoso scan after a local install.The CLI walks upward from the current working directory to find .env.
cp .env.example .env
# edit .env, then:
npx @isoso.dev/isoso explain --rule img-missing-alt --file src/App.tsx --line 24
Use --builtin on explain when you want zero network calls.
Custom AI provider (chat completions JSON API):
| Variable | Purpose |
|---|---|
ISOSO_AI_KEY | API key sent as Authorization: Bearer … |
ISOSO_AI_MODEL | Model id (default gpt-4o-mini) |
ISOSO_AI_CHAT_URL | Full chat completions URL |
ISOSO_AI_BASE_URL | Base URL; Isoso calls {BASE}/chat/completions |
Run isoso scan in any CI pipeline (GitHub Actions, GitLab CI, etc.). Exit code 1 when findings meet or exceed --fail-on.
# Example GitHub Actions step
- run: npx @isoso.dev/isoso scan --static --format json --fail-on serious -o isoso-report.json
Severity gate: --fail-on serious fails on critical and serious findings. Use --fail-on critical for a looser gate, or --fail-on moderate for stricter.
Tips
--static in CI for speed and predictable cost.ISOSO_AI_KEY in CI secrets only if you intentionally run AI in the pipeline.Read this before you gate releases, publish compliance claims, or treat scan output as proof of accessibility.
Isoso does not certify, audit, or guarantee that your application meets WCAG 2.x (any level), ADA, Section 508, EN 301 549, EAA, or any other accessibility standard or law.
| What Isoso does | What it does not do |
|---|---|
| Flags common JSX/TSX patterns mapped to WCAG-oriented heuristics | Prove conformance or “pass” an official audit |
| Helps teams catch issues early in source | Replace screen reader testing, keyboard QA, or user research |
| Produces CI-friendly reports and optional auto-fixes | Constitute legal sign-off, VPAT, or third-party certification |
Rule ids and WCAG references in isoso rules describe why a pattern is risky, not a determination that your product complies or violates the law. You remain responsible for your product’s accessibility and legal obligations.
The CLI analyzes .tsx / .jsx source files—not the live DOM, runtime CSS, content from CMS/APIs, PDFs, native apps, or third-party embeds. Findings can be false positives (safe patterns flagged) or false negatives (issues only visible at runtime or in production builds).
Use Isoso together with browser tools (e.g. axe DevTools, Lighthouse), manual testing, assistive technology checks, and professional audits when compliance matters.
isoso fix) risksCodemods apply mechanical edits. They can change behavior, break tests, or miss context (decorative vs informative images, custom components, design-system wrappers). Always review git diffs before merge; do not run fix unattended on production branches without review.
When ISOSO_AI_KEY is set, file snippets and rule context may be sent to your configured AI provider. You are responsible for provider terms, data handling, and never committing API keys to git.
--static in CI when you want zero external data transfer.--builtin on explain for offline, curated copy only.| Practice | Why |
|---|---|
Keep ISOSO_AI_KEY in .env or CI secrets | Keys in repo history are exposed forever |
Add .env to .gitignore | Local keys must not ship with the app |
| Scope CI secrets to jobs that need AI | Reduces blast radius if a workflow log leaks |
The CLI loads .env by walking up from the current working directory—it does not encrypt or store keys beyond what your shell and provider do.
--fail-on controls exit codes for your pipeline (e.g. fail on serious and above). That is your quality bar, not a mapping to WCAG conformance levels or legal safe harbor.
Dashboard scans, policies, and GitHub-connected runs on isoso.dev are subject to separate Terms and Privacy Policy. Cloud storage of findings does not mean your application is compliant.
If you believe you have found a security vulnerability in the Isoso CLI (not an accessibility finding in your app), report it responsibly via info@isoso.dev (subject: security). Do not open public issues with exploit details before coordination.
| Package | npm name | Role |
|---|---|---|
packages/isoso-cli | @isoso.dev/isoso | CLI entrypoint (scan, fix, rules, explain); binary name isoso |
packages/isoso-core | @isoso/core | Rule engine, reports, AI scan + explain |
packages/isoso-scanner | @isoso/scanner | Glob + Babel JSX extraction, orchestrates core |
Published @isoso.dev/isoso bundles vendored @isoso/core and @isoso/scanner for a single install.
From the monorepo root:
npm install
npm run build
npm test # @isoso/core unit tests
npx isoso scan examples/sample-app
| Script | Action |
|---|---|
npm run build | Build core → scanner → copy vendor → build CLI |
npm run dev | Build and run CLI via Node |
Sample violations: examples/sample-app/BadExample.tsx intentionally breaks several rules—use it to verify scans locally.
Need org-wide dashboards, GitHub-connected repo scans, teams, policies, and billing? That lives in Isoso Web / Cloud, not in this CLI repo. The CLI remains the open-source local and CI story; cloud scans align on the same rule IDs where static heuristics apply.
MIT — see LICENSE.
Ship accessible UI earlier. Run npx @isoso.dev/isoso scan on your app, then npx @isoso.dev/isoso fix for safe auto-edits.
Open-source accessibility CLI for React & TypeScript. Scan JSX/TSX for WCAG-related issues locally or in CI, get JSON reports, built-in fix hints, and AI explanations via `isoso explain`. Includes `scan`, `rules`, `github` workflow setup, and static analysis: developer-first, no dashboard required.
See the code
Static WCAG-oriented rules in your terminal · Auto-fix codemods · Optional AI review · CI-ready JSON reports
Catch alt text gaps, keyboard traps, and unlabeled controls before they reach production.
Isoso reads your .tsx / .jsx source (not the live DOM) and flags patterns that commonly break WCAG expectations—missing alt text, clickable <div>s without roles, unlabeled inputs, and more.
flowchart LR
subgraph input [Your repo]
JSX[.tsx / .jsx files]
end
subgraph isoso [Isoso CLI]
Parse[Babel JSX extract]
Static[57 static rules]
AI[Optional AI pass]
Report[Text or JSON report]
end
subgraph output [Outcomes]
Term[Terminal]
CI[Exit code for CI]
Artifact[JSON artifact]
end
JSX --> Parse
Parse --> Static
Parse --> AI
Static --> Report
AI --> Report
Report --> Term
Report --> CI
Report --> Artifact
| Mode | When to use |
|---|---|
| Static rules | Fast, free, deterministic—ideal for CI and pre-commit |
isoso fix | Apply codemods for 57 fixable static rules (writes to disk by default; use --dry-run to preview) |
| AI scan | Deeper pass on each file when you set an AI key; findings use the same rule IDs and severities as static mode |
| Explain | Turn a finding into impact + remediation narrative (AI or built-in copy) |
Note: Isoso is source-level analysis. It complements—not replaces—browser tools (axe, Lighthouse), screen reader testing, and manual QA.
Isoso Cloud (dashboard, org analytics, GitHub-connected scans, policies) is a separate product. This repository is the open-source CLI and rule engine (Phase 1).
npm package: @isoso.dev/isoso (scoped). There is no unscoped isoso package on npm—the name is reserved/blocked. The CLI command is still isoso.
Requirements: Node.js 18+
package.json change)Use the scoped name with npx:
npx @isoso.dev/isoso scan
npx @isoso.dev/isoso rules
npx @isoso.dev/isoso explain --rule img-missing-alt --file src/App.tsx --line 12
Pin a version when you care about reproducibility:
npx @isoso.dev/isoso@0.3.3 scan
Install as a dev dependency in the app you want to scan, not in unrelated projects:
npm install -D @isoso.dev/isoso
Then run the isoso binary from that project (local install or npm scripts):
npx isoso scan
isoso rules
npx isoso … uses node_modules/.bin/isoso after install. npm @isoso.dev/isoso is not valid—npm expects subcommands like install, not a package name.
npm install -g @isoso.dev/isoso@latest
isoso scan
isoso --version
Global isoso does not auto-update when a new version is published. After upgrades on npm, run npm install -g @isoso.dev/isoso@latest again (or keep using npx @isoso.dev/isoso@latest …).
| You type | When it works |
|---|---|
npx @isoso.dev/isoso scan | Always (downloads/runs the published CLI) |
npx isoso scan | After npm install -D @isoso.dev/isoso in this directory |
isoso scan | After local install (npm script / node_modules/.bin) or global install |
npm @isoso.dev/isoso … | Never — use npm install or npx |
# Scan the current directory (AI if ISOSO_AI_KEY is in .env, else static rules)
npx @isoso.dev/isoso scan
# Or, after npm install -D @isoso.dev/isoso in this repo:
npx isoso scan
# Scan a sample app in this monorepo (after clone + build)
npx isoso scan examples/sample-app
# Static only—no API calls
npx @isoso.dev/isoso scan --static
# JSON for pipelines + fail the job on serious+ findings
npx @isoso.dev/isoso scan --format json -o isoso-report.json --fail-on serious
# See every rule id and WCAG mapping (57 rules; fixable rules tagged in output)
npx @isoso.dev/isoso rules
# Auto-fix static findings (preview first, then apply)
npx @isoso.dev/isoso fix --dry-run
npx @isoso.dev/isoso fix
# Explain one rule (AI when a key is set)
npx @isoso.dev/isoso explain --rule img-missing-alt --file src/App.tsx --line 12
Suggested package.json script:
{
"scripts": {
"a11y": "isoso scan --static --fail-on serious",
"a11y:report": "isoso scan --format json -o isoso-report.json",
"a11y:fix": "isoso fix --dry-run"
}
}
isoso scanScan a project tree for accessibility issues in JSX/TSX.
isoso scan [path] [options]
| Option | Default | Description |
|---|---|---|
[path] | . | Project root to scan |
-f, --format <type> | text | text or json |
-o, --output <file> | — | Write report to a file (stdout stays clean in JSON mode when combined with -o) |
--fail-on <severity> | serious | Exit code 1 if any finding is at or above this severity (critical, serious, moderate, minor) |
--rules <ids> | all | Comma-separated rule ids (e.g. img-missing-alt,button-missing-name) |
--static | — | Force built-in rules only |
--ai | — | Require AI scan (errors if ISOSO_AI_KEY is missing) |
What gets scanned
**/*.{tsx,jsx}node_modules, dist, build, .next, coverageExample text output (abbreviated)
Isoso accessibility scan
Engine: static rules
Root: /app
Files scanned: 42
Findings: 3
critical: 1
serious: 2
[critical] img-missing-alt — src/Hero.tsx:18:7
<img> is missing an alt attribute.
Fix: Add alt="..." describing the image, or alt="" if decorative.
Completed in 124ms
isoso fixApply automatic codemods for findings from the static rule engine. Each fixable rule id is marked [fixable] in isoso rules. Fixes run on the same .tsx / .jsx files as scan (AI findings are not auto-fixed).
isoso fix [path] [options]
| Option | Default | Description |
|---|---|---|
[path] | . | Project root |
--dry-run | — | List edits without writing files (default is to write) |
--rules <ids> | all fixable | Comma-separated fixable rule ids |
Typical workflow
isoso scan --static
isoso fix --dry-run # review proposed edits
isoso fix # apply to disk
Review diffs in git before merging—codemods handle common patterns but cannot replace judgment on every component.
isoso rulesPrint all static rules with id, human name, severity, and WCAG success criteria references.
isoso rules
Use the ids with --rules or isoso explain --rule <id>.
isoso explainExpand a finding into Summary, Impact, and Remediation.
isoso explain --rule <id> [options]
| Option | Description |
|---|---|
--rule <id> | Required. Rule id from isoso rules |
--file <path> | File path for context |
--line <n> | Line number (default 1) |
--message <text> | Override the finding message |
--snippet <text> | Code snippet from your scan |
--builtin | Curated WCAG guidance only—no API call |
Environment: ISOSO_AI_KEY in .env (see below). Optional ISOSO_AI_MODEL, ISOSO_AI_BASE_URL, or ISOSO_AI_CHAT_URL for your provider.
57 static checks ship with @isoso/core (images, forms, keyboard, landmarks, media, tables, focus, document structure, autocomplete, captions, and viewport). Severity drives --fail-on and CI gates.
List every rule id, WCAG reference, and severity:
npx @isoso.dev/isoso rules
Categories include: text alternatives (img-missing-alt, svg-missing-accessible-name, role-img-missing-label, …), keyboard & focus (click-without-keyboard-handler, tabindex-zero-without-role, outline-none-utility, …), forms (input-missing-label, label-without-htmlfor, fieldset-needs-legend, …), links & buttons, landmarks (nav-missing-label, multiple-main-landmarks, …), media, and document (html-missing-lang, multiple-h1).
Run a subset:
npx @isoso.dev/isoso scan --static --rules img-missing-alt,button-missing-name
Static (--static) | AI (default when key present) | |
|---|---|---|
| Speed | Very fast | Slower (per-file API calls) |
| Cost | Free | Provider usage (API billing) |
| Determinism | Same input → same output | May vary by model |
| Finding shape | ruleId, severity, WCAG, line, message, fix | Same schema as static rules |
Auto behavior
ISOSO_AI_KEY is set → AI scan (unless --static).--ai → fail fast if no key.Setup
.env.example → .env in this repo or in the app where you run isoso.ISOSO_AI_KEY=... (your provider’s API key)npx @isoso.dev/isoso scan (omit --static), or isoso scan after a local install.The CLI walks upward from the current working directory to find .env.
cp .env.example .env
# edit .env, then:
npx @isoso.dev/isoso explain --rule img-missing-alt --file src/App.tsx --line 24
Use --builtin on explain when you want zero network calls.
Custom AI provider (chat completions JSON API):
| Variable | Purpose |
|---|---|
ISOSO_AI_KEY | API key sent as Authorization: Bearer … |
ISOSO_AI_MODEL | Model id (default gpt-4o-mini) |
ISOSO_AI_CHAT_URL | Full chat completions URL |
ISOSO_AI_BASE_URL | Base URL; Isoso calls {BASE}/chat/completions |
Run isoso scan in any CI pipeline (GitHub Actions, GitLab CI, etc.). Exit code 1 when findings meet or exceed --fail-on.
# Example GitHub Actions step
- run: npx @isoso.dev/isoso scan --static --format json --fail-on serious -o isoso-report.json
Severity gate: --fail-on serious fails on critical and serious findings. Use --fail-on critical for a looser gate, or --fail-on moderate for stricter.
Tips
--static in CI for speed and predictable cost.ISOSO_AI_KEY in CI secrets only if you intentionally run AI in the pipeline.Read this before you gate releases, publish compliance claims, or treat scan output as proof of accessibility.
Isoso does not certify, audit, or guarantee that your application meets WCAG 2.x (any level), ADA, Section 508, EN 301 549, EAA, or any other accessibility standard or law.
| What Isoso does | What it does not do |
|---|---|
| Flags common JSX/TSX patterns mapped to WCAG-oriented heuristics | Prove conformance or “pass” an official audit |
| Helps teams catch issues early in source | Replace screen reader testing, keyboard QA, or user research |
| Produces CI-friendly reports and optional auto-fixes | Constitute legal sign-off, VPAT, or third-party certification |
Rule ids and WCAG references in isoso rules describe why a pattern is risky, not a determination that your product complies or violates the law. You remain responsible for your product’s accessibility and legal obligations.
The CLI analyzes .tsx / .jsx source files—not the live DOM, runtime CSS, content from CMS/APIs, PDFs, native apps, or third-party embeds. Findings can be false positives (safe patterns flagged) or false negatives (issues only visible at runtime or in production builds).
Use Isoso together with browser tools (e.g. axe DevTools, Lighthouse), manual testing, assistive technology checks, and professional audits when compliance matters.
isoso fix) risksCodemods apply mechanical edits. They can change behavior, break tests, or miss context (decorative vs informative images, custom components, design-system wrappers). Always review git diffs before merge; do not run fix unattended on production branches without review.
When ISOSO_AI_KEY is set, file snippets and rule context may be sent to your configured AI provider. You are responsible for provider terms, data handling, and never committing API keys to git.
--static in CI when you want zero external data transfer.--builtin on explain for offline, curated copy only.| Practice | Why |
|---|---|
Keep ISOSO_AI_KEY in .env or CI secrets | Keys in repo history are exposed forever |
Add .env to .gitignore | Local keys must not ship with the app |
| Scope CI secrets to jobs that need AI | Reduces blast radius if a workflow log leaks |
The CLI loads .env by walking up from the current working directory—it does not encrypt or store keys beyond what your shell and provider do.
--fail-on controls exit codes for your pipeline (e.g. fail on serious and above). That is your quality bar, not a mapping to WCAG conformance levels or legal safe harbor.
Dashboard scans, policies, and GitHub-connected runs on isoso.dev are subject to separate Terms and Privacy Policy. Cloud storage of findings does not mean your application is compliant.
If you believe you have found a security vulnerability in the Isoso CLI (not an accessibility finding in your app), report it responsibly via info@isoso.dev (subject: security). Do not open public issues with exploit details before coordination.
| Package | npm name | Role |
|---|---|---|
packages/isoso-cli | @isoso.dev/isoso | CLI entrypoint (scan, fix, rules, explain); binary name isoso |
packages/isoso-core | @isoso/core | Rule engine, reports, AI scan + explain |
packages/isoso-scanner | @isoso/scanner | Glob + Babel JSX extraction, orchestrates core |
Published @isoso.dev/isoso bundles vendored @isoso/core and @isoso/scanner for a single install.
From the monorepo root:
npm install
npm run build
npm test # @isoso/core unit tests
npx isoso scan examples/sample-app
| Script | Action |
|---|---|
npm run build | Build core → scanner → copy vendor → build CLI |
npm run dev | Build and run CLI via Node |
Sample violations: examples/sample-app/BadExample.tsx intentionally breaks several rules—use it to verify scans locally.
Need org-wide dashboards, GitHub-connected repo scans, teams, policies, and billing? That lives in Isoso Web / Cloud, not in this CLI repo. The CLI remains the open-source local and CI story; cloud scans align on the same rule IDs where static heuristics apply.
MIT — see LICENSE.
Ship accessible UI earlier. Run npx @isoso.dev/isoso scan on your app, then npx @isoso.dev/isoso fix for safe auto-edits.