- 🚀 One-Click Device Wake-Up Dashboard
- ⏰ Timed Events via Cron for Automation
- 🔌 Ping Any Port You Choose
- 🔍 Discover Devices with Network Scanning (nmap required)
- 📌 Optional IP Address Tracking per Device via periodic ARP scan (nmap required, no extra privileges beyond network scanning)
- ❎️ Shutdown Devices with a Custom Command
- 👤 Secured User Management
- 🌐 i18n support for these languages
- 🎨 35 Themes
- 🐳 Docker images for amd64, arm64, arm/v7, arm/v6
- 🏠 Self-Hostable
| Silk | Dim |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Just download the latest binary from the release page and run it.
sudo ./upsnap serve --http=0.0.0.0:8090To 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
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:5000To 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 /.
🐧 Install from the AUR
yay -Sy upsnap-binUpSnap 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:
- 🇸🇦 Arabic (Saudi Arabia) (ar-SA)
- 🇧🇬 Bulgarian (Bulgaria) (bg-BG)
- 🇨🇿 Czech (Czech republic) (cs-CZ)
- 🇩🇪 German (Germany) (de-DE)
- 🇬🇷 Greek (Greece) (el-GR)
- 🇺🇸 English (United States) (en-US)
- 🇪🇸 Spanish (Spain) (es-ES)
- 🇫🇷 French (France) (fr-FR)
- 🇮🇳 Hindi (India) (hi-IN)
- 🇮🇩 Bahasa (Indonesia) (id-ID)
- 🇮🇹 Italian (Italy) (it-IT)
- 🇯🇵 Japanese (Japan) (ja-JP)
- 🇰🇷 Korean (Republic of Korea) (ko-KR)
- 🇳🇴 Norwegian (Norway) (nb-NO)
- 🇳🇱 Dutch (Netherlands) (nl-NL)
- 🇵🇱 Polish (Poland) (pl-PL)
- 🇧🇷 Portuguese (Brazil) (pt-BR)
- 🇵🇹 Portuguese (Portugal) (pt-PT)
- 🇷🇺 Russian (Russia) (ru-RU)
- 🇺🇦 Ukrainian (Ukrain) (uk-UA)
- 🇻🇳 Vietnamese (Vietnam) (vi-VN)
- 🇨🇳 Chinese (China) (zh-CN)
- 🇹🇼 Chinese (Taiwan) (zh-TW)
If you want to contribute and help translating, check the wiki: How to add languages
Fork this branch and clone it.
- Start backend
cd backend
go mod tidy
go run main.go serve- Start frontend
cd frontend
pnpm i
pnpm run devOpen up http://localhost:5173/, create an admin user and add some devices.











