Rebuilds the web client with dashboards, themes and pages grouped by area, and lets you set up Discord from it. Adds CLI commands for media and Discord, and a new logo.
Web client
- Rebuild the web client with a dashboard for each module, a choice of themes, and pages at their own addresses, such as
/mediaand/discord. - Group pages by area (System, Hardware, Storage and network, Apps, Settings), with each module's controls and settings beside its data. Commands, notifications and open live under
/system, disk mounts under/disksand media directories under/media. - Add media controls with volume, the player's status and its artwork.
- Add a Discord page with its status, controls and setup.
- Ask for the program's full path when adding a command.
- Label buttons, switches, form errors and status for screen readers.
- Load the JSON view's editor only when it's shown.
See Web client.
Discord
- Add
GET_DISCORD_SETUPandUPDATE_DISCORD_SETUPevents to set up Discord over the WebSocket API, and report setup errors. The client secret is never sent back.
See Discord and Discord setup.
Media
- Control the player the Media module shows, rather than whichever one
playerctlpicks first (Linux). - Send the player's artwork as
thumbnailwhen it's a web or data URL (Linux). - Add
playerctlas an optional dependency in the deb, rpm and Arch packages. Without it, the Media module is empty.
See Media.
CLI
- Add
client media <action>andclient discord <action>to control media and Discord. - Add
--pathtoclient opento open a page of the web client, such as/media#media-controls.
See CLI.
API
- Reply to
GET_DATAfor modules that haven't registered yet, such as Discord before it connects, instead of leaving the client waiting. - Return an error from
OPENwhen the path doesn't exist, instead of claiming it opened. - Serve the web client's pages at their own paths.
Connector
- Add
get_discord_setupandupdate_discord_setupto the Python connector, and Discord setup to the TypeScript connector, keeping the secret redacted. - Resolve a Python connector request when the backend replies with an error, instead of timing out.
- Stop waiting for module data in the TypeScript connector once every module has answered.
Docs
- Move the docs to Blume, with feature guides for monitoring, commands, notifications, media, remote control and Discord, and a docs MCP server at
https://system-bridge.timmo.dev/mcp.
Moved
- Web client pages moved from
/data/<module>to/<module>, and the old action and settings pages into their module's page, such as/settings/commandsto/system#commands. The old addresses redirect.
Dependencies
- Update
github.com/go-vgo/robotgoto 1.3.7 (#4466). - Update
effectto 4.0.6 (#4458). - Update Go to 1.27.3 (#4443, #4449).
Maintenance
- Replace the logo with a bridge between two machines.
- Speed up CI, and skip the Windows build when nothing affects it (#4440, #4441).
- Update development tools: Bun, Node.js, uv, Ruff, Oxlint, wrangler and
@effect/tsgo. - Update shared skills.
Full Changelog: 5.13.0...5.14.0