Moonfire NVR
Lightweight always-recording network video recorder
Moonfire NVR is an open-source security camera network video recorder focused on efficient, continuous recording. Written in Rust, it stores video with minimal overhead and provides a simple web interface to review footage.
Key features
- Continuous always-on recording
- Efficient storage handling
- Web review interface
- Low resource footprint
Pros & cons
Strengths
- Very efficient
- Reliable 24/7 recording
Trade-offs
- Limited motion analytics
- Smaller feature set
Moonfire NVR replaces
Last reviewed Sep 13, 2026 · 850 words
Moonfire NVR does one job: it writes every frame from every camera to disk, continuously, and does it so cheaply that a Raspberry Pi 4 records half a dozen 1080p streams with CPU to spare. It does not detect motion, does not recognise people or cars, and will never send you a notification. If "NVR" made you picture Frigate, this is the opposite design, and its 1,746 GitHub stars come mostly from people who wanted exactly that: a boring, always-on archive that never drops a minute.
The whole trick is never decoding video
Most recorders spend their CPU decoding H.264 so they can analyse it. Moonfire takes the compressed RTSP stream from the camera and writes the samples straight to disk, then keeps an index of what landed where in a SQLite database. No decode, no re-encode, no analysis, so the work per camera is roughly "copy bytes from a socket to a file". That is why it is written in Rust and why 512 MB of RAM is a comfortable ceiling rather than a floor. A cheap ARM board with a USB hard drive is the intended hardware, and the project has been tuned on Raspberry Pis since 2018.
The corollary is that the camera's own encoder settings decide everything. Bitrate, keyframe interval and resolution are set on the camera, not in Moonfire, and the recorder stores what it is given.
Retention is a disk budget per stream, not a number of days
You do not tell Moonfire "keep 30 days". You give each camera stream a retention size in gigabytes inside a sample file directory, and it deletes the oldest samples when that budget is exceeded. Days fall out of bitrate arithmetic, which you should do before buying disks:
4 Mbps main stream = 0.5 MB/s = about 43 GB per day
512 kbps sub stream = 64 KB/s = about 5.5 GB per day
Six cameras on 4 Mbps main streams need roughly 260 GB a day, so a 30-day archive is about 7.8 TB. Recording both the main and sub streams per camera is supported and worth it: the sub stream makes scrubbing in the web UI fast, and the main stream is what you hand to the police. You can spread sample directories across several disks and give each stream a different budget, so the driveway gets 60 days and the garage gets 7.
Setup is a config tool and a service unit, not a wizard
The install is the reason the difficulty is Medium. You create a user and a database, run moonfire-nvr config to add sample file directories and cameras through a terminal interface, then run moonfire-nvr run under systemd or as a container. The project publishes a container image and a compose example in its docs, and the web interface listens on port 8080. Put it behind a reverse proxy with TLS if you will view it from outside the LAN, and create a normal user rather than browsing as the config account.
Cameras are added by RTSP URL, and Moonfire is picky about streams in a useful way: a camera that sends broken timestamps shows up in the logs immediately instead of silently corrupting a week of footage.
What you give up: detection, alerts and a big community
There is no motion detection. The web UI gives you a timeline per camera with a scrubber, and a "signals" API that lets an outside system such as Home Assistant mark time ranges, which is how people get a "door opened at 14:02" marker on their footage. That is the extent of the analytics, and the project is honest about it.
If you want to know that a person was in the garden, Frigate is the bigger project in this category by a wide margin, runs object detection on a Coral or a CPU, and integrates with Home Assistant natively. ZoneMinder is the older, heavier all-in-one. The video surveillance category lists the rest. Moonfire's community is essentially one very careful maintainer and a mailing list, which is fine for a tool that changes slowly, and a poor fit if you expect a Discord full of answers.
What I'd do
For a rental, a workshop or a holiday house where the goal is "keep 30 days of everything and look at it after something happens", Moonfire on a Pi 4 with a 4 TB USB drive is the cheapest reliable answer I know, and it idles at a few watts.
For a home where you actually want alerts, run Frigate. The pattern I like best is both: Frigate on the sub streams for detection and notifications, Moonfire on the main streams as the continuous full-quality archive, each doing the one thing it is good at. If you only have the appetite for one service, make it Frigate, and treat Moonfire as the specialist you graduate to once you know you want an archive more than you want alerts.
Compare Moonfire NVR
7 head-to-head comparisons.
Similar video surveillance apps
MediaMTX
Video SurveillanceReady-to-use media server and RTSP/WebRTC proxy
Replaces Wowza
go2rtc
Video SurveillanceUltimate camera streaming gateway with low latency
Replaces Nest Cam
OpenALPR
Video SurveillanceAutomatic license plate recognition library
Replaces Rekor Scout, Plate Recognizer
CompreFace
Video SurveillanceSelf-hosted face recognition service with REST API
Replaces Amazon Rekognition
OpenCvSharp
Video Surveillance.NET wrapper for OpenCV computer vision
Replaces Commercial vision SDKs
ZoneMinder
Video SurveillanceFull-featured closed-circuit television software suite
Replaces Blue Iris, Milestone XProtect