LocalMode /ui
DevTools

DevTools

Local-AI observability surfaces — queue, event, pipeline, and model-cache monitors that render @localmode/devtools hook snapshots (or any backend's data) with zero @localmode dependencies.

The DevTools family turns on-device AI observability into copy-owned UI. Each primitive renders plain props — the recommended producers are the nine hooks on @localmode/devtools/react, but any backend that shapes the same data works ("local-first by design, cloud-compatible by contract").

Components

ComponentRendersRecommended hook
Inference Queue MonitorPer-queue pending / active / completed / failed / avg-latencyuseDevToolsQueueStats
Event Log ViewerNewest-first namespaced event stream with filter + capuseDevToolsEvents
Pipeline Run InspectorPer-run status, progress, current step, durationsuseDevToolsPipelineRuns
Model Cache TableCached models: status, load time, last used, size, evictuseDevToolsModelCache

Widget-parity map

This family (plus two reused local-first items) supersedes the deprecated DevToolsWidget's six panels:

Widget panelSuccessor
Queueui/devtools/inference-queue-monitor
Eventsui/devtools/event-log-viewer
Pipelineui/devtools/pipeline-run-inspector
Modelsui/devtools/model-cache-table
Deviceui/local-first/device-capability-grid (reused — device data is not devtools-specific)
VectorDBui/local-first/vector-storage-observability (reused; per-collection op counts come from useDevToolsVectorDBs)

Wiring

Collectors are off until you opt in — enable them once, then render hook snapshots straight into the primitives:

import { enableDevTools } from '@localmode/devtools';
import { useDevToolsQueueStats } from '@localmode/devtools/react';
import { InferenceQueueMonitor } from '@/components/inference-queue-monitor';

enableDevTools(); // e.g. behind your own debug toggle

export function QueuePanel() {
  const queues = useDevToolsQueueStats();
  return <InferenceQueueMonitor queues={queues} />;
}

The composed drawer

A ready-made six-tab drawer (Queue / Events / Pipeline / Models / Device / VectorDB) that wires all of the above ships as an installable block:

npx shadcn@latest add @localmode/ui/blocks/devtools-drawer

Blocks are the wiring layer, so the drawer legitimately depends on @localmode/devtools — the four primitives above stay zero-@localmode/*.

On this page