Visulima Dev Toolbar

A framework-agnostic development toolbar for Vite applications with built-in accessibility auditing, visual annotations, click-to-source inspector, AI agent integration via MCP, performance monitoring, SEO inspection, and an extensible app system.

Last updated:

@visulima/dev-toolbar is a powerful, extensible development toolbar for any Vite-based project — React, Vue, Svelte, SolidJS, or plain HTML. Inspired by Astro DevToolbar, Vue DevTools, and Nuxt DevTools, it brings a consistent developer experience regardless of your framework.

The toolbar renders inside a Shadow DOM custom element for complete CSS isolation, communicates with the Vite dev server over type-safe RPC, and ships eleven built-in apps covering the most common development workflows.

Requirements: Vite 6, 7, or 8 · Node.js 22.21+

Features

Framework Agnostic

Works with any Vite project. React, Vue, Svelte, SolidJS — zero framework assumptions.

11 Built-in Apps

Accessibility auditing, Annotations, Assets browser, Inspector, Module Graph, Performance metrics, SEO inspection, Settings, Tailwind tokens, Timeline events, and Vite Config viewer — out of the box.

Visual Annotations

Click elements to annotate them with intent, severity, and context. Annotations persist to disk and are readable by AI agents via MCP.

AI Agent Integration

MCP server exposes annotations to coding agents like Claude Code. Agents read context, fix issues, and resolve annotations — no copy-paste needed.

Click-to-Source Inspector

Click any element to jump to its JSX source in your editor. Supports React, Vue, and Svelte component detection with Shadow DOM piercing.

Extensible App System

Register custom apps with Preact components, full RPC access, and tooltip support. Build your own devtools panel in minutes.

Type-safe RPC

Bidirectional communication between the browser and Vite's Node.js process. Inspect files, open editors, read configs — all typed end-to-end.

Persistent State

Panel size, position, theme, and keyboard shortcuts are saved to localStorage and restored across page reloads automatically.

Library Integration

Third-party libraries can hook in via __DEV_TOOLBAR_HOOK__ without any direct dependency, enabling zero-config devtools for your users.

Built-in Apps at a Glance

AppIDWhat it does
Accessibilitydev-toolbar:a11yaxe-core WCAG audit with live element overlays
Annotationsdev-toolbar:annotationsVisual annotations with AI agent integration via MCP
Assetsdev-toolbar:assetsBrowse, preview, and inspect static files in publicDir
Inspectordev-toolbar:inspectorClick any element to jump to its source in your editor
Module Graphdev-toolbar:module-graphBrowse and filter Vite's live module graph
Performancedev-toolbar:performanceWeb Vitals, resource timing, navigation metrics
SEOdev-toolbar:seoSocial preview cards + meta tag audit
Settingsdev-toolbar:settingsTheme, toolbar behaviour, keyboard shortcuts
Tailwinddev-toolbar:tailwindBrowse resolved Tailwind CSS v4 design tokens
Timelinedev-toolbar:timelineChronological event log from your app and libraries
Vite Configdev-toolbar:vite-configInspect the resolved Vite configuration

How it Works

The toolbar is injected into the page by a Vite plugin as a <dev-toolbar> custom element. It renders a Preact UI inside Shadow DOM — so no styles leak in or out. Each "app" is a Preact component that receives RPC helpers and renders inside a resizable, draggable panel.

Browser                          Vite Dev Server           AI Agent
──────────────────────────────   ────────────────────────  ──────────────
<dev-toolbar> (Shadow DOM)  ←──  HTML injection             MCP Server
  ├── Toolbar pill                ├── RPC handler      ←──→ ├── get_pending_annotations
  ├── Panel canvas       ←──────→ ├── getViteConfig()       ├── get_screenshot
  │   ├── App: A11y               ├── getModuleGraph()      ├── resolve_annotation
  │   ├── App: Inspector          ├── openInEditor()        └── watch_annotations
  │   ├── App: Annotations        ├── getAnnotations()
  │   ├── App: Performance        └── saveScreenshot()
  │   └── App: SEO
  ├── Settings (localStorage)
  └── Annotations (.devtoolbar/)

Keyboard Shortcuts

ActionDefault
Toggle toolbar open/closeAlt+Shift+D
Close active app / panelEscape

Both shortcuts are fully configurable in the Settings app or via the plugin options.

Support

Contribute to our work and keep us going

Community is the heart of open source. The success of our packages wouldn't be possible without the incredible contributions of users, testers, and developers who collaborate with us every day.Want to get involved? Here are some tips on how you can make a meaningful impact on our open source projects.

Ready to help us out?

Be sure to check out the package's contribution guidelines first. They'll walk you through the process on how to properly submit an issue or pull request to our repositories.

Submit a pull request

Found something to improve? Fork the repo, make your changes, and open a PR. We review every contribution and provide feedback to help you get merged.

Good first issues

Simple issues suited for people new to open source development, and often a good place to start working on a package.
View good first issues