Your app stays on your machine.
No account, cloud service, API key, telemetry, or upload path. Export redaction is applied again before data leaves the panel.
Click a rendered element. CauseScope follows it back to the exact TSX, live expression, deciding branch, state transition, prop, store, or request that produced it.
localhost:5173/ordersINSPECTING
CauseScope keeps the DOM, source, runtime values, and update history connected—so each answer shows where it came from.
Select text, buttons, inputs, lists, or any ordinary DOM element.
See the component, file, line, column, source snippet, and component stack.
Inspect operands, computed results, conditions, props, hooks, and stores.
Follow setter calls, events, network requests, and storage changes over time.
The disabled button is only the symptom. The useful answer is the branch and the live value behind it.
<button disabled={!canRefund}>canRefund → falseorder.status === "paid" → falseorder.status = "pending"GET /api/orders/4821 · 200No account, cloud service, API key, telemetry, or upload path. Export redaction is applied again before data leaves the panel.
Jump from a normal page element to its exact TSX location, then switch directly to another element without restarting inspection.
The plugin runs only in Vite’s development server. Production builds contain no overlay, endpoint, instrumentation, or debug attributes.
CauseScope complements the tools already in a React developer’s browser.
| Tool category | Best at | Evidence chain |
|---|---|---|
| React DevTools | Component tree, props, and hooks | Component-level runtime view |
| Performance scanners | Finding expensive renders | Performance observations |
| Source locators | Opening a component file | UI → source location |
| CauseScope | Explaining why rendered UI has its current value or state | UI → TSX → decision → update origin |
CauseScope supports React 18–19 and Vite 5–8. This repository is a pnpm Workspace + Turborepo monorepo; consumers can use any npm-compatible package manager.
$ pnpm add -D causescope@beta
import causeScope from "causescope/vite";
export default defineConfig({
plugins: [react(), causeScope()],
});