COMMAND LINE · YOUR MACHINE · YOUR REPOSITORY
The engine runs where your browsers are.
BhashaFix opens real browsers, renders every selected locale at every declared viewport, measures what breaks and writes the evidence beside your code. Source, credentials and repair operations stay inside your environment; the report bundle is the part you share.
One command, in your project
pnpm bhashafix scan --url http://localhost:3000 --locales en-GB,de-DE,ar-SA,ja-JP
Runs from the repository today. Clone-and-run and packed-tarball installation are both exercised by the release checks below; no unpublished registry command is presented as usable.
Two working routes
1 · Clone and run
Works today, with no package registry involved.
git clone https://github.com/vaibhav4046/bhashafix cd bhashafix pnpm install pnpm exec playwright install chromium pnpm bhashafix scan --url https://example.com
2 · Pack a tarball and install it
Produces the same executable a published package would. `pnpm pack:verify` runs exactly this into a clean temporary consumer outside the repository.
pnpm --filter @bhashafix/cli build cd packages/cli pnpm pack --pack-destination ../../artifacts npm install -g ../../artifacts/bhashafix-cli-0.2.0.tgz bhashafix scan --url http://localhost:3000 --locales en-GB,de-DE,ar-SA,ja-JP
What the local run adds
| Capability | Hosted browser quick scan | Local CLI |
|---|---|---|
| Real HTTP responses, metadata, static translation signals | yes | yes |
| Chromium rendering per locale and viewport | yes | yes |
| Full-page screenshots | yes | yes |
| Layout overflow and clipping measurement | yes | yes |
| axe accessibility execution | yes | yes |
| Console errors and failed requests | yes | yes |
| Full route × locale × viewport matrix | no | yes |
| Authenticated routes | no | yes |
| Bounded source repair and rerun | no | yes |
Repair and prove
pnpm bhashafix repair --project . # dry run: writes the diff, changes nothing pnpm bhashafix repair --project . --apply # applies only allowlisted paths pnpm bhashafix verify --project . # reruns the identical predicates
A repair needs an explicit scan ID, explicit issue IDs and an exact path allowlist. The dry run is the default, and an applied change is checked with git apply --check before it lands.
What a run writes
scan.json- the scan record: config, routes discovered, locales tested, every issue with its measurement and the predicate it failed
renders.json- one row per render: route, locale, viewport, theme, HTTP status, duration, elements measured, console errors, failed requests, axe violations
screenshots/- one PNG per render, referenced by every issue measured in it
report.json · report.html · report.sarif · junit.xml · issues.csv- portable exports of the same scan
repair.patch- the unified diff a repair proposes, confined to the allowlist
repair-proof.json- the proof capsule: baseline blocking, final blocking, source-locale regression, and which fields were not measured
Exit codes: 0 passed · 1 blocking · 2 invalid config · 3 unavailable · 4 runtime · 5 provider unavailable.
Honest limits
- Browser coverage depends on the Playwright runtimes installed. Chromium is verified; Firefox and WebKit are environment-dependent.
- Public sites may block automation, require authentication or prohibit crawling. A run that cannot fetch reports that, rather than producing a result.
- Linguistic judgements carry confidence and can require native human review. The deterministic engineering checks are the authoritative ones.