Skip to content

Latest commit

 

History

History
204 lines (177 loc) · 11.3 KB

File metadata and controls

204 lines (177 loc) · 11.3 KB

Apps

Bundled apps are listed in apps/apps.json. Additional drop-in apps are self-contained folders (a manifest plus their files) that live in your user-data folder — %APPDATA%\bedrock-panel\apps by default (see Storage location below) — so they survive app updates. The easiest way to add one is Settings → Drop-In Apps → Browse… and install from the app repository. In the editor, + App adds an app page: pick the app and set its options, and Bedrock Panel loads it full-screen on the panel with no hand-typed URLs.

Included apps:

  • GitHub — a first-party repository, read-only Issues, and GitHub Actions panel with pull-request checks, workflow runs, jobs, steps, and confirmed rerun/cancel/dispatch controls. It signs in through GitHub OAuth Device Flow; tokens remain encrypted in the main process and are never exposed to the panel page.
  • Flip Clock — split-flap animation, 12/24-hour, optional seconds, and a corner date/day. (12-hour shows a single hour card with an AM/PM badge; 24-hour shows two hour cards.) Follows the global light/dark theme and accent. Ships enabled by default (12-hour).
  • World Clock — the time in several places at once. Two modes: US time zones (Pacific / Mountain / Central / Eastern) or a pick of 2–6 world cities; each shown as a digital readout or an analog face. Options include 12/24-hour, optional seconds (with a second hand on the analog faces), and a per-city label override (e.g. pick London but label it Edinburgh), and Auto-order by time zone — lay the cities out west → east by GMT offset instead of the order you picked them in. DST-correct via the system's time-zone database; follows the global light/dark theme and accent.
  • Time Zone Converter — for "can you meet at 4:30 my time?". Same two modes as the World Clock: US time zones (PDT/PST … EDT/EST, the abbreviation in effect today bold) or a pick of 2–6 world cities (city name over its GMT offset, with the same per-city label override and Auto-order by time zone). Each zone gets an editable time — set one by spinning the inline drum picker (hour/minute/AM-PM wheels), typing, or scrolling, and the rest convert automatically. Sticky: keeps the last-set times across restarts and never snaps to the current time (that's the World Clock's job). 12/24-hour option.
  • Music controller — now-playing + transport + a programmable app grid.
  • System monitor — live CPU/GPU/RAM/disk/network/battery gauges.
  • AI Voice — one voice+text app with a per-page Backend picker: a real Claude Code, Codex, or Copilot agent session on the panel (type or talk, watch replies stream, approve/deny actions from the touchscreen, tap the knob to start/stop), or plain chat against your Open WebUI server or any OpenAI-compatible API (OpenAI, DeepSeek, OpenRouter, LiteLLM/Ollama — your own key). Add multiple pages with different backends; each keeps its own session and settings.
  • Meeting — one-tap mute/video/accept/decline/leave for Zoom and Teams, no keyboard or mouse.
  • Microsoft 365 — an installable community drop-in with a read-only dashboard: your profile, live presence, and upcoming calendar entries pulled from Microsoft Graph after you choose Connect in that app page's editor settings (or on its disconnected panel), plus up to eight configurable app shortcuts (Teams, Outlook, Word, Excel, PowerPoint, OneNote, OneDrive, Microsoft 365) that either focus an already-open window or launch it, and a one-tap Join meeting for the current/next event. Meeting links follow the configured Teams header app's Open with mode: web, desktop, or desktop with web fallback.
  • Home Assistant Dashboard — pick a Lovelace dashboard from your HA server in a dropdown, no hand-typed URLs. Requires Use Home Assistant in Settings → Auth; hidden from the App picker otherwise. Uses your global HA token so login persists. (See the full HA guide for entity tiles + icons.)
  • Screensaver — built-in animated scenes (Waves, Starfield, Lava lamp, Fireflies, Flurry — drawn live, no media files) or your own photos and videos (separate folders; slideshow or scrapbook collage). Optional idle auto-start: after N quiet minutes the panel switches to it by itself, and any touch or knob input returns you to exactly the page you left.
  • Keyboard Shortcuts — a live cheat-sheet, three columns: System (the auto-rotation toggle hotkey, if set), Pages (every page's own jump-to hotkey), and Custom — a free-text list of shortcut/description pairs for other programs, edited right on the app's own App tab in the editor (same spot as any app's options) with a + Add another shortcut row-adder, same as the World Clock's city picks. That list is shared across every page running the app, not per-page — edit it from any one of them and every other instance shows the update. Updates live on the panel — no restart needed after adding a page hotkey or editing the custom list.

Configuring the Flip Clock app in the editor

Drop-in folder apps

A drop-in app is a self-contained folder. Install one from a GitHub app repository with Settings → Drop-In Apps → Browse…, or place the folder by hand in your drop-in apps folder (%APPDATA%\bedrock-panel\apps by default — see Storage location below):

%APPDATA%\bedrock-panel\apps\
  my-app\
    app.json
    index.html
    style.css
    app.js

Bedrock Panel only discovers drop-in apps from that user-data folder — not from the bundled install directory — so an update never wipes them out.

The manifest can be named app.json or manifest.json:

{
  "id": "my-app",
  "name": "My App",
  "entry": "index.html",
  "served": false,
  "options": []
}

Rules:

  • id must start with a lowercase letter or digit and then use only lowercase letters, digits, _, or -.
  • entry must be a relative file path inside the app folder and must not contain ...
  • Duplicate ids are skipped; bundled apps/apps.json entries win.
  • options uses the same schema as bundled apps. The editor stores each option on the app page and passes non-secret values to the app at launch.

After adding or editing a folder app, click Refresh beside the App dropdown in the editor to reload manifests.

Managing drop-in apps (Settings → Drop-In Apps)

The editor's Settings → Drop-In Apps tab manages app folders for you:

  • App repositories — one or more GitHub folders serving an index.json catalog plus app .zips. Browse… lists a repository's apps; Install downloads and unzips one into your drop-in folder — you're warned first if the app bundles executable code (a server module or programs/scripts). Only github.com repositories are accepted. Enable Allow multiple drop-in app repositories (Advanced) to add more than one source.
  • Check for updates — per repository, or Check all for updates across every installed app; compares the catalog version against what's installed and offers to update.
  • Export — zip an installed drop-in app to share it.
  • Delete — remove an app's folder.
  • Refresh — re-scan for changes.
  • Community apps ↗ — the default source: the community-apps repository. See Community apps for installing and submitting.

Storage location (Advanced) — drop-in apps live in %APPDATA%\bedrock-panel\apps by default (switchable to %LOCALAPPDATA%\bedrock-panel\apps). This is the only place Bedrock Panel looks for drop-in apps, and it survives app updates — unlike the install folder, which an update overwrites. Switching the location moves where new imports land; move any existing app folders across yourself if you change it.

Static and served modes

  • Static ("served": false) — Bedrock Panel loads entry directly via file:// from the app folder. Options are passed in the URL hash: index.html#color=red. Static apps are best for self-contained HTML/CSS/JS.
  • Served ("served": true) — Bedrock Panel serves the app folder on the local loopback server at http://127.0.0.1:<port>/apps/<id>/<entry>. Options are passed as normal query parameters: index.html?color=red. Use this for apps that need same-origin fetch, browser APIs that require HTTP, or multiple static assets served through the same origin.

Served drop-in apps can also declare host-side helpers:

{
  "server": "server.js",
  "proxy": {
    "methods": ["GET"],
    "verifySslOption": "verifySsl",
    "allow": [{ "option": "host" }]
  }
}
  • server loads a local Node module from the app folder. It should export handle(action, context). The page calls it with /app-api/<action>.
  • "serverAutoStart": true loads the server module at host startup (and after install/update) instead of on the first /app-api call — use it when the module runs background work like schedules. Leave it off for plain request/response servers.
  • context.options contains the active app options, including options marked "serverOnly": true and secret options.
  • "serverOnly": true keeps an option out of the page URL while still making it available to the server adapter and /app-proxy/config.
  • /app-proxy?url=... is available only to the requesting app page and only for URLs allowed by the app manifest. { "option": "host" } allows requests to the configured host origin, including LAN devices.
  • context.host.getHaAuth() returns the shared Home Assistant credentials from Settings → Auth ({ url, token, useHa }), so an HA app doesn't ask the user to re-enter them. Server modules only — never hand the token to your page.

See docs/app-template/ for a minimal starting point.

Authoring with Claude Code

The bedrock-panel-drop-in-app skill in community-apps/skills/ guides Claude through scaffolding, modifying, or migrating a drop-in app. Drop it into your .claude/skills/ folder (or invoke it with /skill) and Claude will follow the manifest contract, keep edits inside apps/<app-id>/, and prefer the generic /app-proxy / /app-api capabilities over host-specific routes.

Legacy bundled apps

Two kinds of bundled app:

  • Static (file://) — drop an HTML file in apps/ that reads its settings from the URL hash (e.g. …/myapp.html#color=red) — a ?query doesn't survive a file:// load — and add an entry to apps/apps.json describing its options. The Flip Clock is one.
  • Served ("served": true) — for apps that need live host data, a same-origin fetch, or an embedded launcher grid. Bedrock Panel serves these over a loopback HTTP server at http://127.0.0.1:<port>/<id>, so they get real ?query params and a secure context (needed for things like the microphone). The Music controller and Open WebUI app use this. A served app can also carry its own editable tile grid ("grid" in its manifest entry) — the "grid embedded in an app" capability.