/UpSnap

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

Primary LanguageTypeScriptMIT LicenseMIT

UpSnap

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

✨ 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)
  • 👤 Secured User Management
  • 🌐 i18n support for these languages
  • 🎨 29 Themes
  • 🐳 Docker images for amd64, arm64, arm/v7, arm/v6
  • 🏠 Self-Hostable

📸 Screenshots

Dark Light

🐧 Install from the AUR

yay -Sy upsnap-bin

🚀 Run the binary

Just download the latest binary from the release page and run it.

Root:

sudo ./upsnap serve --http=0.0.0.0:8090

Non-root:

sudo setcap cap_net_raw=+ep ./upsnap # only once after downloading
./upsnap serve --http=0.0.0.0:8090

For more options check ./upsnap --help or visit PocketBase documentation.

If you want to use network discovery, make sure to have nmap installed and run UpSnap as root/admin.

🐳 Run in docker

You can use the docker-compose example. See the comments in the file for customization.

Non-root docker user:

Create the mount point first:

mkdir data

Then add user: 1000:1000 to the docker-compose file (or whatever your $UID:$GID is).

Change port

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

entrypoint: /bin/sh -c "./upsnap serve --http 0.0.0.0:5000"
healthcheck:
  test: curl -fs "http://localhost:5000/api/health" || exit 1

Install additional packages for shutdown cmd

entrypoint: /bin/sh -c "apk update && apk add --no-cache <YOUR_PACKAGE> && rm -rf /var/cache/apk/* && ./upsnap serve --http 0.0.0.0:8090"

You can search for your needed package here.

Reverse Proxy

Caddy example

upsnap.example.com {
    reverse_proxy localhost:8090
}

🔒 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 (root if you run docker). 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:

  • 🇺🇸 English (en-US)
  • 🇩🇪 German (de-DE)
  • 🇪🇸 Spanish (es-ES)
  • 🇫🇷 French (fr-FR)
  • 🇮🇹 Italian (it-IT)
  • 🇳🇱 Dutch (nl-NL)
  • 🇵🇹 Portuguese (pt-PT)
  • 🇨🇳 Chinese (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.

  1. Start backend
cd backend
go mod tidy
go run main.go serve
  1. 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