Skip to content

cdavis-code/easy_onvif_workspace

Repository files navigation

Dart Implementation of ONVIF IP Camera Client

This is the repository for three related Dart packages and two companion npm packages compiled from them via dart2wasm:

Dart packages

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 packages

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).

Build & release

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 analyze

The 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.

About

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.

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors