Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Wakezilla π¦
β‘ Wake-on-LAN made simple β power on your machines remotely whenever needed.
π Reverse proxy β intercepts traffic and wakes the server automatically if itβs offline.
π Automatic shutdown β saves energy by powering down idle machines after configurable thresholds.
Web interface
Features
- Wake-on-LAN: Send magic packets to wake sleeping machines
- TCP Proxy: Forward ports to remote machines with automatic WOL
- Web Interface: Manage machines, ports, and monitor activity through a web dashboard
- Automatic Shutdown: Automatically turn off machines after inactivity periods
- Network Scanner: Discover machines on your local network
Installation
Install on Windows
The PowerShell installer currently supports x64 Windows only and requires
tar to be available in PowerShell.
Run in PowerShell:
irm https://wakezilla.dev/install.ps1 | iex
To pin a version:
iex "& { $(irm https://wakezilla.dev/install.ps1) } -Version 0.2.4"
By default this installs wakezilla.exe to
%LOCALAPPDATA%\Programs\wakezilla\bin and adds that directory to your user
PATH. Open a new terminal after installation. Override the destination with
-InstallDir:
iex "& { $(irm https://wakezilla.dev/install.ps1) } -InstallDir $env:USERPROFILE\bin"
The Windows installer downloads prebuilt binaries from GitHub Releases and
validates them against SHA256SUMS.
Install on Linux/macOS with script
|
To pin a version:
|
By default this installs wakezilla to $HOME/.local/bin. Override the destination with BIN_DIR:
| BIN_DIR=/usr/local/bin
The script installs prebuilt binaries from GitHub Releases and requires curl, jq, tar, and either sha256sum or shasum.
Install from cargo (recommended)
Install via Homebrew
Using pre-built docker image
- Run the proxy server:
Note:
--network hostis required for Wake-on-LAN to work properly.- add
-v ${PWD}/wakezilla-data:/opt/wakezillato save configuration data persistently.
- Run the client server:
Install from source
-
Install Rust:
| -
Build and Install:
-
Verify Installation:
Update Wakezilla
Install the latest GitHub Release for your platform:
To install a specific version, pass it without the leading v:
Wakezilla checks for newer releases when the binary starts and prints a warning
when one is available. Use --no-update-check for offline or scripted runs:
If Wakezilla was installed into a system directory such as /usr/local/bin, the
update may require elevated privileges. A failed update leaves the existing
binary untouched.
Run proxy server
-
Run the Server:
By default, the web interface runs on port 3000.
Run Client
-
Run the Server:
By default, the web interface runs on port 3001. You can check the health of the client server by visiting: http://:3001/health
Run the terminal UI (TUI)
Manage your machines from the terminal β no browser required. Point the TUI at a running proxy server:
--api-url defaults to http://127.0.0.1:3000, so it can be omitted when the
proxy server runs on the same host:
Set up auto-start (system service)
-
Run the interactive setup wizard (requires
sudo/admin privileges): Linux/macOS:Windows PowerShell (run as Administrator):
wakezilla setupThis interactively configures the host to auto-start the proxy or client server as a system service (systemd on Linux, launchd on macOS, or the Windows Service Manager). It writes an OS-standard config file, installs and enables the service, then validates that the service is reachable after install. On Windows, it also creates or updates an inbound Windows Firewall rule for the configured TCP port. Pass
--mode <proxy|client>and--port <PORT>to skip the prompts.If a configuration or service already exists,
setupshows a summary of the current config (and installed services) and asks for confirmation before overwriting. Existing settings for the other server are preserved β only the target server's port is updated. Pass-y/--yesto skip the confirmation for non-interactive use.Services installed by
setuprun with--no-update-check, so background services do not make startup network requests. Runwakezilla updatemanually when you want to upgrade the installed binary. -
Control an installed service (requires
sudo/admin privileges): Linux/macOS:Windows PowerShell (run as Administrator):
wakezilla service start wakezilla service stop wakezilla service restart wakezilla service status wakezilla service logsControls a service previously installed with
setup. If both the proxy and client are installed, an interactive picker asks which to act on; pass--mode <proxy|client>to skip the prompt. If only one is installed, it is selected automatically.logsreads from journald on Linux, from the daemon's redirected log file on macOS (/Library/Logs/wakezilla/), and from%ProgramData%\wakezilla\wakezilla-<mode>.logon Windows. -
Remove auto-start services (requires
sudo/admin privileges): Linux/macOS:Windows PowerShell (run as Administrator):
wakezilla uninstallRemoves all Wakezilla services installed by
setup(proxy-serverandclient-serverwhen present). On Windows, it also removes the Windows Firewall rules created by setup. Configuration files, data files, and logs are left in place.
Usage
Web Interface
Access the web interface at http://<server-ip>:3000 to:
- Add and manage machines
- Configure port forwards
- View network scan results
- Send WOL packets manually
- Configure automatic shutdown settings
Terminal UI (TUI)
Prefer the terminal? Run wakezilla tui --api-url http://<server-ip>:3000 to
browse your machines, watch their online/offline status, and act on them without
leaving the shell.

