Prerequisites
- A Linux box with Docker and Docker Compose. A NUC or other mini-PC, a Raspberry Pi 5, or a NAS that runs Docker all work. Images are published for amd64 and arm64.
- A disk with room for recordings. Budget roughly 1–2 GB per hour per 1080p camera — see hardware and disk sizing.
- At least one camera with an RTSP URL. See Adding cameras for brand-specific URL patterns.
Start the node
1
Download the compose file
2
Create the data directories
data/recordings. If you want them on a bigger disk, mount that disk there before starting.3
Start the stack
go2rtc (streaming) and node (the Nightjar service). Both use host networking.4
Open the local UI
Open
http://<host>:8080 in a browser on your LAN. Replace <host> with the machine’s IP or hostname. The go2rtc admin UI is also available at http://<host>:1984 if you ever need to debug streams.Add your first camera
1
Find your camera's RTSP URL
Every brand has its own URL pattern. For a Reolink camera it looks like:See Adding cameras for Amcrest, Dahua, Hikvision, and Ubiquiti patterns.
2
Add it in the local UI
In the UI at
:8080, add a camera with a name and the RTSP URL. Add the substream URL too if the camera has one — motion detection runs on it, and it is much lighter. Camera credentials in these URLs never leave the node.3
Verify live view
The camera tile should show live video within a few seconds. Recording starts automatically: 60-second segments written to
data/recordings/<cameraId>/<YYYYMMDD>/.If the stream does not come up, test the URL with ffprobe or VLC first — see troubleshooting.
Optional: pair with the cloud
Pairing adds remote live view and cloud event history. It is optional — everything above works local-only, forever.1
Create an account
Sign up free at app.nightjar.ca.
2
Enter the claim code
The local UI at
:8080 shows a 6-character claim code. Enter it in the app to claim the node. Codes expire after 15 minutes, but the node automatically fetches a fresh one, so the UI always shows a working code.3
Done
The node connects outbound to the cloud — no port forwarding, no firewall changes. Your cameras appear in the app, with live view over WebRTC and event clips as they happen. See Remote access for how this works and what data leaves your network.
Next steps
Recording and events
Retention defaults, motion detection, and AI events.
Configuration reference
Everything in
config.json and the environment variables.