seriousm4x
UpSnap
Go

A simple wake on lan web app written with SvelteKit, Go and PocketBase.

Last updated Jul 8, 2026
5.9k
Stars
228
Forks
1
Issues
+26
Stars/day
Attention Score
90
Language breakdown
No language data available.
โ–ธ Files click to expand
README

UpSnap

A simple wake on lan web app written with SvelteKit, Go and PocketBase.

[!NOTE]
>
#### UpSnap is, and always will be, free and open source software.
>
If someone is asking you to pay money for access to UpSnap binaries, source code, or licenses, you are being scammed.
>
The official and only trusted source for UpSnap is this repository (and its linked releases).
Do not pay third parties for something that is provided here for free.

โœจ Features

  • ๐Ÿš€ One-Click Device Wake-Up Dashboard
  • โฐ Timed Events via Cron for Automation
  • ๐Ÿ”Œ Ping Any Port You Choose
  • ๐Ÿ” Discover Devices with Network Scanning (nmap required)
  • โŽ๏ธ 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

๐Ÿ“ธ Screenshots

| Silk | Dim | | ---------------------------------- | --------------------------------- | | | | | | | | | | | | | | | | | | |

๐Ÿš€ Run the binary

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.

๐Ÿณ Run in Docker

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

Change port (Docker)

If you want to change the port from 8090 to something else, change the following (5000 in this case):

environment:
  - UPSNAPHTTPLISTEN=0.0.0.0:5000

โŽ๏ธ Shutting Down Devices

To shutdown devices, refer to the Wiki: How to use shutdowns

Reverse Proxy

Caddy example

upsnap.example.com {
    reverse_proxy localhost:8090
}

Run in sub path

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;
            proxysetheader Host $host;
            proxysetheader X-Real-IP $remote_addr;
            proxysetheader X-Forwarded-For $proxyaddxforwardedfor;
            proxysetheader X-Forwarded-Proto $scheme;
        }
    }
}

Paths must end with a trailing /.

๐Ÿง Install from the AUR

yay -Sy upsnap-bin

๐Ÿ”’ User permissions

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.

๐ŸŒ Exposing to the open web

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.

๐ŸŒ Help translating

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

๐Ÿ”ง Help developing

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 dev

Open up http://localhost:5173/, create an admin user and add some devices.

๐ŸŒŸ Star History

Star History Chart

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท seriousm4x/UpSnap ยท Updated daily from GitHub