Desktop¶
This page runs an instance as one program on your own computer, with no Docker and no server. It is for a sysop who wants to try the platform, run a field day, or operate alone off-grid; at the end the app runs in your browser.
The Desktop app is one executable per system with the gateway, the web app and the database migrations inside. It keeps SQLite in your user data directory and generates its own secrets on first start. For a shared, always-on instance, use Self-host.
Before you start¶
- Windows (x64), macOS (Apple silicon or Intel) or Linux (x64 or arm64).
sha256sumand the GitHub CLI (gh), signed in, to check the download.- Your callsign, to administer the instance.
Steps¶
-
From the project's latest release, download the binary for your system and
SHA256SUMS:System File Windows aprscaching-windows-x64.exemacOS, Apple silicon aprscaching-macos-arm64macOS, Intel aprscaching-macos-x64Linux aprscaching-linux-x64oraprscaching-linux-arm64 -
Check both, in the directory you downloaded them to (Check a download explains what each check proves):
sha256sum -c --ignore-missing SHA256SUMS gh attestation verify aprscaching-linux-x64 --repo apachler/aprscachingOn Windows, compare
Get-FileHash aprscaching-windows-x64.exe(PowerShell) with the file's line inSHA256SUMS, and run the samegh attestation verifywith the.exe.While no release is published
Without a published release, the release URLs answer 404 and there is nothing signed to check. Build the binaries from a checkout instead, with Bun and pnpm:
bash deploy/desktop/build-exe.shwrites every system's binary underdist/desktop/(Run from source). -
Start it with your callsign as the operator. On Linux and macOS, from the download directory:
chmod +x aprscaching-linux-x64 ADMIN_CALLSIGNS=OE8APR APP_URL=http://localhost:8787 ./aprscaching-linux-x64On Windows, in PowerShell:
$env:ADMIN_CALLSIGNS = "OE8APR"; $env:APP_URL = "http://localhost:8787" .\aprscaching-windows-x64.exeThe app reads every setting from its environment, like the other shapes (Configuration).
ADMIN_CALLSIGNSmakes your call the operator;APP_URLis the address you sign in at, which passkeys need. -
Open
http://localhost:8787and sign in there. The app also opens a tab onhttp://127.0.0.1:8787by itself; that address is another origin, where a passkey does not matchAPP_URL.
The binaries are not code-signed, so macOS Gatekeeper and Windows SmartScreen warn on first start.
deploy/aprscaching init desktop prints these steps as well.
Check that it worked¶
- The first line it prints names the version, the address and the data directory, with the number of migrations applied.
curl -fsS http://127.0.0.1:8787/healthanswers.deploy/aprscaching status --shape desktop, from a clone of the repository, reports it healthy.
Where the data lives¶
| System | Data directory |
|---|---|
| Windows | %APPDATA%\aprscaching |
| macOS | ~/Library/Application Support/aprscaching |
| Linux | ~/.local/share/aprscaching ($XDG_DATA_HOME/aprscaching) |
DATA_DIR picks another directory. It holds the database (aprscaching.db), the media, and the three secrets
the app generates on first start, readable by you only:
| File | Variable | Used by |
|---|---|---|
ingest.secret |
INGEST_SECRET |
an ingest box feeding this app |
operator.secret |
OPERATOR_SECRET |
tools/admin/verify-call.mjs and the other operator scripts |
session.secret |
SESSION_SECRET |
signing sign-in sessions; deleting it signs everyone out |
A variable set in the environment wins over its file. Back the secrets up with the database (Backups).
Serve your LAN¶
The app listens on 127.0.0.1 only, so nothing else on your network reaches it. To serve a phone on the same
Wi-Fi, or an ingest box on a Pi, start it with HOST=0.0.0.0 (or one LAN address). PORT picks the port
(default 8787). Set APP_URL to the address the other devices open, for example
APP_URL=http://192.168.1.10:8787.
Plain http on a LAN has no passkeys, so members sign in with a one-time link
(One-time sign-in links). An ingest box on the LAN posts to
INGEST_URL=http://<this computer>:8787/ingest with the value of ingest.secret.
Off-grid¶
The app needs no internet: its map is a built-in grid with the caches and stations on it, and it fetches no
map tiles. For hunters' offline packs, set OFFLINE_TILES_PATH to an offline map. Radio comes
from the browser (Web Serial or Web Bluetooth) or from apps/ingest run beside it
(Off-grid and LAN).
Next¶
- Your first hour: sign in, confirm your call and finish the setup.
- Your radio in the browser: connect a USB or Bluetooth TNC.