Raspberry Pi 4
arm647.11 GB (.7z)
Raspberry Pi OS 64-bit (Debian Trixie, released 2026-04-21). 7-Zip archive; extract before flashing.
Download imageFlash a ready-made image, or download the release for your platform and run the install steps. Then add only the optional components for the features you want; Polaris detects what is installed at runtime and hides the UI for anything missing.
The fastest way to get going: each image is a Linux OS with Polaris preinstalled and configured for that board. Flash it to an SD card (or USB / eMMC), boot, and open the browser. Use Raspberry Pi Imager, balenaEtcher, or Rufus. Images live on Google Drive and are added as each board is validated.
7.11 GB (.7z)
Raspberry Pi OS 64-bit (Debian Trixie, released 2026-04-21). 7-Zip archive; extract before flashing.
Download image7.11 GB (.7z)
Raspberry Pi OS 64-bit (Debian Trixie, released 2026-04-21). 7-Zip archive; extract before flashing. (Shared with the Pi 4 image for now.)
Download image7.51 GB (.7z)
Armbian 26.8.0 KDE (Ubuntu 26.04, kernel 6.1.115). 7-Zip archive; extract before flashing.
Download imagex86 board: flash to USB or write to the internal eMMC, not an SD card.
Coming soonGrab the server build for the machine that runs your rig, then follow the install steps below. Prefer zero setup? Use a ready-to-flash image above.
Install on the Raspberry Pi, SBC, or mini PC that controls your gear.
Optional native app to reach the server. Any browser also works, so no app is required.
Step by step for each platform once you have the files. The published builds are self-contained, so there is no separate runtime to install.
The recommended path. The .deb creates the user, a systemd unit, the indi-web venv, apt dependencies, and a self-signed HTTPS cert.
wget https://github.com/DanWBR/NINA.Polaris/releases/latest/download/polaris_arm64.deb
sudo apt install ./polaris_arm64.deb Running at https://<hostname>.local:5000 in about 30 seconds. Manage it with: sudo systemctl status polaris, sudo journalctl -u polaris -f, sudo systemctl restart polaris.
For Fedora, Arch, or any non-Debian distro, or when you prefer no systemd integration. Replace linux-arm64 with linux-x64 for Intel/AMD.
wget https://github.com/DanWBR/NINA.Polaris/releases/latest/download/polaris-linux-arm64.tar.gz
tar -xzf polaris-linux-arm64.tar.gz
cd polaris-linux-arm64
./NINA.Polaris Runs in the foreground. Wire your own service unit if you want it to survive reboots.
Portable, no installer. ARM64 build also available (polaris-win-arm64.zip) for Surface Pro X and some Copilot+ PCs.
Invoke-WebRequest -Uri "https://github.com/DanWBR/NINA.Polaris/releases/latest/download/polaris-win-x64.zip" -OutFile polaris.zip
Expand-Archive polaris.zip
cd polaris-win-x64
.\NINA.Polaris.exe Open https://localhost:5000 and accept the self-signed cert once. Remember to open the firewall (see below).
Multi-arch image (arm64 + amd64). The compose file in the repo includes indiserver in the same stack.
docker run -d --network host \
-v $(pwd)/config:/config \
-v $(pwd)/images:/images \
ghcr.io/danwbr/nina-polaris:latest Volumes mount /config (profiles) and /images (FITS output). On Linux use --network host, or port-forward TCP 5000 and UDP 5353 in compose.
For developers or unsupported platforms. Needs the .NET 10 SDK and Git (with submodules).
git clone https://github.com/DanWBR/NINA.Polaris.git
cd NINA.Polaris
./deploy/publish-linux-arm64.sh # or publish-linux-x64.sh / publish-win-x64.ps1
./publish/linux-arm64/NINA.Polaris Build and test target net10.0. The stellarium-web submodule ships pinned .js/.wasm, so Emscripten is only needed if you bump the engine.
The main limiting factor is RAM. Everything else is comfortable on a modern SBC, and the recommended board adds GPU and NPU acceleration.
Polaris uses 0.7 to 1.7 GB of RAM on average, so 2 GB is the practical floor. A Raspberry Pi 4 with 2 GB still runs the app, with client-side WASM offloading the heavy live-stack math.
Recommended board: the Orange Pi 5 Pro with 4 GB or more. It runs the whole app end to end, with OpenCL acceleration on the GPU and GraXpert AI on the NPU. More boards are on the test bench: two Orange Pi 4 Pro (4 GB), a Celeron PC stick, and a Radxa Dragon Q6A (expected to be the most powerful of the lot).
| Host | RAM | Status | Notes |
|---|---|---|---|
| Orange Pi 5 Pro (4 GB) GPU + NPU | 4 GB+ | Recommended | Proven daily driver. RK3588S (4x Cortex-A76 + 4x Cortex-A55), Mali-G610 GPU, 6 TOPS NPU. Full experience: OpenCL on the GPU and GraXpert AI on the NPU. |
| Raspberry Pi 5 (8 GB) | 8 GB | Great | Broadcom BCM2712 (4x Cortex-A76, up to 2.4 GHz), VideoCore VII GPU, LPDDR4X. Lossless: live stacking plus simultaneous Studio jobs are fine. |
| Raspberry Pi 4 (2 GB) | 2 / 4 / 8 GB | Minimum | Broadcom BCM2711 (4x Cortex-A72, up to 1.8 GHz), VideoCore VI GPU, LPDDR4. The RAM floor: 2 GB is the minimum to run; client-side WASM offloads the heavy math. |
| Raspberry Pi 3 (1 GB) | 1 GB | Below RAM target | Broadcom BCM2837 (4x Cortex-A53, up to 1.2 GHz), VideoCore IV GPU. Runs, but tight; PHD2 GUI embed is auto-disabled (32-bit ARM gate). |
| Radxa Dragon Q6A GPU + NPU | 6 / 8 GB | Testing | Qualcomm QCS6490 (octa-core Kryo: 1x 2.7 GHz + 3x 2.4 GHz + 4x 1.9 GHz), Adreno 643 GPU (OpenCL), Hexagon NPU up to 12 TOPS, LPDDR5. Incoming, expected to be the most powerful board tested so far, pending validation. |
| Orange Pi 4 Pro (4 GB) GPU + NPU | 4 GB | Testing | Two units incoming. Allwinner A733 (2x Cortex-A76 + 6x Cortex-A55, up to 2.0 GHz), Imagination BXM-4-64 GPU, 3 TOPS NPU, LPDDR5. Same GPU-plus-NPU story as the 5 Pro: OpenCL on the GPU and GraXpert on the NPU, pending validation. |
| Celeron PC stick | 8 GB | Testing | Intel Celeron J4105 (4 cores, up to 2.5 GHz), Intel UHD 600 GPU (OpenCL), 8 GB LPDDR4, 128 GB eMMC, Gigabit LAN. Ships with Windows 11 Pro. Incoming, results to follow. |
| Windows mini PC / desktop / laptop | 4 GB+ | Full features | Same feature set as Linux, plus vendor DSLR drivers. |
| Windows | Linux (RPi / x64) | |
|---|---|---|
| Runtime | .NET 10 Desktop Runtime (bundled in the self-contained build) | .NET 10 Runtime, or use the self-contained build |
| Polaris binary | NINA.Polaris.exe | NINA.Polaris |
| Network | TCP 5000 open on the LAN | TCP 5000 open on the LAN |
That is all the home page needs. Every other feature has its own dependency, listed under optional components below.
Polaris listens on TCP 5000 (HTTP) and UDP 5353 (mDNS, so <hostname>.local resolves). Both are blocked by default.
New-NetFirewallRule -DisplayName "N.I.N.A. Polaris" -Direction Inbound -Protocol TCP -LocalPort 5000 -Action Allow -Profile Private,Domain
New-NetFirewallRule -DisplayName "mDNS (Polaris)" -Direction Inbound -Protocol UDP -LocalPort 5353 -Action Allow -Profile Private,Domain sudo ufw allow 5000/tcp
sudo ufw allow 5353/udp On Linux without ufw: iptables -A INPUT -p tcp --dport 5000 -j ACCEPT. The .deb install handles this for you.
Add only what you need. Polaris lights up each feature when its tool is present and degrades gracefully when it is not.
At least one bus is required to control hardware. Both can coexist; the active rig stores a per-device driver choice.
Preferred on Linux. The indi-full meta-package ships the daemon plus 100+ drivers (ZWO, Canon, EQMod, Celestron, weather, ...).
Preferred on Windows. Polaris discovers Alpaca devices over the LAN via UDP.
Canon, Nikon, and Sony DSLR/mirrorless on Windows. Drop the DLLs into plugins/ after registering with the vendor (EULA blocks redistribution).
Required for Slew & Center (the centering loop). Without any solver, Slew Only still slews the mount. Polaris dispatches primary then blind fallback across whatever is installed.
Default solver. Fast (about 1 to 3 s), works offline, MIT. Recommended for everyone.
Faster than ASTAP at long focal lengths. Free for non-commercial use.
The gold standard, but slow on a Pi (about 30 to 60 s).
Last resort. About 30 to 60 s per solve, free with an API key.
PHD2 connection (TCP 4400) is auto-attempted on startup alongside INDI / Alpaca discovery.
Full integration: Polaris auto-detects PHD2, can launch and shut it down, swap profiles, run Smart Calibrate, and broadcast guide stats in real time.
Shows the PHD2 window inside the GUIDE tab. Not supported on 32-bit Raspberry Pi (auto-gated).
Detected at startup via the binary locator. Polaris grays out the matching STUDIO buttons when missing.
Replaces the built-in stacking pipeline in STUDIO with Siril scripts (5 bundled, plus your own ~/.siril/scripts).
Background extraction (auto per-frame during sequences if toggled), plus deconvolution and denoise on v3.0+.
Test the whole pipeline without a scope. Settings then Equipment simulator detects the install and spawns the stack with one click.
Renders real stars from the GSC catalog at the simulated mount position.
A single .exe exposing the ASCOM Camera/Telescope/Focuser/FilterWheel simulators over Alpaca.
Extra conveniences, all optional.
Reach your rig from anywhere without exposing it directly. Reverse-tunnels over HTTPS with per-tenant tokens, mTLS, quotas, and built-in Let's Encrypt.
Browser-based SSH from the Polaris tab to restart services on a headless host. Set Terminal:Enabled = true in appsettings.json.
Pull the currently selected object from Stellarium into the SKY tab as a target.