Lightweight Wake-on-LAN web dashboard with device management, watchdog automation, user roles, and SQLite storage.
  • Python 94.9%
  • Shell 5.1%
Find a file
2026-06-01 21:24:27 +02:00
app.py port 8080 switched to 80 2026-06-01 21:24:27 +02:00
install.sh port 8080 switched to 80 2026-06-01 21:24:27 +02:00
README.md port 8080 switched to 80 2026-06-01 21:24:27 +02:00

Simple WOL

A lightweight Wake-on-LAN web dashboard.

Features:

  • Wake devices from a browser
  • Ping-based online/offline status
  • SQLite storage
  • Web-based first admin setup
  • User roles
  • Watchdog auto-wake
  • Device add/edit/delete
  • YAML import/export
  • Event history
  • Dark mode
  • systemd + gunicorn deployment

Permissions

Role Wake Watchdog Manage Devices Import/Export Manage Users
No login Yes No No No No
User Yes Yes No No No
Admin Yes Yes Yes Yes Yes

On first launch, the web UI asks you to create the first admin user.


Requirements

Debian/Ubuntu packages:

apt install -y python3 python3-venv python3-full wakeonlan iputils-ping

Python packages:

flask
pyyaml
gunicorn
werkzeug

Quick Install

git clone https://git.micin.cz/stalker/simplewol.git
cd simplewol
chmod +x install.sh
sudo ./install.sh

Then open:

http://SERVER-IP:80

Manual Install

mkdir -p /opt/simplewol
cd /opt/simplewol

Copy app.py into /opt/simplewol/app.py.

Create virtual environment:

python3 -m venv venv
./venv/bin/pip install --upgrade pip
./venv/bin/pip install flask pyyaml gunicorn werkzeug

Run manually:

SIMPLE_WOL_SECRET_KEY="$(openssl rand -hex 32)" \
./venv/bin/gunicorn app:app --bind 0.0.0.0:80 --workers 1

systemd Service

Create:

nano /etc/systemd/system/simplewol.service

Example:

[Unit]
Description=Simple Wake-on-LAN Web UI
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
WorkingDirectory=/opt/simplewol
Environment=SIMPLE_WOL_DIR=/opt/simplewol
Environment=SIMPLE_WOL_DB=/opt/simplewol/simplewol.db
Environment=SIMPLE_WOL_SECRET_KEY=replace-with-random-secret
ExecStart=/opt/simplewol/venv/bin/gunicorn app:app --bind 0.0.0.0:80 --workers 1
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Enable:

systemctl daemon-reload
systemctl enable --now simplewol.service

Logs:

journalctl -u simplewol.service -f

Important

Use only one gunicorn worker:

--workers 1

The watchdog runs in-process. Multiple workers would duplicate watchdog checks.


Database

SQLite database location:

/opt/simplewol/simplewol.db

Backups are stored in:

/opt/simplewol/backups/

Import / Export

Admins can import/export devices.yaml from the web UI.

Example format:

devices:
  - id: desktop-pc
    name: Desktop PC
    mac: "AA:BB:CC:DD:EE:FF"
    ip: "192.168.1.50"
    broadcast: "192.168.1.255"
    description: Main workstation

Troubleshooting

Check service:

systemctl status simplewol.service

Check logs:

journalctl -u simplewol.service -n 100 --no-pager

Test WOL manually:

wakeonlan AA:BB:CC:DD:EE:FF

Check app files:

du -h --max-depth=1 /opt/simplewol | sort -hr

Reset First Admin

Stop service:

systemctl stop simplewol.service

Delete database:

rm /opt/simplewol/simplewol.db

Start service:

systemctl start simplewol.service

Then open the web UI and create a new first admin.

Warning: this removes devices, users, watchdog state, and history.