Two separate JS/CSS bundles. They run in different places and serve different purposes.
assets/
├── app/ # the LiveDebugger UI itself (served at the debugger endpoint)
└── client/ # injected into the *debugged* application's pages
Each is its own npm package with its own package.json, node_modules, and entry point.
They are bundled independently by esbuild via the LiveDebugger mix tasks.
app/ |
client/ |
|
|---|---|---|
| Loaded by | app/web/layout.ex |
A meta-tag injected by LiveDebugger |
| Includes Tailwind | Yes (v4) | No (scoped CSS only - must not leak into the host app) |
JS and CSS for the LiveDebugger UI. Uses Tailwind v4.
app.js is the entrypoint of the application.
All non-hook JS logic goes there.
Themes are defined as CSS variables in app/styles/themes/.
To add a new color:
- Add the variable to both
themes/light.cssandthemes/dark.css. - Add a Tailwind color mapping in
tailwind.config.jspointing atvar(--your-var).
A tiny bundle injected into the debugged application's pages. It is responsible for gathering information, rendering LiveDebugger overlays, tooltips and debug button. Styles are scoped (use prefix for classes) to ensure nothing leaks into the host page.
LiveDebugger injects a meta tag into every page of the debugged app (part of installation process). It allows creation of separate Phoenix socket which communicates with LiveDebugger.
Once joined, communication is bidirectional over the channel.