Documentation
The App Store
The App Store is how detection logic ships on OpenNVR: ten apps install with one click from a curated, digest-pinned index — and apps you write get the same treatment.
What ships in the store
| App | Category | What it does |
|---|---|---|
| Intrusion detection | perimeter | Person/vehicle in a drawn zone during restricted hours |
| Loitering detection | perimeter | Dwell-time alerts with a live “dwelling now” dashboard |
| Occupancy counting | analytics | Per-zone gauges against your limit; over/under/cleared alerts |
| Line crossing | perimeter | Directional tripwire drawn per camera, live in/out tallies |
| Abandoned object | perimeter | Unattended bags with owner-proximity suppression |
| Footage search | forensics | “Every red truck at the dock yesterday” — from the UI or by voice |
| License-plate recognition | vehicle | Plate OCR with allow/deny watchlists edited live |
| Smart doorbell | doorstep | Known vs. stranger faces, with in-UI face enrollment |
| Package delivery | doorstep | Arrival / linger / pickup with an on-the-porch dashboard |
| Home Assistant relay | integration | Alerts → HA entities via MQTT discovery |
Every app gets a real product surface — for free
Declare a manifest and the platform renders the UI. No frontend code in any of the ten apps:
- A full page at
/app-catalog/<id>: status, uptime, enable/disable, configure, uninstall. - A live dashboard from
state_schema— metric chips, tables, gauges (threshold-coloured), log feeds, and image galleries over the app’sGET /state. - Config forms from
params— including polygon/tripwire zone drawing on the camera’s own frame, chip-list editors, time-window pickers. Edits reach the running app live; no restart. - Operator actions from
actions— forms that POST through the server’s user-JWT-only proxy (enroll a face, search footage). - An agent skill — the voice agent lists installed apps, reads their live state, and relays their alerts. Read-only by design: the agent’s service key can never invoke an app’s actions.
Governance
- One-click installs copy the image reference from the reviewed, digest-pinned index entry — never from the caller. A production deployment installs only digest-pinned entries.
- App actions require a user JWT through the server proxy; the internal service key is rejected.
Ship your own
The app SDK is Apache-2.0 — your app, any license, including proprietary. Two distribution paths:
- Private (no review): a compose overlay + boot-time self-registration with the deployment’s internal key. Your app appears in the catalog with a status dot, dashboard, and config form.
- The curated store: publish your image, open a PR adding one digest-pinned entry to the index — the Homebrew-tap model.
Start with “Your first OpenNVR detector in 15 minutes”
(docs/FIRST_DETECTOR.md in the main repo), then
docs/CONTRIBUTING_APPS.md for the store submission.