Most dashboards are great at visualizing metrics — but they rarely help when you need to understand the physical layout of your homelab.
There were many times I needed to answer questions like:
- What’s running at a specific IP?
- Is this app running on bare metal, in Docker, or inside an LXC container?
- Where is that failing app actually deployed?
To address these gaps, I built Homelab Visualizer — originally for my own use — and now sharing it with the community in case you find it helpful too.
A central place to visualize and launch into the physical and virtual layers of your setup.
The current focus is on helping you define and map your homelab’s infrastructure, with a roadmap toward becoming a true one-stop operational hub.
Given an IP address, identify:
- What application is running there
- Where it resides physically (e.g., server, VM, Docker container, LXC)
By mapping your infrastructure hierarchically, you’ll be able to quickly trace where each workload lives and take action.
- Visual Container Management: Create, edit, and organize containers representing your homelab components
- Multiple View Modes:
- 📦 Box View: Traditional grid layout with customizable container sizes
- 🌳 Tree View: Hierarchical tree structure for complex relationships
- Real-time Search: Filter containers by name or IP address
- Responsive Design: Works on desktop and mobile devices
- Background Options: Solid colors, gradients, custom CSS, or background images
- Border Customization: Color, size, style (solid, dashed, dotted, etc.), and custom CSS
- Title Bar Styling: Separate background settings for the header area
- Advanced CSS: Custom CSS properties, border radius, box shadows, padding, and margins
- Transparency Controls: Adjust opacity for backgrounds and title bars
The application supports multiple icon types, we tried to make it as easy as possible by allowing you to view the icons and select from a wide range of icons or just a URL for a custom image:
-
Emoji Icons 🎯
- Built-in emoji picker with search functionality
- Wide variety of emojis for different service types
-
Font Awesome Icons ⭐
- Professional icon library with thousands of options
- Searchable interface for easy icon discovery
-
Material Design Icons 🎨
- Google's Material Design icon set
- Clean, modern appearance
-
Simple Icons 🏷️
- Brand and technology-specific icons
- Perfect for representing specific services and tools
-
Home-Lab Icons 🏠
- Specialized icons for homelab and infrastructure components
- Custom icon set for server and networking equipment
-
Favicon Auto-Detection 🌐
- Automatically fetches favicons from URLs
- Perfect for web services and applications
-
Custom URL Icons 🔗
- Use any image URL as an icon
- Supports various image formats
-
Generative Icons 🎲
- AI-generated or algorithmic icons
- Unique visual representations
- Size Control: Adjustable icon size from 12px to 60px
- Color Customization: Full color picker for icon tinting
- Preview System: Real-time preview of icon changes
- Page Background: Customize the entire page background with colors, gradients, or images
- Theme Support: Light, dark, and auto themes
- Font Customization: Choose from multiple font families and sizes
- Layout Controls: Adjust container spacing, default widths, and page padding
- Container Width Slider: Dynamically adjust container widths from 10% to 100%
- Responsive Layout: Containers automatically adapt to different screen sizes
The application is available as a pre-built Docker image from GitHub Container Registry.
# Clone the repository
git clone <repository-url>
cd homelab-visualiser
# Create data directory for persistent storage
mkdir -p data
# Start the application
docker-compose up -d
# Access the application at http://localhost:3000
# Create data directory
mkdir -p /path/to/your/data
# Pull the latest image
docker pull ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
# Run the container
docker run -d \
--name homelab-visualiser \
-p 3000:3000 \
-v /path/to/your/data:/app/backend/storage \
--restart unless-stopped \
ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
# Clone the repository
git clone <repository-url>
cd homelab-visualiser
# Deploy the stack
docker stack deploy -c docker-stack.yml homelab
# Check the service status
docker service ls
# Access the application at http://localhost:3000
If you prefer to pull the image manually:
# Pull the latest version
docker pull ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
# Or pull a specific version
docker pull ghcr.io/pradt/homelab-visualiser/homelab-visualiser:v1.0.0
The application uses a pre-built Docker image from GitHub Container Registry:
- Image:
ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
- Registry: GitHub Container Registry (ghcr.io)
- Automatic Updates: Pull the latest image to get updates
The application uses volume mapping to persist your homelab data:
- Host Path:
./data/containers.json
(with docker-compose) - Container Path:
/app/backend/storage/containers.json
PORT
: Server port (default: 3000)WIDGET_ENCRYPTION_KEY
: (Recommended) A secure random string used to encrypt sensitive widget configuration fields (such as API keys). If not set, sensitive fields will be stored in plain text with a warning. Example:
export WIDGET_ENCRYPTION_KEY=your-secure-32-character-key-here
The docker-compose.yml
file includes:
- Pre-built image from GitHub Container Registry
- Volume mapping for persistent data
- Port mapping (3000:3000)
- Restart policy
- Network configuration
The docker-stack.yml
file includes:
- Pre-built image from GitHub Container Registry
- Swarm-specific deployment settings
- Resource limits and reservations
- Restart policies
- Overlay network configuration
- Click the "➕ Add Container" button
- Fill in the basic information:
- Name: Display name for the container
- Type: Computer, VM, Docker Container, LXC Container, or Application
- IP Address: Network address (optional)
- URL: Web interface URL (optional)
- Notes: Additional information (optional)
- Configure the icon and styling
- Click "Save" to create the container
- Edit: Click the hamburger menu (☰) and select "✏️ Edit"
- Add Child: Create nested containers for complex setups
- Delete: Remove containers (use with caution)
- Move: Drag and drop containers to reorganize
- Container Styling: Use the Style tab in the edit modal
- Page Settings: Click the "⚙️ Settings" button for global options
- Icon Selection: Choose from multiple icon libraries
- Color Schemes: Create consistent themes across your setup
- Box View: Traditional grid layout, perfect for overview
- Tree View: Hierarchical view showing relationships between containers
📦 Main Server (192.168.1.100)
├── 🐳 Docker Host
│ ├── 🌐 Nginx Proxy
│ ├── 🗄️ Database
│ └── 📊 Monitoring
└── 🖥️ VMs
├── 🏠 Home Assistant
└── 📺 Media Server
🌐 Router (192.168.1.1)
├── 📡 WiFi Access Points
├── 🔌 Switches
└── 🖥️ Workstations
Add custom CSS for advanced styling:
/* Example: Glass morphism effect */
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
- Size: Adjust from 12px to 60px
- Color: Full color picker support
- Positioning: Icons are automatically centered
- Containers adapt to screen size
- Mobile-friendly interface
- Touch support for mobile devices
When running with Docker, your data is automatically persisted:
- Docker Compose: Data stored in
./data/containers.json
- Docker Run: Data stored in your specified volume path
- Docker Swarm: Data stored in named volume
homelab_data
# Backup your data
cp ./data/containers.json ./backup/containers-$(date +%Y%m%d).json
# Restore from backup
cp ./backup/containers-20231201.json ./data/containers.json
To update to the latest version:
# Stop the current container
docker-compose down
# Pull the latest image
docker pull ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
# Start with the new image
docker-compose up -d
Or with Docker Run:
# Stop the current container
docker stop homelab-visualiser
docker rm homelab-visualiser
# Pull the latest image
docker pull ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
# Run with the new image (use your original run command)
docker run -d \
--name homelab-visualiser \
-p 3000:3000 \
-v /path/to/your/data:/app/backend/storage \
--restart unless-stopped \
ghcr.io/pradt/homelab-visualiser/homelab-visualiser:latest
# Check container logs
docker logs homelab-visualiser
# Check if port 3000 is available
netstat -tulpn | grep :3000
# Verify volume mapping
docker inspect homelab-visualiser | grep -A 10 "Mounts"
# Check data directory permissions
ls -la ./data/
# Fix data directory permissions
sudo chown -R $USER:$USER ./data/
chmod 755 ./data/
This project is open source. See the LICENSE file for details.
Check the issues for a list of enhancements that's being considered - if you want to request a feature then create an issue.