This is the repository for three related Dart packages and two companion npm packages compiled from them via dart2wasm:
easy_onvif - This package works with a variety of ONVIF compatible devices allowing for IP Cameras and NVRs (network video recorders) to be integrated into Dart and Flutter applications. The package includes the ability to control the PTZ (pan-tilt-zoom) movements of a device along with managing presets as well as controlling how video and audio is being streamed from the device. Review the documentation below to get more details on available features.
easy_onvif_cli - A command line interface application (onvif executable) for controlling an Onvif device through terminal commands. This tool allows you to use O/S features like cron to automate Onvif device functionality.
easy_onvif_js - JavaScript / WASM interop layer for easy_onvif. Not published to pub.dev; it is the build harness that emits the two npm artifacts below via dart compile wasm, using dart:js_interop for Node-specific transports (node:dgram for WS-Discovery).
| npm package | Target | WS-Discovery | Notes |
|---|---|---|---|
easy-onvif-node |
Node.js ≥ 20 | ✅ via node:dgram |
CLI / server workloads. |
easy-onvif-web |
Browsers (WasmGC: Chromium 119+, Firefox 120+, Safari 18.2+) | ❌ rejects with UnsupportedError |
SOAP over fetch; a CORS-friendly proxy is required in front of the camera. |
Both npm packages expose the same loadEasyOnvif() ESM entry point and ship full TypeScript declarations (index.d.ts).
The repo uses Melos for orchestration. Common scripts:
# One-time
dart pub get
# Build both npm artifacts via dart2wasm (node then web)
melos run build:npm
# Or target one side
melos run build:npm:node
melos run build:npm:web
# Smoke-test the compiled Node bundle (no device required)
melos run smoke:npm:node
# Static analysis across all Dart packages
melos run analyzeThe build scripts live at
packages/easy_onvif_js/tool/ and stage the
compiled .wasm + .mjs loader into npm/easy-onvif-node/dist/ and
npm/easy-onvif-web/dist/, ready for npm publish.
