A simple wake on lan web app written with SvelteKit, Go and PocketBase.
Go
6,349
2,282 commits
updated Oct 10, 2026
| Silk | Dim |
|---|---|
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
Just download the latest binary from the release page and run it.
sudo ./upsnap serve --http=0.0.0.0:8090
To run as non-root (Linux only), refer to the Wiki: Use non-root user
For more options check ./upsnap --help or visit PocketBase documentation.
Just pull and run the image: docker run --network=host seriousm4x/upsnap:latest or you can use the docker-compose example. See the comments in the file for customization.
To run as non-root, refer to the Wiki: Use non-root user
Set UPSNAP_LOG_LEVEL to DEBUG, INFO, WARN, ERROR, or OFF to control UpSnap console logs. Default is INFO. PocketBase log persistence and retention remain configurable in PocketBase settings. PocketBase's --dev mode prints all logs regardless of this setting.
If you want to change the port from 8090 to something else, change the following (5000 in this case):
environment:
- UPSNAP_HTTP_LISTEN=0.0.0.0:5000
To shutdown devices, refer to the Wiki: How to use shutdowns
Caddy example
upsnap.example.com {
reverse_proxy localhost:8090
}
You can run UpSnap on a different path than /, e.g. /upsnap-sub-path/. To do this in caddy, set the following:
http://localhost:8091 {
handle /upsnap-sub-path/* {
uri strip_prefix /upsnap-sub-path
reverse_proxy localhost:8090
}
}
Or nginx:
http {
server {
listen 8091;
server_name localhost;
location /upsnap-sub-path/ {
proxy_pass http://localhost:8090/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Paths must end with a trailing /.
yay -Sy upsnap-bin
UpSnap offers unique access for each user, per device. While admins have all permissions, they can assign specific rights to users such as displaying/hiding a device, accessing device editing, deleting and powering devices on/off. See the last screenshot in the 📸 Screenshots section.
Although UpSnap has user authorisation, it is not recommended to expose it to the open web and make it accessible by everyone!
Reason: The shutdown device command is basically a command piped to #sh (possibly as root user). If anyone gains unauthorized access and can abuse this API route in any way, the attacker has access to a (root) shell on your local network.
Recommended: If you need access from outside your network, please use a VPN. Wireguard or OpenVPN is your way to go.
UpSnap is available in the following languages so far:
If you want to contribute and help translating, check the wiki: How to add languages
Fork this branch and clone it.
cd backend
go mod tidy
go run main.go serve
cd frontend
pnpm i
pnpm run dev
Open up http://localhost:5173/, create an admin user and add some devices.
Go module
Latest release
Releases this year
(top 24 of 33)
461 followers · starred Jan 2026
4,253 followers · starred Sep 2025
2,272 followers · starred Dec 2023
655 followers · starred Aug 2026
A simple wake on lan web app written with SvelteKit, Go and PocketBase.
Go
6,349
2,282 commits
updated Oct 10, 2026
| Silk | Dim |
|---|---|
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
Just download the latest binary from the release page and run it.
sudo ./upsnap serve --http=0.0.0.0:8090
To run as non-root (Linux only), refer to the Wiki: Use non-root user
For more options check ./upsnap --help or visit PocketBase documentation.
Just pull and run the image: docker run --network=host seriousm4x/upsnap:latest or you can use the docker-compose example. See the comments in the file for customization.
To run as non-root, refer to the Wiki: Use non-root user
Set UPSNAP_LOG_LEVEL to DEBUG, INFO, WARN, ERROR, or OFF to control UpSnap console logs. Default is INFO. PocketBase log persistence and retention remain configurable in PocketBase settings. PocketBase's --dev mode prints all logs regardless of this setting.
If you want to change the port from 8090 to something else, change the following (5000 in this case):
environment:
- UPSNAP_HTTP_LISTEN=0.0.0.0:5000
To shutdown devices, refer to the Wiki: How to use shutdowns
Caddy example
upsnap.example.com {
reverse_proxy localhost:8090
}
You can run UpSnap on a different path than /, e.g. /upsnap-sub-path/. To do this in caddy, set the following:
http://localhost:8091 {
handle /upsnap-sub-path/* {
uri strip_prefix /upsnap-sub-path
reverse_proxy localhost:8090
}
}
Or nginx:
http {
server {
listen 8091;
server_name localhost;
location /upsnap-sub-path/ {
proxy_pass http://localhost:8090/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Paths must end with a trailing /.
yay -Sy upsnap-bin
UpSnap offers unique access for each user, per device. While admins have all permissions, they can assign specific rights to users such as displaying/hiding a device, accessing device editing, deleting and powering devices on/off. See the last screenshot in the 📸 Screenshots section.
Although UpSnap has user authorisation, it is not recommended to expose it to the open web and make it accessible by everyone!
Reason: The shutdown device command is basically a command piped to #sh (possibly as root user). If anyone gains unauthorized access and can abuse this API route in any way, the attacker has access to a (root) shell on your local network.
Recommended: If you need access from outside your network, please use a VPN. Wireguard or OpenVPN is your way to go.
UpSnap is available in the following languages so far:
If you want to contribute and help translating, check the wiki: How to add languages
Fork this branch and clone it.
cd backend
go mod tidy
go run main.go serve
cd frontend
pnpm i
pnpm run dev
Open up http://localhost:5173/, create an admin user and add some devices.
Go module
Latest release
Releases this year
(top 24 of 33)
461 followers · starred Jan 2026
4,253 followers · starred Sep 2025
2,272 followers · starred Dec 2023
655 followers · starred Aug 2026