# Robotweax SRT 0.3 vs Haivision SRT 1.5.7 — Feature Matrix

Oct 14, 2026 · @Marc

## Scope

Robotweax SRT v0.3.0 (tagged at commit `4ae6330d`, 2026-10-14) implements the full Haivision SRT 1.5.7 public C API — all 72 exported functions and all 61 socket options — and adds a long list of extensions, while dropping HSv4, custom congestion controllers, custom packet filters, and jumbo MSS. Haivision 1.5.7 is the tag at commit `899348d8` (2026-08-28), which Robotweax itself uses as its pinned compatibility reference.

| Column | Meaning |
| --- | --- |
| Robotweax | Status at the v0.3.0 tag; "partial" is Robotweax's own manifest label (`compat/srt-1.5.7-api.json`), meaning the documented scope works but complete upstream parity is not claimed |
| Haivision | Status in the v1.5.7 tag, default build unless noted |
| Yes / Partial / No / Opt-in / Experimental | Opt-in = available behind a build flag or socket option; Experimental = Robotweax labels it unreviewed or unqualified |

## Project, license, language, platforms

| Item | Robotweax SRT 0.3.0 | Haivision SRT 1.5.7 |
| --- | --- | --- |
| Origin | Independent clean-room implementation (not a fork) | Reference implementation (UDT lineage) |
| License | MIT | MPL-2.0 |
| Project version / `srt_getversion()` | 0.3.0 / reports `1.5.7` (API target) | 1.5.7 / `1.5.7` |
| Shared-library ABI | SONAME line 0.3; rebuild required from 0.2 | libsrt SONAME 1.5 |
| Language standard | C++20 | C++03 core, C++11 for apps (`ENABLE_CXX11`) |
| Core source size | \~52k lines (`src/`) | \~62k lines (`srtcore/` + `haicrypt/`) |
| Build system | CMake 3.20+ | CMake (+ legacy `configure` tcl wrapper) |
| Qualified desktop platforms | Linux, macOS, Windows (x64, ARM64 SDK) | Linux, macOS, Windows |
| Other platforms | Android/iOS: experimental compile/link and emulator checks only | Android, iOS, FreeBSD, OpenBSD, Solaris, Cygwin, MinGW in CMake |
| Library name / include | `librobotweax-srt`, `<srt/srt.h>` (legacy `srt` layout opt-in) | `libsrt`, `<srt/srt.h>` |
| CMake package | `RobotweaxSRT::srt` + `robotweax-srt.pc` (optional `srt.pc` compat) | `srt` target + `srt.pc` |
| Published release | [v0.3.0](https://github.com/Robotweax/srt/releases/tag/v0.3.0) (2026-10-14) | v1.5.7 (2026-08-28) |

## Protocol and transport

| Feature | Robotweax | Haivision 1.5.7 | Notes |
| --- | --- | --- | --- |
| HSv5 handshake (Caller/Listener) | Yes | Yes | IPv4 + IPv6, blocking and nonblocking |
| HSv5 Rendezvous | Yes | Yes | Robotweax requires matching address families |
| HSv4 (legacy UDT-style, SRT < 1.3) | No — fails deterministically, no downgrade | Yes | Robotweax peers must identify as SRT 1.3.0+ |
| Live / Message mode (`SRTT_LIVE`) | Yes | Yes | TSBPD, TLPKTDROP, DROPREQ, per-message TTL |
| File / Stream mode (`SRTT_FILE`) | Yes | Yes | Partial reads/writes, zero-byte EOF, `srt_sendfile`/`srt_recvfile` |
| Additional transport types | `SRTT_CONTROL` (reliable ordered commands), `SRTT_SENSOR` (FEC-only, no ARQ) | None | Robotweax-only wire profiles, not Haivision-interoperable |
| LiveCC congestion control | Partial — pacing and runtime bandwidth changes; no blind timeout retransmit when peer uses periodic NAK | Yes | Robotweax matches the documented 1.5.7 Live policy, not every reference CC behavior |
| FileCC congestion control | Yes | Yes | Both directions validated against 1.5.7 |
| Custom congestion control modules | No | Yes (internal C++ `SrtCongestion` registry) | `SRTO_CONGESTION` accepts only `live`/`file` in Robotweax |
| IPv6 / dual-stack / `SRTO_IPV6ONLY` | Yes | Yes |  |
| Shared UDP multiplexer (several SRT sockets on one port) | Yes | Yes |  |
| `srt_bind_acquire` (adopt pre-bound UDP socket) | Yes, plus Linux `SO_REUSEPORT` multi-channel groups (listener only) | Yes |  |
| `SRTO_MSS` range | 76–1500 bytes; jumbo rejected | 76 and up (jumbo allowed) | Robotweax uses fixed receive datagram storage |
| Sequence rollover (31-bit) | Yes | Yes |  |
| ACK / NAK / ACKACK / KEEPALIVE | Yes | Yes |  |
| Periodic NAK report (`SRTO_NAKREPORT`) | Yes | Yes |  |
| Retransmission algorithm select (`SRTO_RETRANSMITALGO`) | Yes | Yes |  |
| Adaptive loss max TTL (`SRTO_LOSSMAXTTL`) | Yes (0.3.0 adds File/Control marking capability) | Yes |  |
| Retransmission bandwidth cap (`SRTO_MAXREXMITBW`) | Opt-in (`ENABLE_MAXREXMITBW`) | Opt-in (`ENABLE_MAXREXMITBW`, v1.6 preview) |  |
| Drift tracer (`SRTO_DRIFTTRACER`) | Yes | Yes |  |
| Stream ID (`SRTO_STREAMID`) + access control header | Yes; standalone `<srt/access_control.h>` | Yes |  |
| Listener callback / connect callback | Yes | Yes | Robotweax group admission needs `SRTO_ROBOTWEAX_GROUPDOMAIN` set in callback |
| Epoll (`srt_epoll_wait` / `uwait`) | Partial — SRT sockets, groups, system sockets, level/edge; UPDATE only via `uwait` | Yes |  |
| Linger / close semantics | Yes, idempotent; closing unknown handle succeeds (Haivision returns `SRT_EINVSOCK`) | Yes |  |
| `IP_PKTINFO` listener target-address extraction | Not documented | Yes (`ENABLE_PKTINFO`) |  |
| `SRTO_BINDTODEVICE` | Linux only | Linux only |  |
| `SRTO_IPTOS` on IPv6 | Unix only; explicit IPv6 TOS fails on Windows | Yes |  |
| Socket ID allocation | Non-sequential keyed permutation, never recycled per runtime | Sequential from a random start | Robotweax: IDs on the wire reveal nothing about other sockets |
| POSIX fork policy | Documented: child after init fails with `SRT_EINVOP` | Undocumented |  |

## Encryption and security

| Feature | Robotweax | Haivision 1.5.7 | Notes |
| --- | --- | --- | --- |
| AES-CTR 128/192/256 (default) | Yes | Yes | PBKDF2-HMAC-SHA1 key derivation, RFC 3394 key wrap, even/odd keys |
| Runtime key rotation (`KMREFRESHRATE`, `KMPREANNOUNCE`) | Yes, acknowledged rotation | Yes |  |
| AES-GCM authenticated payloads | Opt-in (`ENABLE_AEAD_API_PREVIEW=ON`), released as Robotweax extension | Opt-in (`ENABLE_AEAD_API_PREVIEW`, openssl-evp or botan only), v1.6 preview | Cross-implementation GCM claimed only for AES-128-GCM Live/Message |
| `SRTO_CRYPTOMODE` | Only in GCM-enabled build | Only in AEAD-preview build |  |
| Encryption can be compiled out | No (always built) | Yes (`ENABLE_ENCRYPTION=OFF`) |  |
| Crypto backends | OpenSSL 3.x (default), Mbed TLS 3.6.7+ (Linux/macOS), Windows BCrypt/CNG (experimental) | OpenSSL, OpenSSL-EVP (default), GnuTLS/Nettle, Mbed TLS, Botan | Robotweax rejects Mbed TLS 4.x; no GnuTLS or Botan |
| Runtime backend identification | Yes (`SRTO_ROBOTWEAX_CRYPTO_BACKEND`) | No |  |
| KM rollback protection | Bounded: 4 retired generations per key parity; older captured KM can still install an old key | Not specifically documented | Tracked as Robotweax issue #112 |
| Caller stale-INDUCTION replay correction | Yes | — | Delayed INDUCTION after CONCLUSION is ignored |
| Session authentication of KM + FEC parity | Opt-in (`SRTO_ROBOTWEAX_SESSIONAUTH`, version 2, HMAC-SHA256, 40-byte parity overhead) | No | Not Haivision-interoperable; Caller/Listener only |
| Authenticated runtime controls (ACK/NAK/DROPREQ) | Experimental ACP1 only (`ROBOTWEAX_SRT_ENABLE_EXPERIMENTAL_ACP1`, unreviewed) | No | Control packets unauthenticated in both default profiles |
| Enforced encryption (`SRTO_ENFORCEDENCRYPTION`) | Yes | Yes |  |
| Passphrase erasure after setup cancel | Yes, documented | — |  |
| Application rejection codes (`SRT_REJX_*`) | Yes | Yes |  |
| Fuzz targets in tree | 7 libFuzzer harnesses (handshake, packet, KM, FEC control, group membership, AEAD, ACP1) | None in tree |  |
| Security policy document | `SECURITY.md` present | No `SECURITY.md` in tag |  |

## Packet filter / FEC

| Feature | Robotweax | Haivision 1.5.7 | Notes |
| --- | --- | --- | --- |
| Built-in `fec` filter (`SRTO_PACKETFILTER`) | Yes | Yes | HSv5 negotiation, same config grammar |
| Row / Column / Matrix (rows×cols) geometries | Yes | Yes |  |
| Even / staircase layouts | Yes | Yes |  |
| `cols` range | 2–128 (deliberate resource bound) | 2–65535 (16-bit) | Common geometries interoperate; full option-range parity not claimed |
| ARQ modes (`always`, `onreq`, `never`) | Yes | Yes |  |
| FEC + encryption (AES-CTR) | Yes | Yes |  |
| FEC + AES-GCM | Robotweax-to-Robotweax only | Preview |  |
| FEC + File/Stream | No (rejected) | Not supported for File either |  |
| Custom / third-party packet filters | No | Yes (C++ `SrtPacketFilterBase` plugin API) |  |
| Iterative recursive reconstruction | Yes (32×32 even, 64×32 staircase long-chain fixtures) | Yes |  |
| Authenticated FEC parity (`fec-sensor-v1`, session auth) | Opt-in, Robotweax-only | No |  |
| FEC-only no-ARQ sensor profile (`SRTT_SENSOR`) | Yes, Robotweax-only | No |  |
| Pre-allocation resource estimate / no-growth wire input | Yes, documented | — |  |
| FEC statistics (`pktSndFilterExtra`, `pktRcvFilterSupply`, `pktRcvFilterLoss`) | Yes | Yes |  |

## Connection groups (bonding)

| Feature | Robotweax | Haivision 1.5.7 | Notes |
| --- | --- | --- | --- |
| Groups compiled in by default | Yes, always | No (`ENABLE_BONDING=OFF` default) |  |
| Broadcast group (`SRT_GTYPE_BROADCAST`) | Yes | Yes | Fan-out, duplicate suppression, late join |
| Backup group (`SRT_GTYPE_BACKUP`) | Yes, weighted Main/Backup with probe rotation | Yes | Interop pinned in both directions |
| Balancing / multicast group types | No | Not in 1.5.7 enum |  |
| Group Rendezvous | No (`SRT_EINVOP`) | Not defined for groups |  |
| Group File/Stream or FileCC | No | Live only |  |
| `srt_connect_group`, `srt_prepare_endpoint`, `srt_group_data`, `srt_groupof`, `srt_accept_bond`, `srt_create_config` | Yes | Yes | `srt_prepare_endpoint` adds input validation absent upstream |
| Per-member option overrides (`srt_config_add`) | Partial — `SRTO_GROUPMINSTABLETIMEO` override rejected | Yes |  |
| `SRTO_GROUPMINSTABLETIMEO` | Backup groups only; RTT-adaptive response timeout | Yes |  |
| Listener group admission via callback | Requires nonzero `SRTO_ROBOTWEAX_GROUPDOMAIN` set in callback | Return 0 admits | Behavior difference; migration documented |
| Listener-bond domains across distinct listeners | Yes | Yes |  |
| Closed-member unread data | Retained in bounded storage (8,192 packets / \~11.9 MB / 120 s) | Discarded |  |
| Group statistics | Logical group counters; `pktRetrans*` includes all member retransmissions | Group rows leave retransmission fields zero | Intentional difference |
| Backup member ACK isolation (standby state preserved) | Yes | — | Keeps a Haivision Backup caller's standby alive after primary loss |
| Idle-failed member channel retirement (≤30 s, 256-channel pool) | Yes | — |  |
| Group path labels (`SRTO_ROBOTWEAX_PATHID`, policy OFF/REQUIRED/IF\_OFFERED) | Opt-in extension | No |  |
| Standby RTT monitoring on idle Backup members | Opt-in extension (`robotweax_srt_standby_rtt_data_v1`) | No |  |
| Backup sender authority snapshot (`robotweax_srt_group_send_state_v1`) | Yes | No |  |
| Group path data snapshot (`ROBOTWEAX_SRT_GROUP_PATHDATA_V1`) | Yes | No |  |
| Encrypted mixed-implementation groups | Not claimed | — | Member-local keys in both; qualify exact peer |

## Public C API surface

Haivision 1.5.7 exports 72 `SRT_API` functions in `srtcore/srt.h` (`srt_setlogstream` appears only as a commented-out declaration); Robotweax implements all 72 (46 fully, 26 partial). Robotweax also keeps the deprecated inline `srt_bind_peerof` alias, all 26 public types, both exported data symbols, and all 9 constant groups (including the `SRT_KM_S_E_SIZE = 6` sentinel).

| Function | Robotweax | Haivision | Robotweax scope / difference |
| --- | --- | --- | --- |
| `srt_startup`, `srt_cleanup`, `srt_socket`, `srt_create_socket`, `srt_close`, `srt_getversion`, `srt_clock_type`, `srt_time_now`, `srt_connection_time` | Yes | Yes | Cleanup is a serialized runtime generation; `srt_close` on unknown handle succeeds (Haivision: `SRT_EINVSOCK`) |
| `srt_bind`, `srt_listen`, `srt_accept`, `srt_connect` | Partial | Yes | HSv5 only; all IPv4/IPv6 Caller/Listener paths plus Broadcast/Backup group admission |
| `srt_bind_acquire`, `srt_bind_peerof`, `srt_connect_bind`, `srt_connect_debug` | Yes | Yes |  |
| `srt_rendezvous` | Partial | Yes | Same-family sockets only; group handles rejected |
| `srt_connect_callback`, `srt_listen_callback` | Yes | Yes | Group admission callback must set `SRTO_ROBOTWEAX_GROUPDOMAIN` |
| `srt_send`, `srt_recv`, `srt_sendmsg`, `srt_recvmsg`, `srt_sendmsg2`, `srt_recvmsg2` | Partial | Yes | Live/Message and File/Stream modes incl. group send/receive; unsupported flag combinations fail explicitly |
| `srt_sendfile`, `srt_recvfile` | Yes | Yes | Validated against 1.5.7 clear and AES-128/192/256 |
| `srt_getsockopt` / `setsockopt`, `getsockflag` / `setsockflag` | Partial | Yes | Scope = socket-option table below |
| `srt_getsockname`, `srt_getpeername` | Partial | Yes | Connected wildcard binding reports an outgoing-route snapshot, matching observed 1.5.7 behavior |
| `srt_getsockstate`, `srt_getsndbuffer` | Yes | Yes | `SRTS_CLOSED` retained for last 4096 closes, then `SRTS_NONEXIST` |
| `srt_bstats`, `srt_bistats` | Partial | Yes | Stable 1.5.7 struct layout; `mbpsBandwidth` is local arrival throughput, not ACK-derived capacity |
| `srt_epoll_create/add/update/remove/set/release/clear_usocks` | Yes | Yes |  |
| `srt_epoll_wait`, `srt_epoll_uwait` | Partial | Yes | UPDATE events via `uwait` only (per documented contract) |
| `srt_create_group`, `srt_connect_group`, `srt_group_data`, `srt_groupof`, `srt_config_add` | Partial | Yes (bonding build) | Broadcast/Backup only |
| `srt_accept_bond`, `srt_prepare_endpoint`, `srt_create_config`, `srt_delete_config` | Yes | Yes (bonding build) |  |
| `srt_getlasterror`, `srt_getlasterror_str`, `srt_clearlasterror`, `srt_strerror`, `srt_getrejectreason`, `srt_setrejectreason`, `srt_rejectreason_str`, `srt_msgctrl_init` | Yes | Yes |  |
| `srt_setloglevel`, `srt_addlogfa`, `srt_dellogfa`, `srt_resetlogfa`, `srt_setloghandler`, `srt_setlogflags` | Yes | Yes |  |
| `srt_setlogstream` (C++ `std::ostream`) | No | No (commented out) | Neither exports it; use srt\_setloghandler |
| Robotweax extra exports (`robotweax_srt_rtt_data_v1`, `robotweax_srt_standby_rtt_data_v1`, `robotweax_srt_group_send_state_v1`, group path data, `robotweax_srt_inspect_packet`, `robotweax_srt_options_*`) | Yes (84 exported symbols total in 0.2.9) | No | See extensions section |
| Legacy UDT headers (`udt.h`) | No | Yes | Not part of Robotweax's compatibility surface |

## Socket options

All 61 `SRTO_*` options of 1.5.7 are present in Robotweax: 53 implemented, 6 partial, 2 excluded from the default build (same gating as upstream). Robotweax adds 15 `SRTO_ROBOTWEAX_*` options in a separate ID namespace (`0x01000001`+) that leave `SRTO_E_SIZE` unchanged.

| Option group | Robotweax | Haivision | Difference |
| --- | --- | --- | --- |
| Buffers and flow: `SNDBUF`, `RCVBUF`, `UDP_SNDBUF`, `UDP_RCVBUF`, `FC`, `MAXBW`, `INPUTBW`, `MININPUTBW`, `OHEADBW` | Yes | Yes | Byte values align to MSS-minus-28 slots; UDP buffers clamped to at least MSS |
| `SRTO_MSS` | Partial (76–1500) | Yes (76+) | Jumbo rejected |
| Mode and sync: `SNDSYN`, `RCVSYN`, `SNDTIMEO`, `RCVTIMEO`, `MESSAGEAPI`, `PAYLOADSIZE`, `LINGER`, `SENDER`, `RENDEZVOUS`, `REUSEADDR`, `ISN` | Yes | Yes | Also accepted on group handles where documented |
| `SRTO_TRANSTYPE` | Partial | Yes | Adds Robotweax-only `SRTT_CONTROL`, `SRTT_SENSOR` values |
| `SRTO_CONGESTION` | Partial | Yes | `live`/`file` only; no custom controllers |
| Latency and timing: `TSBPDMODE`, `LATENCY`, `RCVLATENCY`, `PEERLATENCY`, `TLPKTDROP`, `SNDDROPDELAY`, `DRIFTTRACER`, `PEERIDLETIMEO`, `CONNTIMEO` | Yes | Yes |  |
| Recovery: `NAKREPORT`, `LOSSMAXTTL`, `RETRANSMITALGO` | Yes | Yes |  |
| `SRTO_MAXREXMITBW` | Opt-in build (`ENABLE_MAXREXMITBW`) | Opt-in build | Not in default 1.5.7 profile in either |
| Encryption: `PASSPHRASE`, `PBKEYLEN`, `KMSTATE`, `SNDKMSTATE`, `RCVKMSTATE`, `KMREFRESHRATE`, `KMPREANNOUNCE`, `ENFORCEDENCRYPTION` | Yes | Yes |  |
| `SRTO_CRYPTOMODE` | GCM-extension build only | AEAD-preview build only |  |
| Network: `IPTTL`, `IPV6ONLY`, `BINDTODEVICE` | Yes | Yes | `BINDTODEVICE` Linux-only in both |
| `SRTO_IPTOS` | Partial | Yes | Explicit IPv6 TOS fails on Windows (no settable `IPV6_TCLASS` in Winsock) |
| Version: `VERSION`, `PEERVERSION`, `MINVERSION` | Yes | Yes | `PEERVERSION` validated at `0x00010507` against 1.5.7 |
| State and readiness: `STATE`, `EVENT`, `SNDDATA`, `RCVDATA` | Yes | Yes | Individual sockets only for `EVENT`/`SNDDATA`/`RCVDATA` |
| `SRTO_STREAMID` | Yes | Yes |  |
| `SRTO_PACKETFILTER` | Partial | Yes | Built-in `fec` grammar, `cols` ≤ 128 |
| Groups: `GROUPCONNECT`, `GROUPTYPE` | Yes | Yes (bonding build) |  |
| `SRTO_GROUPMINSTABLETIMEO` | Partial | Yes (bonding build) | Backup groups only; per-endpoint override rejected |
| Deprecated 1.5.7 options (`SRTO_DEPRECATED_END` range) | Not carried | Declared |  |
| Robotweax extensions: `VERSION`, `CRYPTO_BACKEND`, `SESSIONAUTH`, `PEERGROUP`, `GROUPDOMAIN`, `PATHID`, `PATHID_REQUIRED`, `PATHID_POLICY`, `STANDBYRTT_REQUIRED`, `STANDBYRTT_POLICY`, `PEER_HANDSHAKE`, `IDENTITY_ADVERTISEMENT`, `PEER_IDENTITY`, `ACP1_REQUIRED`, `ACP1_ACTIVE` | Yes | No | Identity and ACP1 options are development/experimental |

## Statistics, logging, observability

| Feature | Robotweax | Haivision 1.5.7 | Notes |
| --- | --- | --- | --- |
| `SRT_TRACEBSTATS` layout | Identical 1.5.7 ABI | Reference | Cumulative + interval, clearable |
| Packet/byte/rate/buffer/RTT/loss/retrans/ACK/NAK counters | Yes | Yes |  |
| FEC filter counters | Yes | Yes |  |
| Undecryptable / encryption counters | Yes | Yes |  |
| `mbpsBandwidth` semantics | Local arrival throughput | ACK-derived link capacity estimate | Documented difference |
| `pktCongestionWindow` (Live) | Reports configured flow window | CC window |  |
| Group statistics (`srt_bstats` on group handle) | Logical group counters; retransmissions include departed members | Group rows, retrans fields zero |  |
| RTT provenance (observed vs initial 100 ms estimate) | Yes, `robotweax_srt_rtt_data_v1` (48-byte V1) | No |  |
| Standby RTT snapshot for idle Backup members | Opt-in extension | No |  |
| Backup sender authority snapshot | Yes (80-byte V1, `authority_revision`) | No |  |
| Peer handshake metadata readback (`SRTO_ROBOTWEAX_PEER_HANDSHAKE`) | Yes | No |  |
| Peer implementation identity (`0x7f13` CONFIG record) | Experimental, default-off, self-reported | No |  |
| Sender drop trace | Opt-in build (`ROBOTWEAX_SRT_SENDER_DROP_TRACE`) + analyzer script | No |  |
| Log level / functional areas / handler / flags | Yes (64 bounded FA values) | Yes |  |
| Log stream (`srt_setlogstream`) | No | No (commented out in header) |  |
| Heavy debug logging build | No equivalent flag | `ENABLE_HEAVY_LOGGING`, `ENABLE_HAICRYPT_LOGGING` |  |
| Secret-safe crypto diagnostics | Documented | — |  |
| Reverse-DNS in logs | No | Opt-in (`ENABLE_GETNAMEINFO`) |  |
| Native packet inspection API (`robotweax_srt_inspect_packet`) | Yes (`<robotweax_srt.h>`) | No |  |

## Build system, crypto backends, packaging

| Item | Robotweax | Haivision 1.5.7 |
| --- | --- | --- |
| Minimum toolchain | CMake 3.20, C++20 compiler, OpenSSL 3.x (or Mbed TLS 3.6.7+), Python 3.10 for tests | CMake, C++03/11 compiler, any supported crypto lib |
| Static / shared selection | `BUILD_SHARED_LIBS` | `ENABLE_STATIC` / `ENABLE_SHARED` (both on) |
| Crypto backend switch | `ROBOTWEAX_SRT_CRYPTO_BACKEND` = openssl, mbedtls, bcrypt | `USE_ENCLIB` = openssl, openssl-evp, gnutls, mbedtls, botan |
| Build without encryption | No | Yes (`ENABLE_ENCRYPTION=OFF`) |
| Bonding toggle | Always on | `ENABLE_BONDING` (default off) |
| AEAD / GCM toggle | `ENABLE_AEAD_API_PREVIEW` (same flag name) | `ENABLE_AEAD_API_PREVIEW` |
| Other notable flags | `BUILD_TESTS`, `BUILD_BENCHMARKS`, `BUILD_FUZZERS`, `BUILD_TOOLS`, `BUILD_EXAMPLES`, `WARNINGS_AS_ERRORS` (on), `SENDER_DROP_TRACE`, `INSTALL_LAYOUT` (namespaced/legacy), `ENABLE_EXPERIMENTAL_ACP1` | `ENABLE_APPS`, `ENABLE_UNITTESTS`, `ENABLE_HEAVY_LOGGING`, `ENABLE_PKTINFO`, `ENABLE_STDCXX_SYNC`, `ENABLE_MONOTONIC_CLOCK`, `USE_BUSY_WAITING`, `ENABLE_CLANG_TSA`, `ENABLE_CODE_COVERAGE`, `ENABLE_PROFILE` |
| Install layout | Namespaced `robotweax-srt` by default; `legacy` layout gives `libsrt` names | `libsrt` |
| pkg-config | `robotweax-srt.pc` (+ optional `srt.pc` compat for FFmpeg-style probes) | `srt.pc`, `haisrt.pc` |
| Distro packaging in tree | Debian (`librobotweax-srt0.3`, `-dev`), Fedora spec, Homebrew formula (tap), vcpkg port, Windows SDK installers (OpenSSL and BCrypt; Win32/x64/ARM64 Debug+Release, MSBuild props) | None in tree (downstream packagers), `nuget.config` |
| Signed release artifacts | Yes — signed Windows SDK installers, post-signing checksums, immutable tag provenance (0.2.9) | Source tag only |
| CI workflows | 8 GitHub workflows: core CI (Linux/macOS/Windows), Linux packages, package managers, release integrations, timing diagnostics, Windows BCrypt, Windows SDK, experimental ACP1 | GitHub Actions + codecov |
| Mobile build scripts | iOS example dir; Android/iOS cross-build evidence (experimental) | `scripts/build-android`, `scripts/build-ios` |
| ABI check tooling | Manifest `abi_checks` (12 checks) | `scripts/abi-check.tcl` |

## Tools, apps, examples, test and QA assets

| Asset | Robotweax | Haivision 1.5.7 |
| --- | --- | --- |
| End-user streaming apps | `srt_udp_bridge` example (live MPEG-TS UDP ↔ SRT, multicast, rendezvous, stats, reconnect) | `srt-live-transmit`, `srt-file-transmit`, `srt-tunnel`, `srt-ffplay` wrapper |
| Developer test apps | `handshake_probe`, `crypto_soak`, `fec_chain_soak`, scalability and throughput peers | `srt-test-live`, `srt-test-file`, `srt-test-relay`, `srt-test-multiplex`, `srt-test-mpbond` |
| Examples | Message, File, Group demos, UDP bridge, installed-consumer, iOS; each with Python test drivers | `examples/` (C and C++ samples, off by default) |
| Unit / integration tests | \~85 C++ test sources in `tests/`, Python-driven; ctest default on | \~28 gtest sources in `test/`, `ENABLE_UNITTESTS` default off |
| Cross-implementation interop harness | `interop/` peers built against pinned Haivision 1.5.5 / 1.5.6 / 1.5.7 (API, binding, group, timing peers) | None (self-interop only) |
| Ecosystem qualification | Pinned GStreamer 1.28.7, VLC 3.0.24-rc1, OBS 32.2.2 (Linux/Windows/macOS), FFmpeg smoke; documented per-profile limits | Downstream projects integrate independently |
| Fuzzing | 7 libFuzzer targets (`ROBOTWEAX_SRT_BUILD_FUZZERS`) | None in tree |
| Microbenchmarks | codec, FEC, NAK work, send buffer, timer wake; A/B scripts for pacing, retransmission, capacity | None in tree |
| Release qualification records | `packaging/qualification-0.2.5 … 0.3.0.md`, performance/pacing/diagnostics JSON per release | Release notes only |
| Documentation | 70+ docs covering contracts, limits, integration guides, release process | `docs/API`, `docs/features`, `docs/dev`, `docs/build`, `docs/apps` |
| Formatting / DCO / pin checks | `clang_format.py`, `check_dco.py`, `check_action_pins.rb`, `verify_release_tag.py` | `CONTRIBUTING.md` |

## Robotweax-only extensions

None of these exist in Haivision 1.5.7. All are additive, leave the 1.5.7 wire format and ABI unchanged when unused, and most require both peers to be Robotweax.

| Extension | Maturity | Haivision-interoperable? |
| --- | --- | --- |
| `SRTT_CONTROL` reliable ordered command transport | Released (0.2.8) | No |
| `SRTT_SENSOR` FEC-only no-ARQ transport, authenticated samples | Released (0.2.8) | No |
| Session authentication v2 (KM + FEC parity HMAC) | Released (0.2.8), default off | No |
| AES-GCM extension profile incl. groups, FEC, File/Stream | Released (0.2.0), build opt-in | AES-128-GCM Live/Message only, vs AEAD-preview build |
| Mbed TLS 3.6 crypto provider | Released in 0.3.0 for supported Linux/macOS configurations | Yes (wire unchanged) |
| Windows BCrypt/CNG provider | Experimental | Yes (wire unchanged) |
| Runtime crypto backend / library version query | Released (0.2.4) | Local only |
| Group path labels with OFF/REQUIRED/IF\_OFFERED policy | Released (0.2.9) | Listener IF\_OFFERED admits plain peers |
| Standby RTT measurement on idle Backup members | Released (0.2.9), default off | Listener IF\_OFFERED admits plain peers |
| RTT provenance, Backup sender state, group path data snapshots | Released (0.2.9) | Local only |
| Group admission domain (`GROUPDOMAIN`, `PEERGROUP`) | Released (0.2.8) | Yes, but callback contract differs |
| Peer handshake metadata readback | Released in 0.3.0 | Local only |
| Closed-member unread-data retention in groups | Released | Local only |
| Native packet inspection / options C API (`<robotweax_srt.h>`) | Released | Local only |
| Caller stale-INDUCTION replay correction, non-sequential socket IDs, documented fork policy | Released | Yes |
| Implementation identity advertisement (`0x7f13` CONFIG) | Experimental, default off | Ignored by Haivision |
| ACP1 authenticated controls (session auth v3–v6) | Experimental, unreviewed, separate build gate | No |
| Sender drop trace + analyzer | Build opt-in | Local only |

## Known gaps vs Haivision and release status

What Haivision 1.5.7 offers that Robotweax main head does not:

| Gap | Impact |
| --- | --- |
| HSv4 positive establishment | Peers older than SRT 1.3.0 cannot connect; no automatic downgrade |
| Custom congestion control modules | Only LiveCC/FileCC; no third-party CC |
| Custom packet filter plugins (`SrtPacketFilterBase`) | Only built-in `fec` |
| FEC `cols` above 128 | Large geometries rejected (bounded by design) |
| Jumbo MSS (> 1500) | Rejected |
| Encryption compile-out, GnuTLS and Botan backends | Not available |
| IPv6 TOS on Windows, `IP_PKTINFO` | Not available / not documented |
| Haivision-style group callback admission (return 0) | Must set `SRTO_ROBOTWEAX_GROUPDOMAIN`; app migration needed |
| Broad platform list (FreeBSD, OpenBSD, Solaris, Cygwin, shipped Android/iOS) | Only Linux/macOS/Windows qualified; mobile experimental |
| Bundled streaming apps (`srt-live-transmit`, `srt-tunnel`, etc.) | Only the UDP bridge example |
| Complete behavioral parity for every CC, epoll, statistics, lifecycle corner | Explicitly not claimed; manifest marks 26 functions and 6 options partial |

Release status: v0.3.0 was published on 2026-10-14 at the source commit evaluated here. Separate signed OpenSSL and experimental BCrypt Windows SDK installers and SHA256SUMS are available on the release page. Mbed TLS 3.6.7+ is supported on Linux/macOS in the documented 3.6.x configurations. Comparative CPU/memory/throughput regression thresholds for 0.3.0 are not qualified (release-owner exception recorded). Open security items: KM rollback beyond the retired-key history (#112) and ACP1 cryptographic review (#190).

## Sources

The feature rows come from the two source trees as cloned on 2026-10-14. Release-status corrections were checked against the Robotweax v0.3.0 release and its assets.

- Robotweax SRT v0.3.0: [release and assets](https://github.com/Robotweax/srt/releases/tag/v0.3.0), [tag commit 4ae6330d](https://github.com/Robotweax/srt/commit/4ae6330d62f2b5030d96964bf3500283f32dd39c) — `README.md`, `compat/srt-1.5.7-api.json` (function/option/ABI status), `docs/api-compatibility.md`, `docs/compatibility.md`, `docs/limitations.md`, `docs/release-notes-0.3.0.md`, `docs/socket-options.md`, `docs/statistics.md`, `docs/crypto-backends.md`, `docs/windows-bcrypt.md`, `docs/control-profile.md`, `docs/mobile-building.md`, `CMakeLists.txt`, `include/srt/srt.h`, `include/robotweax_srt.h`, `packaging/`, `.github/workflows/`
- Haivision SRT v1.5.7: [commit 899348d8](https://github.com/Haivision/srt/commit/899348d8318eb9a3c5a5b6ec43c4a1114288773a) — `srtcore/srt.h` (73 `SRT_API` functions, 63 `SRTO_*` enumerators incl. `SRTO_E_SIZE`/`SRTO_DEPRECATED_END`), `CMakeLists.txt` (build options, `USE_ENCLIB`), `srtcore/fec.cpp` (16-bit `cols` limit), `srtcore/packetfilter_api.h`, `apps/`, `testing/`, `test/`, `docs/API/API-socket-options.md`, `LICENSE`
