Lightweight Chromium extension (Chrome + Edge) + local MCP bridge for annotation-first UI pair programming.
Powered by onLLM.dev.
Note
onUI is now stable and production-ready.
Click the preview above to play the full demo video.
- 🧩 No integration into app code
- 🎛️ Per-tab ON/OFF control (off by default)
- 🎯 In-page annotation dialog with intent + severity
- ✍️ Draw mode for region annotations (rectangle + ellipse)
- ⚙️ Compact toolbar with pop-out settings (output level + clear on copy)
- 👀 Visual markers and hover targeting
- 🧾 Export outputs in compact / standard / detailed / forensic formats
- 🛡️ Shadow DOM isolation for stable styling
- 🔌 Local MCP server + native bridge (no cloud backend required)
Install directly from Chrome Web Store:
https://chromewebstore.google.com/detail/onui/hllgijkdhegkpooopdhbfdjialkhlkan?authuser=0&hl=en-GB
macOS/Linux:
curl -fsSL https://github.com/onllm-dev/onUI/releases/latest/download/install.sh | bashWindows (PowerShell):
irm https://github.com/onllm-dev/onUI/releases/latest/download/install.ps1 | iexThe installer handles extension install and can set up MCP in the same run.
When prompted with Set up local MCP bridge now? [y/N], enter y to enable MCP.
Then load it in Chrome or Edge:
- Open
chrome://extensionsoredge://extensions - Enable Developer mode
- Click Load unpacked
- Select
~/onUI/extensions/current(or%USERPROFILE%\onUI\extensions\currenton Windows)
Chromium browsers require this final manual step for unpacked extensions.
- Open any supported website tab.
- Click the onUI extension icon.
- Enable
This Tab. - Use the on-page launcher to open the compact toolbar.
- Toggle Annotate mode for element targeting or Draw mode for region targeting.
- Hold
Shiftand click multiple elements to batch-select targets. - Release
Shiftto open a shared annotation dialog for selected targets. - Save once to create one annotation per selected element (or one region annotation in draw flow).
- Open toolbar Settings to choose output level and configure Clear on copy.
- Copy exported output from the toolbar.
Recommended path: use the same installer command above and answer y when prompted.
If you want to force MCP setup in non-interactive mode:
macOS/Linux (--mcp):
curl -fsSL https://github.com/onllm-dev/onUI/releases/latest/download/install.sh | bash -s -- --mcpWindows (PowerShell, set env var before running installer):
$env:ONUI_INSTALL_MCP=1; irm https://github.com/onllm-dev/onUI/releases/latest/download/install.ps1 | iexMCP setup now uses a prebuilt release bundle (no local build required), but still needs Node 20+.
Manual MCP setup from source is still supported:
pnpm build:mcp
pnpm setup:mcp
pnpm doctor:mcpIf your MCP router uses an object-style mcpServers map, use this canonical entry:
{
"mcpServers": {
"onui-local": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/onUI/packages/mcp-server/dist/bin/onui-cli.js",
"mcp"
]
}
}
}Use an absolute path for onui-cli.js (relative paths are often rejected or resolved incorrectly by routers).
If your router uses a list/array schema instead of an object map, adapt the same command/args shape like this:
{
"servers": [
{
"name": "onui-local",
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/onUI/packages/mcp-server/dist/bin/onui-cli.js",
"mcp"
]
}
]
}The list example above is a schema adaptation pattern, not a claim about any specific router's exact key names.
Setup/verification notes:
-
Run
pnpm build:mcpfirst sopackages/mcp-server/dist/bin/onui-cli.jsexists. -
Keep the server entry name as
onui-local. -
Run
pnpm doctor:mcpafter wiring config to confirm local setup health. -
Auto-registers
onui-localfor Claude Code and Codex when those CLIs are installed. -
Browser support in this release: Chrome stable + Edge stable (unpacked).
-
@onui/mcp-serveris workspace-local (private: true), so run setup/doctor from this repo.
See:
docs/mcp-setup.mddocs/doctor.mddocs/release.md
app.sh is the local release entrypoint (no CI/CD dependency).
./app.sh --buildThis runs:
- Prereq checks (Node 20+, pnpm, git, zip)
- Build order:
@onui/core->@onui/extension->@onui/mcp-server - MCP tests
- MCP doctor smoke check (warnings allowed, errors fail)
- Artifact packaging into
artifacts/vX.Y.Z/
Artifacts:
onui-extension-unpacked-vX.Y.Z.ziponui-chrome-web-store-vX.Y.Z.zip(manifestkeystripped for CWS)onui-edge-add-ons-vX.Y.Z.zip(manifestkeystripped for Edge Add-ons)onui-mcp-bundle-vX.Y.Z.zipinstall.shinstall.ps1checksums.txt
./app.sh --releaseRelease gates:
- Clean git tree
- Current branch is
main gh auth statussucceeds
Release actions:
- Auto patch bump from root
package.json - Sync version across extension + MCP runtime strings
- Run full
--build - Commit + tag
vX.Y.Z - Push commit/tag
- Create GitHub release with packaged assets
pnpm install
pnpm check
pnpm test:coveragepackages/
core/ Shared annotation/report types + formatters
extension/ Chromium extension runtime (background/content/popup)
mcp-server/ Local MCP server + native bridge setup/doctor tooling
If onUI is useful to you, please star the repo: https://github.com/onllm-dev/onUI
It helps other users discover the product.
GPL-3.0