The left pane lists every registered machine with a live ON/OFF status; the right pane shows the details and port forwards of the selected machine.
Key bindings:
| Key | Action |
|---|---|
j / β |
Move selection down |
k / β |
Move selection up |
r |
Refresh the machine list and statuses |
w |
Send a Wake-on-LAN packet to the machine |
t |
Turn off the machine |
d |
Delete the machine (asks to confirm) |
q / Esc |
Quit |
Adding Machines
- Navigate to the web interface
- Click "Add Machine" or use the network scanner
- Fill in MAC address, IP, and name
- Configure:
- Turn-off port (if remote shutdown is needed)
- Inactivity Period: Time in minutes before automatic shutdown (default: 30 minutes)
- Port forwards as needed
Configuring Automatic Shutdown
- When adding or editing a machine, enable "Can be turned off remotely"
- Set the "Turn Off Port" (typically 3001 for the client server)
- Configure the Inactivity Period:
- Set the number of minutes of inactivity before automatic shutdown
- The system monitors when the last request was received for each machine
- If no requests are received within the inactivity period, the machine will be automatically shut down
- The machine will automatically shut down after the configured inactivity period of no activity
Port Forwarding
- Add a machine to the system
- Configure port forwards for that machine:
- Local Port: Port on the server to listen on
- Target Port: Port on the remote machine to forward to
- When traffic hits the local port, the machine will be woken up if needed and traffic forwarded
Machine Configuration
Each machine can be configured with:
- MAC Address
- IP Address
- Name and Description
- Turn-off Port (for remote shutdown)
- Inactivity Period: Time in minutes before automatic shutdown (default: 30 minutes)
- Port Forwards:
- Local Port: Port on the server
- Target Port: Port on the remote machine
How It Works
- Server Mode: Runs the web interface and proxy services
- Client Mode: Runs on target machines to enable remote shutdown
- WOL Process:
- When traffic hits a configured port, the server sends a WOL packet
- Waits for the machine to become reachable
- Forwards traffic once the machine is up
- Automatic Shutdown:
- A single global inactivity monitor runs continuously, checking all machines every second
- Each machine's
last_requesttimestamp is automatically updated whenever a connection is accepted - The monitor compares the time since
last_requestagainst the configuredinactivity_period(in minutes) - If no requests are received within the inactivity period, a shutdown signal is sent via HTTP to the client
- When a machine configuration is updated (e.g., inactivity period changed), the monitor is automatically stopped and restarted with the new settings
- This ensures only one monitor instance runs at a time, preventing duplicate shutdown signals
Security Considerations
- The server should be run on a trusted network
- Access to the web interface should be restricted if exposed to the internet
- The turn-off endpoint on clients should only be accessible from the server
Development
Prerequisites
- Rust and Cargo installed
- Clone the repository
- Install dependencies with
make dependencies
on frontend folder run:
this will initialize the frontend in watch mode on port 8080
on the root folder run:
this will initialize the backend in watch mode on port 3000
Troubleshooting
Common Issues
-
Machine not waking up:
- Verify the MAC address is correct
- Ensure WOL is enabled in the machine's BIOS/UEFI
- Check firewall settings on the target machine
- Verify the target machine supports WOL
-
Proxy not working:
- Check that the target port is correct
- Verify the machine is reachable after WOL
- Ensure no firewall is blocking the connection
-
Network scanner not finding devices:
- Windows release builds do not currently include ARP network scanning because
the upstream
pnetWindows backend requires the external Npcap/WinPcapPacket.libSDK at link time - On Linux/macOS, run Wakezilla with
sudoif raw socket permissions are denied - Verify the selected network interface is the LAN interface you expect
- Windows release builds do not currently include ARP network scanning because
the upstream
-
Automatic shutdown not working:
- Verify the turn-off port is configured correctly
- Ensure the client is running on the target machine
- Check that the client can receive HTTP requests from the server
- Verify the inactivity period is configured correctly (in minutes)
- Check logs to see when the last request was received for the machine
- Ensure traffic is actually reaching the proxy (requests update the last_request timestamp)
Logs
Check the terminal output for detailed logs about:
- WOL packets sent
- Connection attempts
- Proxy activity
- Shutdown requests
- Errors and warnings
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run
cargo fmtandcargo clippy - Commit your changes
- Push to the branch
- Create a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.