# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.5.6](https://github.com/moq-dev/moq/compare/libmoq-v0.5.5...libmoq-v0.5.6) - 2026-08-07

### Added

- *(libmoq)* add a client config handle, and advanced settings to the OBS plugin ([#2650](https://github.com/moq-dev/moq/pull/2650))

### Other

- drop Intel macOS release targets ([#2715](https://github.com/moq-dev/moq/pull/2715))

## [0.5.5](https://github.com/moq-dev/moq/compare/libmoq-v0.5.4...libmoq-v0.5.5) - 2026-08-06

### Fixed

- *(libmoq)* stop holding the global locks across a video encode ([#2663](https://github.com/moq-dev/moq/pull/2663))
- *(libmoq)* fix the generated CMake package config for Windows and installs ([#2671](https://github.com/moq-dev/moq/pull/2671))
- *(libmoq)* unbreak the Linux C link list, and make VAAPI opt-in ([#2669](https://github.com/moq-dev/moq/pull/2669))

## [0.5.4](https://github.com/moq-dev/moq/compare/libmoq-v0.5.3...libmoq-v0.5.4) - 2026-08-05

### Added

- *(bindings)* publish raw video with a native encoder ([#2608](https://github.com/moq-dev/moq/pull/2608))

### Fixed

- *(moq-video)* reject unrepresentable sizes, and unbreak the macOS build ([#2648](https://github.com/moq-dev/moq/pull/2648))

## [0.5.3](https://github.com/moq-dev/moq/compare/libmoq-v0.5.2...libmoq-v0.5.3) - 2026-08-03

### Other

- updated the following local packages: moq-video

## [0.5.2](https://github.com/moq-dev/moq/compare/libmoq-v0.5.1...libmoq-v0.5.2) - 2026-07-29

### Other

- updated the following local packages: moq-audio, moq-video

## [0.5.1](https://github.com/moq-dev/moq/compare/libmoq-v0.5.0...libmoq-v0.5.1) - 2026-07-27

### Other

- updated the following local packages: moq-json, moq-audio

## [0.5.0](https://github.com/moq-dev/moq/compare/libmoq-v0.4.2...libmoq-v0.5.0) - 2026-07-25

### Added

- *(bindings)* expose shared video properties ([#2457](https://github.com/moq-dev/moq/pull/2457))

### Other

- *(moq-video)* [**breaking**] one raw Frame type, and carry timestamps through encode ([#2503](https://github.com/moq-dev/moq/pull/2503))

## [0.4.2](https://github.com/moq-dev/moq/compare/libmoq-v0.4.1...libmoq-v0.4.2) - 2026-07-24

### Other

- updated the following local packages: moq-mux, moq-audio, moq-video

## [0.4.1](https://github.com/moq-dev/moq/compare/libmoq-v0.4.0...libmoq-v0.4.1) - 2026-07-23

### Other

- updated the following local packages: moq-json, moq-audio, moq-video

## [0.4.0](https://github.com/moq-dev/moq/compare/libmoq-v0.3.14...libmoq-v0.4.0) - 2026-07-22

### Fixed

- [**breaking**] correct catalog, timeline, token, and teardown contracts found in API review ([#2439](https://github.com/moq-dev/moq/pull/2439))

### Other

- [**breaking**] pre-bump API polish across the release batch ([#2423](https://github.com/moq-dev/moq/pull/2423))
- *(net)* [**breaking**] route everything through create_broadcast, gate announce on Route.live ([#2396](https://github.com/moq-dev/moq/pull/2396))
- Merge branch 'main' into dev

### Fixed

- Linking `libmoq.a` on macOS no longer fails on undefined Apple framework
  symbols, and the CMake package config carries the same libraries the
  pkg-config file does.
- `moq_track_info.timescale_valid` documented that it overrides a default
  millisecond timescale. The default is and was microseconds, matching the
  `timestamp_us` units used everywhere else in the ABI. Only the doc was wrong.

### Changed

- Producer teardown is now spelled `_finish`, not `_close`, so the name states
  the end-of-stream semantics and no longer reads as a synonym for the `_abort`
  that sits next to it: `moq_publish_close` -> `moq_publish_finish`, and the
  same for `moq_publish_media_close`, `moq_publish_track_close`,
  `moq_publish_group_close`, `moq_publish_json_snapshot_close`,
  `moq_publish_json_stream_close`, and `moq_publish_audio_raw_close`.
  `moq_publish_track_finish` now also pairs with `moq_publish_track_finish_at`.
  `_close` keeps its other two meanings (stop a listener, close a connection),
  so `moq_consume_*_close`, `moq_origin_*_close`, and `moq_session_close` are
  unchanged.
- `moq_origin_publish` / `moq_origin_unpublish` -> `moq_origin_announce` /
  `moq_origin_unannounce`, so the C ABI uses the same announce verb as every
  other layer. The `origin_publish` / `origin_consume` parameters of
  `moq_session_connect` keep their names: they name a direction, not this
  operation.
- `moq_remove_catalog_section` -> `moq_publish_catalog_section_remove`, putting
  it under the `moq_publish_catalog_section` sibling it belongs to instead of
  breaking the verb-prefix scheme.
- Dropped the `_ordered` suffix, which leaked a long-gone internal type:
  `moq_publish_media_ordered` -> `moq_publish_media`,
  `moq_consume_video_ordered` -> `moq_consume_video`, and
  `moq_consume_audio_ordered` -> `moq_consume_audio`. These now match the
  `publish_media` / `subscribe_media` names moq-ffi already uses.
- The native libraries an external linker needs alongside `libmoq.a` now come
  from `rs/libmoq/native-libs/`, so the pkg-config file and the CMake package
  config can no longer drift apart. This adds the Apple media frameworks, the
  capture frameworks, and the C++ runtime on macOS, `libva` and the C++ runtime
  on Linux, and the full system library set on Windows.
- JSON snapshot C ABI renamed for symmetry with the stream mode, so the caller
  opts explicitly into one of the two modes: `moq_json_config` ->
  `moq_json_snapshot_config`, `moq_publish_json` -> `moq_publish_json_snapshot`
  (and `_update` / `_finish`), and `moq_consume_json` ->
  `moq_consume_json_snapshot`. The shared `moq_json_value`,
  `moq_consume_json_value{,_close}`, and `moq_consume_json_close` are unchanged.

### Added

- Raw track APIs for explicit group sequences, known track ends, and track or
  group aborts.
- Raw track options for the C ABI: `moq_publish_track` now accepts
  `moq_track_info`, and `moq_consume_track` now accepts `moq_subscription`;
  subscriptions can be updated with `moq_consume_track_update`.
- Native video decode C API: `moq_consume_video_raw` (+ `_close`, `_frame`,
  `_frame_free`) subscribes to an H.264 track and hands back decoded I420 frames,
  the video counterpart to `moq_consume_audio_raw`. Decoding happens inside
  libmoq (VideoToolbox / openh264), so consumers no longer need ffmpeg.

## [0.3.14](https://github.com/moq-dev/moq/compare/libmoq-v0.3.13...libmoq-v0.3.14) - 2026-07-18

### Fixed

- *(libmoq)* write moq.pc under a profile-scoped path so debug/release don't collide ([#2379](https://github.com/moq-dev/moq/pull/2379))

## [0.3.13](https://github.com/moq-dev/moq/compare/libmoq-v0.3.12...libmoq-v0.3.13) - 2026-07-16

### Other

- updated the following local packages: moq-audio

## [0.3.12](https://github.com/moq-dev/moq/compare/libmoq-v0.3.11...libmoq-v0.3.12) - 2026-07-12

### Other

- split into snapshot/stream modules and expose JSON tracks through moq-ffi/libmoq ([#2196](https://github.com/moq-dev/moq/pull/2196))

## [0.3.11](https://github.com/moq-dev/moq/compare/libmoq-v0.3.10...libmoq-v0.3.11) - 2026-07-09

### Other

- updated the following local packages: moq-audio

## [0.3.10](https://github.com/moq-dev/moq/compare/libmoq-v0.3.9...libmoq-v0.3.10) - 2026-07-04

### Other

- [codex] Future-proof moq-net metadata structs ([#2046](https://github.com/moq-dev/moq/pull/2046))
- allowing container be probed and select depending on the what on wire ([#2040](https://github.com/moq-dev/moq/pull/2040))

## [0.3.9](https://github.com/moq-dev/moq/compare/libmoq-v0.3.8...libmoq-v0.3.9) - 2026-06-30

### Other

- API cleanup before the semver bump ([#1941](https://github.com/moq-dev/moq/pull/1941))
- Backport moq-mux to main (adapted to main's moq-net, no wire/API breaks) ([#1918](https://github.com/moq-dev/moq/pull/1918))

## [0.3.8](https://github.com/moq-dev/moq/compare/libmoq-v0.3.7...libmoq-v0.3.8) - 2026-06-23

### Added

- *(catalog)* expose untyped catalog extensions via moq-ffi and libmoq ([#1886](https://github.com/moq-dev/moq/pull/1886))

### Fixed

- link macOS CoreServices for the bundled notify/FSEvents backend ([#1875](https://github.com/moq-dev/moq/pull/1875))

## [0.3.7](https://github.com/moq-dev/moq/compare/libmoq-v0.3.6...libmoq-v0.3.7) - 2026-06-19

### Fixed

- *(libmoq)* use .cast() for c_char pointer to fix arm64 clippy ([#1782](https://github.com/moq-dev/moq/pull/1782))

## [0.3.5](https://github.com/moq-dev/moq/compare/libmoq-v0.3.4...libmoq-v0.3.5) - 2026-06-16

### Fixed

- *(native)* surface terminal auth connect errors ([#1649](https://github.com/moq-dev/moq/pull/1649))

## [0.3.4](https://github.com/moq-dev/moq/compare/libmoq-v0.3.3...libmoq-v0.3.4) - 2026-06-10

### Added

- *(hang,json,moq-mux)* generic catalog with application extensions ([#1658](https://github.com/moq-dev/moq/pull/1658))

### Fixed

- *(moq-relay)* classify malformed auth-API JSON as an upstream 502

### Other

- Revert accidental commit 24d25604 (moq-native connect/reconnect refactor)
- *(moq-native)* migrate from anyhow to thiserror ([#1651](https://github.com/moq-dev/moq/pull/1651))
- cross-compile all x86_64-darwin release artifacts on Apple Silicon ([#1623](https://github.com/moq-dev/moq/pull/1623))

## [0.3.3](https://github.com/moq-dev/moq/compare/libmoq-v0.3.2...libmoq-v0.3.3) - 2026-06-03

### Other

- updated the following local packages: moq-audio

## [0.3.2](https://github.com/moq-dev/moq/compare/libmoq-v0.3.1...libmoq-v0.3.2) - 2026-06-02

### Other

- expose moq_error(), stop logging FFI errors ([#1586](https://github.com/moq-dev/moq/pull/1586))
- shrink moq-ffi & libmoq staticlibs with LTO (unblocks the moq-go mirror push) ([#1577](https://github.com/moq-dev/moq/pull/1577))

## [0.3.1](https://github.com/moq-dev/moq/compare/libmoq-v0.3.0...libmoq-v0.3.1) - 2026-05-30

### Other

- add moq_origin_consume_announced to wait for a broadcast ([#1552](https://github.com/moq-dev/moq/pull/1552))
- route Android logs to logcat ([#1541](https://github.com/moq-dev/moq/pull/1541))

## [0.3.0](https://github.com/moq-dev/moq/compare/libmoq-v0.2.17...libmoq-v0.3.0) - 2026-05-30

### Other

- terminal-callback lifetime contract for C consumers ([#1546](https://github.com/moq-dev/moq/pull/1546))
- auto-reconnect sessions; conducer-based Reconnect notifications ([#1544](https://github.com/moq-dev/moq/pull/1544))
- Add libmoq catalog producer + raw moq-net track API ([#1533](https://github.com/moq-dev/moq/pull/1533))
- lint shell, workflows, TOML, Nix, and justfiles via nix devShell ([#1519](https://github.com/moq-dev/moq/pull/1519))

### Added

- Catalog producer API to author renditions directly (`moq_publish_video_config`, `moq_publish_audio_config`, `moq_publish_video_remove`, `moq_publish_audio_remove`), mirroring the consume-side config queries.
- Raw moq-net track API for arbitrary (non-media) byte tracks, mirroring the moq-ffi primitives:
  - Publish: `moq_publish_track`, `moq_publish_track_group`, `moq_publish_track_frame`, `moq_publish_group_frame`, `moq_publish_group_close`, `moq_publish_track_close`.
  - Consume: `moq_consume_track`, `moq_consume_track_frame`, `moq_consume_track_frame_close`, `moq_consume_track_close`.

## [0.2.17](https://github.com/moq-dev/moq/compare/libmoq-v0.2.16...libmoq-v0.2.17) - 2026-05-24

### Added

- add moq-audio crate, raw-audio FFI, and rename moq-codec to moq-video ([#1484](https://github.com/moq-dev/moq/pull/1484))

## [0.2.16](https://github.com/moq-dev/moq/compare/libmoq-v0.2.15...libmoq-v0.2.16) - 2026-05-23

### Other

- Package moq-gst for release via Nix-built tarballs ([#1453](https://github.com/moq-dev/moq/pull/1453))

## [0.2.15](https://github.com/moq-dev/moq/compare/libmoq-v0.2.14...libmoq-v0.2.15) - 2026-05-20

### Other

- rename moq-lite package to moq-net ([#1428](https://github.com/moq-dev/moq/pull/1428))

## [0.2.14](https://github.com/moq-dev/moq/compare/libmoq-v0.2.13...libmoq-v0.2.14) - 2026-05-07

### Other

- moq-mux backport + dual-API cleanup ([#1341](https://github.com/moq-dev/moq/pull/1341))
- tighten public API surface and remove deprecated methods ([#1378](https://github.com/moq-dev/moq/pull/1378))
- Revert moq-lite FETCH/Subscription API changes ([#1372](https://github.com/moq-dev/moq/pull/1372))
- backport Subscription model API for FETCH readiness ([#1348](https://github.com/moq-dev/moq/pull/1348))
- add OriginConsumer::wait_for_broadcast; deprecate consume_broadcast ([#1340](https://github.com/moq-dev/moq/pull/1340))
- hop-based clustering ([#1322](https://github.com/moq-dev/moq/pull/1322))

## [0.2.13](https://github.com/moq-dev/moq/compare/libmoq-v0.2.12...libmoq-v0.2.13) - 2026-03-18

### Other

- Fix FFI test panic strategy mismatch ([#1128](https://github.com/moq-dev/moq/pull/1128))
- Remove unused dev-dependencies and bump @moq/qmux ([#1126](https://github.com/moq-dev/moq/pull/1126))

## [0.2.12](https://github.com/moq-dev/moq/compare/libmoq-v0.2.11...libmoq-v0.2.12) - 2026-03-13

### Other

- Validate libmoq IDs fit in i32 at creation time ([#1087](https://github.com/moq-dev/moq/pull/1087))
- Fix libmoq test races by using monotonic IDs ([#1086](https://github.com/moq-dev/moq/pull/1086))
- Set MSRV to 1.85 (edition 2024) ([#1083](https://github.com/moq-dev/moq/pull/1083))
- Add comprehensive FFI integration tests for libmoq broadcast ([#1068](https://github.com/moq-dev/moq/pull/1068))
- Improve libmoq C bindings ([#1061](https://github.com/moq-dev/moq/pull/1061))

## [0.2.10](https://github.com/moq-dev/moq/compare/libmoq-v0.2.9...libmoq-v0.2.10) - 2026-03-03

### Other

- OrderedProducer API with max_group_duration ([#1007](https://github.com/moq-dev/moq/pull/1007))
- Add typed initialization for Opus and AAC in moq-mux ([#1034](https://github.com/moq-dev/moq/pull/1034))
- Add moq-msf crate for MSF catalog support ([#993](https://github.com/moq-dev/moq/pull/993))
- Replace tokio::sync::watch with custom Producer/Subscriber ([#996](https://github.com/moq-dev/moq/pull/996))

## [0.2.8](https://github.com/moq-dev/moq/compare/libmoq-v0.2.7...libmoq-v0.2.8) - 2026-02-12

### Other

- Error cleanup ([#944](https://github.com/moq-dev/moq/pull/944))
- Reduce the moq-lite API size ([#943](https://github.com/moq-dev/moq/pull/943))

## [0.2.7](https://github.com/moq-dev/moq/compare/libmoq-v0.2.6...libmoq-v0.2.7) - 2026-02-09

### Other

- Use `moq` instead of `hang` for some crates ([#906](https://github.com/moq-dev/moq/pull/906))
- Remove priority from the catalog ([#905](https://github.com/moq-dev/moq/pull/905))

## [0.2.6](https://github.com/moq-dev/moq/compare/libmoq-v0.2.5...libmoq-v0.2.6) - 2026-02-03

### Other

- updated the following local packages: moq-lite, hang

## [0.2.5](https://github.com/moq-dev/moq/compare/libmoq-v0.2.4...libmoq-v0.2.5) - 2026-01-24

### Other

- Add a builder pattern for constructing clients/servers ([#862](https://github.com/moq-dev/moq/pull/862))
- Add universal libmoq build for macos  ([#861](https://github.com/moq-dev/moq/pull/861))
- Add #[non_exhaustive] to moq-native configuration. ([#850](https://github.com/moq-dev/moq/pull/850))
- upgrade to Rust edition 2024 ([#838](https://github.com/moq-dev/moq/pull/838))

## [0.2.4](https://github.com/moq-dev/moq/compare/libmoq-v0.2.3...libmoq-v0.2.4) - 2026-01-12

## [0.2.3](https://github.com/moq-dev/moq/compare/libmoq-v0.2.2...libmoq-v0.2.3) - 2026-01-10

### Added

- iroh support ([#794](https://github.com/moq-dev/moq/pull/794))

### Other

- Add generic time system with Timescale type ([#824](https://github.com/moq-dev/moq/pull/824))
- support WebSocket fallback for clients ([#812](https://github.com/moq-dev/moq/pull/812))
- target_link_libraries ([#802](https://github.com/moq-dev/moq/pull/802))

## [0.2.2](https://github.com/moq-dev/moq/compare/libmoq-v0.2.1...libmoq-v0.2.2) - 2025-12-19

### Other

- Add HLS import module ([#789](https://github.com/moq-dev/moq/pull/789))

## [0.1.0](https://github.com/moq-dev/moq/releases/tag/libmoq-v0.1.0) - 2025-12-13

### Other

- Use BufList for hang::Frame ([#769](https://github.com/moq-dev/moq/pull/769))
- Fix and over-optimize the H.264 annex.b import ([#766](https://github.com/moq-dev/moq/pull/766))
- Don't use 0 index for the slab. ([#758](https://github.com/moq-dev/moq/pull/758))
- Fix the include.h path ([#755](https://github.com/moq-dev/moq/pull/755))
- kixelated -> moq-dev ([#749](https://github.com/moq-dev/moq/pull/749))
- Revamp the C API and have it use hang/import ([#732](https://github.com/moq-dev/moq/pull/732))

## [0.7.0](https://github.com/moq-dev/moq/compare/libmoq-v0.6.1...libmoq-v0.7.0) - 2025-11-26

### Other

- Add initial C bindings for moq ([#722](https://github.com/kixelated/moq/pull/722))
