
Security News
vlt 1.5.0 Adds Agent Skills Management
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.
@devlens/ui
Advanced tools
A visual debug panel that shows every runtime issue in your app -- right in the browser.
Console logs scroll away. You miss the warning that fired 30 seconds ago. You can't filter, you can't search, you can't export.
DevLens UI gives you a floating debug panel -- isolated in Shadow DOM, fully filterable, searchable, and exportable. One line of code.
Ctrl+Shift+D, never leaves your viewport; button shows a lens icon with the shortcut on hovernpm install @devlens/core @devlens/ui
import { createDetectionEngine } from '@devlens/core';
import { createDevLensPanel, createPanelReporter } from '@devlens/ui';
const { panel, reporter, destroy } = createDevLensPanel({
position: 'bottom-right', // 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'
theme: 'dark', // 'dark' | 'light'
hotkey: 'ctrl+shift+d', // customizable hotkey
});
const engine = createDetectionEngine({ reporter });
// That's it. Issues now appear in the panel.
import { DevLensProvider } from '@devlens/react';
import { createDevLensPanel } from '@devlens/ui';
const { reporter } = createDevLensPanel({ theme: 'dark' });
function App() {
return (
<DevLensProvider config={{ reporter }}>
<YourApp />
</DevLensProvider>
);
}
import { createDevLensPlugin } from '@devlens/vue';
import { createDevLensPanel } from '@devlens/ui';
const { reporter } = createDevLensPanel({ theme: 'dark' });
app.use(createDevLensPlugin({ reporter }));
createDevLensPanel({
position: 'bottom-right', // toggle button position
theme: 'dark', // 'dark' | 'light'
hotkey: 'ctrl+shift+d', // keyboard shortcut to toggle
panelWidth: 420, // panel width in pixels
panelHeight: 520, // panel height in pixels
defaultOpen: false, // start with panel open?
dashboardUrl: 'http://localhost:5173/__devlens__', // optional: show dashboard button
});
| Action | How |
|---|---|
| Toggle panel | Click the floating lens button or press Ctrl+Shift+D |
| Filter by severity | Click Error / Warn / Info / All buttons |
| Search issues | Type in the search bar (filters by message, path, category, source) |
| View issue details | Click any issue row to expand |
| Switch views | Toggle between List and Timeline in the footer |
| Export JSON | Click the JSON button in the header |
| Export CSV | Click the CSV button in the header |
| Clear all issues | Click the CLR button in the header (turns red on hover) |
| Open dashboard | Click the monitor button above the toggle (when dashboardUrl is set) |
Open the hosted DevLens dashboard (served by @devlens/vite) automatically on the first detected issue, or let users open it manually.
import { createDetectionEngine } from '@devlens/core';
import { createDashboardOpener, createDashboardReporter } from '@devlens/ui';
const opener = createDashboardOpener({
dashboardUrl: 'http://localhost:5173/__devlens__',
// sessionId?: string -- auto-generated if omitted
// windowName?: string -- window.open target, default 'devlens-dashboard'
});
const engine = createDetectionEngine({
reporter: createDashboardReporter(opener),
});
// Dashboard opens automatically in a new tab when the first issue is detected.
opener.open(); // open (or focus) the dashboard window
opener.close(); // close it
opener.isOpen // true if window is currently open
opener.sessionId // session ID used (append to dashboard URL)
opener.dashboardLink // full URL: dashboardUrl + '?session=' + sessionId
Add a monitor-icon button above the main toggle that opens the dashboard on click:
createDevLensPanel({
dashboardUrl: 'http://localhost:5173/__devlens__',
});
The button appears 50px above the main toggle, styled consistently with the panel. Hover turns it brand-purple.
// vite.config.ts
import devlens from '@devlens/vite';
export default {
plugins: [devlens()],
// Dashboard available at http://localhost:5173/__devlens__
};
// main.ts
const opener = createDashboardOpener({
dashboardUrl: `${location.origin}/__devlens__`,
});
const engine = createDetectionEngine({
reporter: createDashboardReporter(opener),
});
The inspector opens a separate popup window (or navigates to a hosted dashboard URL) with full sidebar navigation, issue detail view, timeline, and AI Analysis.
import { createDevLensInspector, createInspectorReporter } from '@devlens/ui';
// Legacy popup mode
const inspector = createDevLensInspector();
// Or point at a hosted dashboard
const inspector = createDevLensInspector({
dashboardUrl: 'http://localhost:5173/__devlens__',
});
const engine = createDetectionEngine({
reporter: createInspectorReporter(inspector),
});
@devlens/ui includes a license key system for gating premium features:
import { createLicenseManager, createFeatureGate, generateLicenseKey } from '@devlens/ui';
const key = generateLicenseKey();
// => "DL-0AK3-M8X2-PQR5-TN7W"
const license = createLicenseManager();
license.activate(key);
console.log(license.isPro()); // true
const gate = createFeatureGate(license);
gate.isEnabled('timeline-view'); // true (Pro)
gate.isEnabled('search'); // true (Free)
Free features: issue-detail, search
Pro features: timeline-view, session-persistence, export-json, export-csv, category-filter
| Export | Description |
|---|---|
createDevLensPanel(config?) | Creates the floating panel. Returns { panel, reporter, destroy }. SSR-safe. |
createPanelReporter(panel) | Reporter adapter that feeds issues to the panel. |
createDashboardOpener(config) | Opens the hosted DevLens dashboard in a new window. Returns { open, close, destroy, isOpen, sessionId, dashboardLink }. SSR-safe. |
createDashboardReporter(opener) | Reporter adapter that auto-opens the dashboard on the first issue. |
createDevLensInspector(config?) | Opens a dedicated inspector window. Returns { sendIssue, sendClear, open, close, destroy, connected, isOpen, sessionId, dashboardLink }. SSR-safe. |
createInspectorReporter(inspector) | Reporter adapter that auto-opens the inspector on first issue. |
createAdapter(sessionId) | Low-level BroadcastChannel + postMessage adapter for inspector communication. |
createPanel(host, config?) | Low-level panel constructor (attach to your own host element). |
createPersistenceManager() | localStorage-backed issue persistence (max 200 issues). |
exportAsJSON(issues) | Serialize issues array to formatted JSON string. |
exportAsCSV(issues) | Serialize issues array to CSV string with headers. |
downloadFile(content, filename, mimeType) | Trigger browser file download. |
createLicenseManager() | License key management with localStorage persistence. |
createFeatureGate(license) | Feature access control based on license status. |
generateLicenseKey() | Generate a valid DL-XXXX-XXXX-XXXX-XXXX license key with checksum. |
| Export | Description |
|---|---|
PanelConfig | { position?, theme?, hotkey?, panelWidth?, panelHeight?, defaultOpen?, dashboardUrl? } |
PanelInstance | Panel with open(), close(), toggle(), addIssue(), clear(), getIssues(), destroy() |
DashboardOpenerConfig | { dashboardUrl, sessionId?, windowName? } |
DashboardOpenerInstance | { open(), close(), destroy(), isOpen, sessionId, dashboardLink } |
InspectorConfig | { width?, height?, sessionId?, dashboardUrl? } |
InspectorInstance | Inspector with sendIssue(), sendClear(), open(), close(), destroy(), connected, isOpen, sessionId, dashboardLink |
LicenseManager | getStatus(), getInfo(), activate(key), deactivate(), isPro() |
LicenseInfo | { status: LicenseStatus, key: string | null, expiresAt: number | null } |
LicenseStatus | 'free' | 'pro' | 'invalid' |
FeatureGate | isEnabled(feature), getFreeFeatures(), getProFeatures(), getAllFeatures() |
Feature | 'timeline-view' | 'session-persistence' | 'export-json' | 'export-csv' | 'issue-detail' | 'search' | 'category-filter' |
PersistenceManager | save(issues), load(), clear() |
InspectorAdapter | Low-level adapter with send(), start(), stop(), sendIssue(), sendClear(), connected |
document is unavailableNODE_ENV === 'production'@devlens/core version injected at build time| Version | Feature | Status |
|---|---|---|
| v1.0 | Debug panel with filtering, search, export, persistence, license gating | Done |
| v1.1 | Inspector window with AI-powered analysis (Gemini, Claude, GPT) | Done |
| v1.2 | Inspector dashboardUrl option -- navigate to hosted dashboard instead of Blob popup | Done |
| v1.3 | Dashboard opener, panel button, search fix, icon button, polished header actions | Done |
| v2.0 | Deep AI integration -- real-time pattern detection across issues, auto-fix generation, CI/CD integration | Planned |
FAQs
DevLens UI Panel - visual issue overlay for browser debugging
The npm package @devlens/ui receives a total of 0 weekly downloads. As such, @devlens/ui popularity was classified as not popular.
We found that @devlens/ui demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
vlt 1.5.0 links skills from JavaScript dependencies to coding agents, with lockfile versioning and Socket data to filter out known malicious packages.

Security News
Rust 1.100 will add opt-in dependency cooldowns to Cargo, giving security scanners and maintainers time to catch malicious crate releases.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.