A Modern Wake-on-LAN Management Platform
Features β’ Quick Start β’ Docs β’ Contributing
LANdalf is a web-based Wake-on-LAN management platform built with .NET 10.0, Blazor WebAssembly, and MudBlazor. It lets you manage network devices and wake them remotely β deployable in seconds via Docker Compose.
- Device Management β Add, edit, and organize network devices with MAC address storage
- Device Groups β Organize devices into named categories (e.g., "Gaming", "Work", "Media Server") for better organization. Card view automatically groups devices, table view includes filterable group column
- Wake-on-LAN β Send magic packets to wake sleeping devices remotely
- Real-time Device Monitoring β Automatic background pinging tracks online/offline status with configurable intervals (default 30s)
- Live Status Updates β SignalR WebSocket integration provides instant UI updates when device status changes (no manual refresh needed)
- Online Timestamp Tracking β See when devices came online with user-friendly time display ("5 minutes ago", "2 hours ago")
- Card/Table view toggle β Switch between a card view and a table view with persistent preference (saved to
localStorage) - Snackbar notifications β Toast notifications for add, edit, delete, and WoL actions
- RESTful API β Versioned API with OpenAPI documentation (API Guide)
- Docker Ready β One-command deployment, cross-platform (Windows, Linux, macOS)
Create a docker-compose.yaml:
services:
api:
image: ghcr.io/renedierking/landalf-api:latest
container_name: landalf-api
network_mode: host
environment:
- ASPNETCORE_URLS=http://+:5000
- Cors__FrontendUrl=http://localhost # Adjust if NGINX_PORT != 80, e.g. http://localhost:8080
# Docker Desktop (Windows/macOS): Uncomment and set your LAN broadcast for WoL to work.
# - WOL_BROADCASTS=192.168.178.255
- Serilog__MinimumLevel__Default=Information
- Serilog__MinimumLevel__Override__Microsoft.AspNetCore=Warning
- Serilog__MinimumLevel__Override__Microsoft.EntityFrameworkCore=Warning
volumes:
- api-data:/app/LANdalf_Data
- api-logs:/app/logs
restart: unless-stopped
ui:
image: ghcr.io/renedierking/landalf-ui:latest
container_name: landalf-ui
network_mode: host
environment:
- NGINX_PORT=80 # Change to any free port, then update Cors__FrontendUrl above
depends_on:
- api
restart: unless-stopped
volumes:
api-data:
api-logs:docker compose up -d- UI: http://localhost
- API: http://localhost:5000
- API Docs: http://localhost:5000/scalar/v1
Custom UI port: Set
NGINX_PORT(e.g.8080) and updateCors__FrontendUrlaccordingly (e.g.http://localhost:8080).
Docker Desktop (Windows/macOS): WoL magic packets won't reach your LAN by default. Uncomment
WOL_BROADCASTSin the compose file and set it to your LAN broadcast address (e.g.192.168.178.255). See the WoL Setup Guide for details.
For manual setup, platform-specific instructions, and troubleshooting, see the Installation Guide.
| Guide | Description |
|---|---|
| π Installation & Setup | Docker & manual installation, configuration, troubleshooting |
| π§ Wake-on-LAN Setup | Device configuration, network setup, testing WoL |
| π‘ API Usage Guide | API reference, examples, error handling |
| ποΈ Architecture | System design, tech stack, data flow, database schema |
| πΊοΈ Roadmap | Planned features and enhancements |
dotnet build LANdalf.slnx # Build
dotnet test # Test
docker compose build # Docker imagesLANdalf uses a strategy pattern for Minimal API endpoint registration:
- Implement
IMinimalApiStrategyin the API project. - Register strategies through
AddMinimalApiStrategies()(assembly scanning viaTryAddEnumerablefor idempotent registration). - Strategies are applied in
Program.csviaMapMinimalApiStrategies(...).
This keeps Program.cs focused on composition and makes new endpoint groups plug-in friendly.
The ViewPreferenceService (in src/UI/Services/) stores the user's chosen view mode (card or table) in the browser's localStorage under the key "view-preference". It is registered as a scoped service in Program.cs (UI) and injected into the Home page component.
The DeviceMonitoringService (in src/API/Services/) runs as a background IHostedService that automatically pings devices to track their online/offline status. Configuration is managed through the IOptions pattern in appsettings.json:
"DeviceMonitoring": {
"Enabled": true,
"IntervalSeconds": 30,
"TimeoutMilliseconds": 2000
}- Enabled: Toggle device monitoring on/off
- IntervalSeconds: How often to ping devices (minimum 5 seconds)
- TimeoutMilliseconds: Ping timeout threshold (minimum 100ms)
Status changes are broadcast to connected clients via SignalR's DeviceStatusHub, enabling real-time UI updates without polling.
See CONTRIBUTING.md for prerequisites, project structure, and development guidelines.
Contributions are welcome! Please read the Contributing Guide for the workflow and guidelines.
MIT β see LICENSE for details.
Made with β€οΈ by renedierking
If you find LANdalf helpful, please consider giving it a β!
