foo_ui_webview2
Health Warn
- License — License: GPL-3.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Warn
- fs module — File system access in docs/vitepress/postbuild.cjs
- fs module — File system access in mcp/package.json
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
A WebView2 UI framework for foobar2000 - build the entire player in web tech (Vue/React) with native Windows 11 Mica/Acrylic effects. Ships a TypeScript SDK and an MCP server for AI agents.
English | 中文
foo_ui_webview2
Documentation: https://nereafantasia.github.io/foo_ui_webview2/
A modern UI component for foobar2000 built on WebView2 (C++ DLL). It turns the entire foobar2000 window into a WebView2 canvas, letting you build the interface with modern web technologies while keeping native Windows 11 visual effects (Mica/Acrylic).
- Version: 1.9.0
- License: GPL-3.0-or-later (main component) / MIT (
sdk/)
Features
- Full WebView2 UI — the entire client area is rendered by WebView2
- Native Windows 11 effects — Mica / Acrylic / Tabbed backgrounds
- Extended title bar into the client area — custom title bar content, Snap Layout support
- Bidirectional C++ / JS bridge (BridgeCore)
- 200+ APIs across 20+ namespaces
- Plugin extension system (PluginRegistry)
- Web Components library (fb-* elements)
- SMP compatibility layer
- MCP Server — AI agent integration via CDP
- DUI / CUI panel support
Tech Stack
| Layer | Technology |
|---|---|
| C++ component | C++20, VS 2022 (v145), Windows SDK 10.0 |
| WebView2 | Microsoft.Web.WebView2 1.0.3719.77 (NuGet) |
| WIL | Microsoft.Windows.ImplementationLibrary 1.0.240803.1 |
| JSON | nlohmann/json |
| foobar2000 | SDK v2.0+ (lib/) |
| Columns UI | SDK (git submodule: lib/columns_ui-sdk) |
| TypeScript SDK | foo-webview-sdk (sdk/, MIT, tsup) |
| MCP Server | foo-ui-webview2-mcp (mcp/, Node.js 18+) |
npm Packages
The two JavaScript packages below are published to npm and can be installed directly (no source build required):
| Package | Install / Use | Description |
|---|---|---|
foo-webview-sdk |
npm install foo-webview-sdk |
Theme / frontend SDK (Bridge API + Web Components + SMP compatibility layer), see sdk/ |
foo-ui-webview2-mcp |
npx foo-ui-webview2-mcp |
MCP Server for AI agents to drive foobar2000 over CDP, see mcp/ |
Project Structure
foo_ui_webview2/
├── src/ # C++ source code
│ ├── core/ # WebView core, UserInterface, etc.
│ ├── window/ # MainWindow, PopupWindow, WindowManager
│ ├── webview/ # WebView host and environment
│ ├── api/ # BridgeCore + API handlers
│ ├── callbacks/ # foobar2000 SDK event callbacks
│ ├── panels/ # DUI/CUI panel integration
│ ├── selection/ # Selection tracking
│ ├── interfaces/ # Service abstractions
│ └── utils/ # Utility functions
├── sdk/ # TypeScript SDK (foo-webview-sdk)
│ ├── src/ # Source (bridge/, components/, smp/, types/)
│ └── package.json
├── mcp/ # MCP Server (AI agent CDP bridge)
│ ├── src/ # TypeScript source
│ └── tests/ # Unit + E2E tests
├── tests/ # C++ unit tests (GoogleTest)
├── docs/vitepress/ # User documentation site
├── lib/ # Third-party libraries
│ ├── foobar2000_sdk/ # foobar2000 SDK (BSD)
│ ├── columns_ui-sdk/ # Columns UI SDK (submodule)
│ └── json/ # nlohmann/json (MIT)
├── build.ps1 # Standard build script
├── build-package.ps1 # .fb2k-component packaging
├── foo_ui_webview2.sln # VS solution
├── foo_ui_webview2.vcxproj # VS project file
└── packages.config # NuGet package config
Build
Requirements
- Visual Studio 2022 (17.8+), v145 toolset
- Windows SDK 10.0.22621+
- WebView2 Runtime
- Node.js 18+ (to build the SDK / MCP / docs site)
C++ Component
# Standard build
.\build.ps1 -Config Release -Platform x64
# Package .fb2k-component (x86 + x64)
.\build-package.ps1
TypeScript SDK (build from source, for development)
Consumers do not need to build it — just
npm install foo-webview-sdk(see "npm Packages" above).
cd sdk
npm run build
MCP Server (build from source, for development)
Consumers do not need to build it — just
npx foo-ui-webview2-mcp(see "npm Packages" above).
cd mcp
npm install
npm run build
WebUI / Themes
The component ships without a built-in frontend. Place your WebUI under your foobar2000 profile directory at webview-ui\<template>\, with index.html as the required entry point at the template root (e.g. <profile>\webview-ui\default\index.html). <template> defaults to default and can be managed / switched from the component's preferences page. The legacy location <component dir>\foo_ui_webview2_resources\dist\ is still supported for backward compatibility. Restart foobar2000 to load it. You can build custom themes on top of sdk/ (foo-webview-sdk).
API Overview
200+ APIs span the following namespaces:
playback, playlist, library, window, config, file, dialog, clipboard, shell, http, keyboard, ui, lyrics, metadata, audio, console, dnd, queue, discovery, replaygain, playcount, titleformat, selection, port
Events (colon format)
playback:trackChanged, playback:paused, playback:stopped, playback:seeked,
playback:volumeChanged, playback:time, playlist:itemsAdded, playlist:itemsRemoved,
playlist:activated, playlist:created, playlist:removed, playlist:renamed,
playlist:selectionChanged, metadb:changed, plugin:registered, api:registered
Usage Example
// invoke uses dot format
const track = await fb2k.invoke('playback.getCurrentTrack');
const results = await fb2k.invoke('library.search', { query: 'artist:Radiohead' });
// event listeners use colon format
fb2k.on('playback:trackChanged', (track) => { /* ... */ });
Plugin Extensions
Other foobar2000 plugins can register APIs through PluginRegistry for the frontend to call:
#include "api/PluginRegistry.h"
void RegisterMyApis() {
auto& registry = PluginRegistry::GetInstance();
registry.RegisterPlugin("my_plugin", "My Plugin", "1.0.0", "Author", "Description");
registry.RegisterExternalApi("my_plugin", "doSomething",
[](const json& params) -> json {
return {{"result", "done"}};
},
"Perform an operation"
);
}
const result = await fb2k.invoke('my_plugin.doSomething', { param1: 'value' });
Security Restrictions
Threat model. This is a dedicated, domain-specific UI host for foobar2000 — themes come from you or trusted sources, so installing a theme carries the same trust as installing any foobar2000 component. The goal is therefore fail-safe (stop a buggy theme from accidentally harming the system), not sandboxing untrusted code; over-locking-down such a specialized component would only tie its own hands. The real guardrails are path validation and protocol checks:
| API | Restriction |
|---|---|
| shell.exec / shell.spawn | No command / executable allowlist — commands run as given; cwd and absolute paths are validated by PathSecurity (trusts the theme author; this is not a sandbox) |
| shell.openWith | Blocklist — opening 29 executable / script extensions (.exe, .bat, .ps1, .dll, .lnk, …) is refused |
| file.read/write | Path restrictions — system directories (C:\Windows, C:\Program Files, C:\ProgramData) are inaccessible; writes are limited to the foobar2000 config dir and %TEMP% |
| http.get/post | SSRF protection — localhost / private / link-local addresses are blocked (including post-DNS-resolution checks against rebinding) |
| CDP remote debugging | Off by default — must be enabled manually, bound to localhost only |
License
The main component of this project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later); see LICENSE for the full terms.
- Main component: GPL-3.0-or-later
- TypeScript SDK (
sdk/): MIT License (seesdk/LICENSE)
Third-party libraries retain their own licenses: foobar2000 SDK (BSD), pfc / libPPUI (zlib), nlohmann/json (MIT), Columns UI SDK.
Acknowledgements
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found