- wifi: keep the "wrong_password:" prefix through the restore/AP fallback so the UI's incorrect-password prompt fires again. - /plugins/installed returns the manifest's icon (string only). - /starlark/apps/<id>/toggle coerces `enabled` and delegates to _toggle_starlark_app (disk before memory, no KeyError, "false" is false). - /api/v3/ JSON GETs are sent Cache-Control: no-store; non-JSON keeps 5s. - ScrollHelper.set_scrolling_image converts non-RGB input (alpha onto black); create/set_scrolling_image reset last_update_time like reset_scroll. - LogoHelper backs off a failed download per path for MISSING_LOGO_RECHECK_SECONDS; cleared on invalidate/clear_cache. - refresh_placeholder_timestamp saves atomically. - FontManager.clear_cache / _clear_plugin_font_cache bump cache_generation. - Odds manager: per-game logs to DEBUG; JSON decode error caught before RequestException (same cooldown). - element_style mangled continuations; startup validator skips null plugin blocks and reuses the controller's discovery. - src/common/README lists frame_timing, json_body, render_gate. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2.0 KiB
Plugin Custom Icons Guide
Overview
A plugin can name an icon for its tab in the web interface's second nav row
(next to Plugin Manager) with the icon field in manifest.json.
GET /api/v3/plugins/installed passes the manifest's icon through (a
non-string value comes back as null), and a plugin without one gets the
default puzzle piece.
Font Awesome classes only
icon is used verbatim as the CSS class of an <i> element
(iconEl.className = plugin.icon || 'fas fa-puzzle-piece' in
web_interface/static/v3/js/app-shell.js and the same fallback in
app-early.js). So it must be a Font Awesome class string. Emoji, image
paths and URLs are not supported: they would end up as a meaningless class
name and render nothing.
The web interface bundles Font Awesome Free 6
(web_interface/static/v3/vendor/fontawesome/), so any free fas, far or
fab icon works.
{
"id": "my-plugin",
"name": "Weather Display",
"icon": "fas fa-cloud-sun"
}
Some common choices:
- Clock / calendar:
fas fa-clock,fas fa-calendar-alt - Weather:
fas fa-cloud-sun,fas fa-cloud-rain - Sports:
fas fa-football-ball,fas fa-basketball-ball,fas fa-trophy - Music:
fas fa-music,fas fa-headphones - Finance:
fas fa-chart-line,fas fa-dollar-sign - News:
fas fa-newspaper,fas fa-rss - Games:
fas fa-gamepad,fas fa-dice
Browse the rest in the Font Awesome gallery (filter to Free, version 6).
Default
With no icon (or an empty one) the tab shows fas fa-puzzle-piece.
Troubleshooting
- Check the class name against the Font Awesome 6 Free gallery; a Pro-only or misspelled class renders as a blank space.
- Include the style prefix (
fas,farorfab) as well as the icon class. - The manifest is re-read on each plugin list load; reload the page after
editing
icon.