All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.1 - 2026-06-03
A documentation + release-tooling release; no runtime behavior changes.
- New Operation Coverage matrix classifying every routed operation (framework / trait / static / absent) with its default behaviour — the authoritative answer to "will my client work?"
- New Capabilities & Limitations, Conformance, and Client Setup (Frigate, Home Assistant, ONVIF Device Manager, python-onvif-zeep, VLC) pages.
- Quick Start replaced the empty-trait
MyCamerawith a minimal usable device (examples/minimal_device.rs) and a no-credentialscurlsmoke test. - Services page rewritten as an implementable per-service guide; WS-Security page gained the clock-sync handshake plus UsernameToken and fault examples; WS-Discovery page gained deployment-hazard guidance.
- Renamed the stale pre-implementation
docs/DESIGN.mdtodocs/historical-design.mdwith a warning banner (it described APIs the crate never shipped).
- Docs: install docs no longer hardcode versions — installation uses
cargo add, and the crate version + MSRV are surfaced via auto-updating crates.io badges. The "User guide" link points at the live mdBook (https://navistau.github.io/onvif-server/). - Corrected the WS-Discovery EndpointReference UUID documentation (both the
server.rsrustdoc and the book): it claimed a stable UUID-v5 derived from the advertised host, but the code uses a randomUuid::new_v4()— fixed for the process lifetime, not across restarts unless set viadiscovery_uuid.
- CI now denies rustdoc warnings (broken intra-doc links) and lints with
--all-features; CONTRIBUTING aligned to the actual CI gates. - First release published via crates.io Trusted Publishing (OIDC) — validates the automated
release/* → mainpublish pipeline (0.1.0 was a manual bootstrap publish).
0.1.0 - 2026-06-03
OnvifServerandOnvifServerBuilder— builder-pattern entry point for constructing and running the ONVIF server.- Device Management Service (
DeviceServicetrait) — handlesGetSystemDateAndTime,GetCapabilities,GetDeviceInformation,GetNetworkInterfaces,GetScopes,SetScopes,AddScopes,RemoveScopes,GetHostname, and related Device Management operations. Required service. - Media Service (
MediaServicetrait) — handles media profiles, stream URIs, and snapshot URIs. Optional; mounted at/onvif/media_servicewhen registered. - PTZ Service (
PTZServicetrait) — handles relative move, absolute move, continuous move, stop, status, and preset CRUD (get, set, goto, remove). Optional; mounted at/onvif/ptz_servicewhen registered. - Imaging Service (
ImagingServicetrait) — handles imaging configuration including brightness, contrast, and sharpness. Optional; mounted at/onvif/imaging_servicewhen registered. - Events Service (
EventServicetrait) — handles event subscriptions and notifications. Optional; mounted at/onvif/events_servicewhen registered. - All trait methods default to returning
OnvifError::NotImplemented, which maps to a SOAP fault withter:ActionNotSupportedsubcode. Clients receive a well-formed fault rather than a connection error. - WS-Security UsernameToken digest authentication — enabled via
.auth(username, password)on the builder.GetSystemDateAndTimeis automatically exempt as required by the ONVIF specification. - WS-Discovery (
discoveryfeature, optional) — multicast UDP listener on239.255.255.250:3702. Responds toProbemessages withProbeMatchesincluding the device XAddr and a stable EndpointReference UUID. Requires thesocket2crate. - Low-level WS-Discovery helpers
discovery_is_probeanddiscovery_build_probe_matchalways available (no feature gate). - Embedded ONVIF WSDL/XSD documents (
EmbeddedWsdlLoader) served at standard ONVIF WSDL paths. virtual_ptzexample: a fully functional in-memory PTZ camera implementing all five service traits, demonstratingArc<Mutex<_>>state sharing.