Skip to content

renedierking/LANdalf

πŸ§™β€β™‚οΈ LANdalf

"You Shall Not Sleep!"

A Modern Wake-on-LAN Management Platform

Latest Release Build and Test .NET Version Blazor License: MIT Docker

Features β€’ Quick Start β€’ Docs β€’ Contributing


πŸ“– About

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.

✨ Features

  • 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)

Interface Preview

LANdalf Home Interface

πŸš€ Quick Start

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

Custom UI port: Set NGINX_PORT (e.g. 8080) and update Cors__FrontendUrl accordingly (e.g. http://localhost:8080).

Docker Desktop (Windows/macOS): WoL magic packets won't reach your LAN by default. Uncomment WOL_BROADCASTS in 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.

πŸ“š Documentation

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

πŸ› οΈ Development

dotnet build LANdalf.slnx   # Build
dotnet test                  # Test
docker compose build         # Docker images

Minimal API extension pattern

LANdalf uses a strategy pattern for Minimal API endpoint registration:

  • Implement IMinimalApiStrategy in the API project.
  • Register strategies through AddMinimalApiStrategies() (assembly scanning via TryAddEnumerable for idempotent registration).
  • Strategies are applied in Program.cs via MapMinimalApiStrategies(...).

This keeps Program.cs focused on composition and makes new endpoint groups plug-in friendly.

View preference persistence

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.

Device monitoring configuration

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.

🀝 Contributing

Contributions are welcome! Please read the Contributing Guide for the workflow and guidelines.

πŸ“„ License

MIT β€” see LICENSE for details.

πŸ“ž Support


Made with ❀️ by renedierking

If you find LANdalf helpful, please consider giving it a ⭐!

About

A Modern Wake-on-LAN Management Platform

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors