Skip to content

Devtools panel

createDevtoolsPanel mounts a floating overlay on the page that shows what every feature is doing, in real time. Use it during development; gate it behind your own dev flag for production.

import { createDevtoolsPanel } from "mountly";
if (import.meta.env.DEV) {
createDevtoolsPanel({
features: [signupFeature, paymentFeature, lightboxFeature],
position: "bottom-right",
collapsed: true,
});
}

The panel adds itself to <body> and unsubscribes from analytics events when removed.

For each registered feature:

  • Current state (idle / preloading / preloaded / activating / activated / mounted / aborted).
  • Phase timings from the last lifecycle (preload, activate, mount durations in ms).
  • Module cache hit/miss for the last load.
  • Active mount containers.

It also shows a rolling log of analytics events (the same events onAnalyticsEvent exposes) and the contents of the module + data caches.

OptionTypeDefaultNotes
featuresOnDemandFeature[]requiredFeatures to inspect.
position"top-left" · "top-right" · "bottom-left" · "bottom-right""bottom-right"Anchor on screen.
collapsedbooleanfalseStart collapsed.
theme"auto" · "light" · "dark""auto"Match the page or override.
maxLogEntriesnumber100Trim the analytics ring buffer.

The panel is a development aid, not a runtime feature. Gate it with import.meta.env.DEV, process.env.NODE_ENV !== "production", or whatever your bundler uses. Tree-shake it out of production builds.