Skip to content

Feature request: Web UI / headless server mode for remote access #23

Description

@meumeu-dev

Summary

It would be great to have an optional web server mode that serves the Switchboard UI as a web application, accessible from any browser on the network — similar to how tools like Portainer, Grafana, or code-server work.

Use case

Many developers run Claude Code on a headless server, a home lab machine, or a remote workstation. Currently, Switchboard requires a desktop environment (Electron) to use. A web UI mode would allow:

  • Remote monitoring from a laptop, phone, or tablet
  • Headless server setups where no desktop environment is available
  • Multi-device access to the same Switchboard instance (e.g. check session status from your phone while AFK)
  • SSH-only machines where X11 forwarding is impractical

Why it's feasible

After looking at the codebase, the architecture is already well-suited for this:

  • Clean IPC boundary: The ~40 ipcMain.handle() calls in main.js map directly to HTTP/REST endpoints
  • Vanilla JS frontend: app.js has no Electron-specific rendering — replacing window.api.* calls with fetch() / WebSocket would be straightforward
  • Terminal streaming: xterm.js already supports WebSocket backends, so the PTY bridge could use WS instead of IPC
  • SQLite DB: Already portable, no changes needed

Proposed approach

  • Add an optional --serve or --web flag that starts an Express/Fastify server instead of the Electron window
  • Serve the existing frontend static files
  • Expose IPC handlers as REST endpoints + WebSocket for terminal/live updates
  • Add basic auth (token or password) since it would be network-exposed
  • Keep the Electron app as the default — web mode is opt-in

Example

# Start Switchboard as a web server on port 3000
switchboard --web --port 3000

# Then access from any browser
# http://192.168.0.4:3000

This would make Switchboard a complete remote session management dashboard, which fits perfectly with its "command center" positioning.

Thanks for the great tool! 🎯

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions