SkillAgentSearch skills...

Muximux

A self-hosted homelab dashboard with an optional built-in reverse proxy that makes stubborn apps work in iframes

Install / Use

/learn @mescon/Muximux

README

<p align="center"> <img src="web/public/muximux-logo.svg" width="200" alt="Muximux"> </p>

Muximux

A self-hosted homelab dashboard with an optional built-in reverse proxy that makes stubborn apps work in iframes.

One binary. One port. One YAML config file.

CI CodeQL Go Report Card Quality Gate Maintainability Security Codecov OWASP ASVS Docker Release License

AI Disclosure -- Muximux is developed with significant AI assistance (Claude Code). All code is reviewed, tested, and approved by the maintainer before shipping. See Development for details.

Muximux Dashboard

<details> <summary><strong>More screenshots</strong> — onboarding wizard, light mode, themes, split view, command palette</summary> <br> <table> <tr> <td align="center"><a href="docs/screenshots/10-dashboard-light.png"><img src="docs/screenshots/10-dashboard-light.png" width="280" alt="Dashboard (Light)"></a><br><sub>Dashboard (Light)</sub></td> <td align="center"><a href="docs/screenshots/01-welcome.png"><img src="docs/screenshots/01-welcome.png" width="280" alt="Onboarding — Welcome"></a><br><sub>Onboarding — Welcome</sub></td> <td align="center"><a href="docs/screenshots/02-security.png"><img src="docs/screenshots/02-security.png" width="280" alt="Onboarding — Security"></a><br><sub>Onboarding — Security</sub></td> </tr> <tr> <td align="center"><a href="docs/screenshots/03-apps-catalog.png"><img src="docs/screenshots/03-apps-catalog.png" width="280" alt="Onboarding — App Catalog"></a><br><sub>Onboarding — App Catalog</sub></td> <td align="center"><a href="docs/screenshots/04-apps-selected.png"><img src="docs/screenshots/04-apps-selected.png" width="280" alt="Onboarding — Apps Configured"></a><br><sub>Onboarding — Apps Configured</sub></td> <td align="center"><a href="docs/screenshots/05-style.png"><img src="docs/screenshots/05-style.png" width="280" alt="Onboarding — Style"></a><br><sub>Onboarding — Style</sub></td> </tr> <tr> <td align="center"><a href="docs/screenshots/06-theme-dark.png"><img src="docs/screenshots/06-theme-dark.png" width="280" alt="Onboarding — Themes (Dark)"></a><br><sub>Onboarding — Themes (Dark)</sub></td> <td align="center"><a href="docs/screenshots/07-theme-light.png"><img src="docs/screenshots/07-theme-light.png" width="280" alt="Onboarding — Themes (Light)"></a><br><sub>Onboarding — Themes (Light)</sub></td> <td align="center"><a href="docs/screenshots/08-done.png"><img src="docs/screenshots/08-done.png" width="280" alt="Onboarding — Done"></a><br><sub>Onboarding — Done</sub></td> </tr> <tr> <td align="center"><a href="docs/screenshots/13-logs.png"><img src="docs/screenshots/13-logs.png" width="280" alt="Real-Time Log Viewer"></a><br><sub>Real-Time Log Viewer</sub></td> <td align="center"><a href="docs/screenshots/11-themes.png"><img src="docs/screenshots/11-themes.png" width="280" alt="Theme Selector"></a><br><sub>Theme Selector</sub></td> <td align="center"><a href="docs/screenshots/12-theme-customizer.png"><img src="docs/screenshots/12-theme-customizer.png" width="280" alt="Theme Customizer"></a><br><sub>Theme Customizer</sub></td> </tr> <tr> <td align="center"><a href="docs/screenshots/14-split-horizontal.png"><img src="docs/screenshots/14-split-horizontal.png" width="280" alt="Split View — Horizontal"></a><br><sub>Split View — Horizontal</sub></td> <td align="center"><a href="docs/screenshots/15-split-vertical.png"><img src="docs/screenshots/15-split-vertical.png" width="280" alt="Split View — Vertical"></a><br><sub>Split View — Vertical</sub></td> <td align="center"><a href="docs/screenshots/16-command-palette.png"><img src="docs/screenshots/16-command-palette.png" width="280" alt="Command Palette"></a><br><sub>Command Palette</sub></td> </tr> </table> </details>

What Is Muximux?

If you run services like Sonarr, Radarr, Plex, Grafana, or Home Assistant in your homelab, you probably have a dozen browser bookmarks and port numbers to remember. Muximux gives you a single page where all of those apps live, organized into groups, with live health indicators showing what's up and what's down.

Apps load inside the dashboard as iframes, so switching between them is instant - no page reloads, no losing your place. For apps that refuse to be embedded (most set X-Frame-Options: DENY), Muximux includes a reverse proxy that transparently strips those headers and rewrites paths so they work.

Everything is configured in one YAML file — no database, no external dependencies. The entire application ships as a single binary with the frontend embedded. Every setting is configurable through the built-in GUI, so you never have to touch the YAML directly. Back up or migrate your entire setup by copying a single file.


Why v3?

Muximux v3 is a ground-up rewrite. The original Muximux was a PHP application that served as a simple bookmark portal. v3 replaces it with a modern stack and a much broader feature set:

  • Go backend with the frontend embedded in the binary - no PHP, no web server, no runtime dependencies
  • Built-in reverse proxy that rewrites HTML, CSS, JS, and headers so apps actually work inside iframes
  • Real-time health monitoring via WebSocket - see which apps are up or down without refreshing
  • Built-in authentication - username/password, forward auth (Authelia/Authentik), or OIDC
  • Optional TLS and gateway - an embedded Caddy instance can handle HTTPS certificates and serve other sites alongside Muximux
  • Guided onboarding - a setup wizard walks you through security setup and adding your first apps
  • Split view - display two apps side by side or stacked with a draggable divider
  • 1,600+ icons from Lucide plus thousands of service-specific icons from Dashboard Icons
  • Themes - built-in light and dark modes, plus custom themes via CSS

How You Can Use It

Muximux fits different setups. Pick the level that matches yours.

Dashboard behind your existing proxy

You already have Traefik, nginx, or Caddy handling TLS and auth. Run Muximux behind it with auth: none and let your proxy do the heavy lifting. Muximux serves on a single port and your proxy forwards to it. This is the simplest setup.

Dashboard with the built-in reverse proxy

Same as above, but some of your apps refuse to load in iframes. Set proxy: true on those apps and Muximux will proxy them through /proxy/{slug}/, stripping blocking headers and rewriting paths. This runs inside the Go server and works in every deployment mode - no extra configuration needed.

Full reverse proxy appliance

No existing proxy? Use Muximux as your only reverse proxy. Configure tls.domain for automatic HTTPS via Let's Encrypt and a gateway Caddyfile to serve your other services on their own domains. Caddy handles TLS certificates, HTTP-to-HTTPS redirects, and routing - all from the same single binary.

See the Deployment Guide for Docker Compose examples for each setup.


Quick Start

Docker

docker run -d \
  --name muximux \
  -p 8080:8080 \
  -v $(pwd)/data:/app/data \
  ghcr.io/mescon/muximux:latest

Open http://localhost:8080. If no config file exists, an onboarding wizard will guide you through security and initial setup.

Docker Compose

services:
  muximux:
    image: ghcr.io/mescon/muximux:latest
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
    restart: unless-stopped

Binary

./muximux

By default, Muximux uses data/ beside the binary as its data directory (containing config, themes, icons). Override it with --data or the MUXIMUX_DATA environment variable.

See docker-compose.yml for a full example with environment variables, health checks, and optional TLS/gateway ports.


Documentation

Full documentation is available in the Wiki:

Related Skills

View on GitHub
GitHub Stars1.2k
CategoryDevelopment
Updated14h ago
Forks82

Languages

JavaScript

Security Score

100/100

Audited on Mar 27, 2026

No findings