Skip to content

NimRTC v1.0.2

Choose a tag to compare

@github-actions github-actions released this 03 Nov 03:42
· 274 commits to main since this release

[1.0.2] - 2026-11-02

Status: Stable

Patch release fixing two defects in v1.0.1. v1.0.1 remains
published and its tag is unchanged; per RELEASING.md §2.3 a
post-announcement fix becomes a new patch version. Public API is
unchanged (NIMRTC_API_VERSION = 10002, NIMRTC_API_VERSION_PRE_RELEASE
= "").

Fixed

  • WebTransport ALPN mismatch (NimRTC ↔ NimRTC handshakes were
    rejected).
    The listener advertised the HTTP/3 token "h3"
    (RFC 9114 §3.1) while the session advertised the legacy draft
    token "sm", so every NimRTC-to-NimRTC WebTransport handshake was
    refused during ALPN negotiation (Chrome interop was unaffected —
    Chrome offers "h3"). Both sides now share one definition in
    src/web_transport/src/web_transport_msquic_alpn.hpp
    (session_alpn() / listener_alpn()), and
    src/web_transport/tests/test_web_transport_alpn.cpp pins the
    invariant so the two cannot drift apart again.
  • Windows release bundle contained the whole CI workspace
    (822 MB).
    release.yml packed the Windows bundle with
    7z a -ttar -so "$staging" | 7z a -txz -si "$bundle". With -so,
    7-Zip consumes the first positional argument as the archive name
    (discarded, because the archive goes to stdout) and, with no file
    list left, it packs the current working directory — so the
    published v1.0.1 Windows asset shipped the sources, .git and the
    complete MSVC build tree instead of the install staging tree
    (822,079,464 bytes against 2.3-2.9 MB for the other three
    platforms). The Windows job now uses
    tools/make_release_bundle.py, which packs exactly the staging
    tree with members relative to the staging root — the same layout as
    the tar -C ... . of the Linux/macOS jobs — and all four jobs now
    refuse to publish a bundle larger than 64 MB.
  • The signing public key is now shipped with the release. v1.0.1
    published detached .asc signatures while the signing key stayed
    private, so gpg --verify failed for every downstream consumer.
    The publish job now exports the public half of the signing key as
    the nimrtc-signing-key.asc release asset, pushes it to
    keyserver.ubuntu.com and keys.openpgp.org, and the release body
    carries the verification recipe together with the fingerprint
    (114154CFEC3F5EE5A8D2D313BEACFBB55871CC06).

Known issues

  • The v1.0.1 Windows asset stays broken. The published
    nimrtc-1.0.1-windows-x86_64-msvc.tar.xz is still the 822 MB
    archive that contains the CI workspace rather than the install
    tree; v1.0.1 is immutable now, so the usable Windows artefact is
    the one in this release.
  • The bundles do not contain NimRTC's own headers, static library,
    or NimRTCConfig.cmake.
    Each platform bundle currently ships
    only the vendored third-party dependency stack (wolfSSL /
    libsrtp3 / libjuice / msquic headers and libraries); no module in
    src/modules/ declares an install() rule, and no CMake package
    config is generated, so find_package(NimRTC) does not resolve
    against a downloaded bundle and linking NimRTC itself still requires
    a source build. This predates v1.0.1 (its Linux bundle has the
    same shape). Adding per-module install() rules plus a generated
    NimRTCConfig.cmake / NimRTCConfigVersion.cmake is tracked for
    v1.1.0 (Track D in docs/plan/v1.1-plan.md); README.md "Download prebuilt" has been corrected to
    describe what the bundles actually contain.
  • The bundles carry no WebRTC APM archives, so no bundle provides a
    usable 3A.
    The four v1.0.2 tarballs contain no
    lib/webrtc_apm/ directory at all (verified 2026-11-05 against the
    published nimrtc-1.0.2-{windows-x86_64-msvc,linux-x86_64-gcc}.tar.xz
    assets): they ship the vendored third-party stack only. The APM
    archives are installed by cmake/NimRTCInstall.cmake (Track D), which
    landed after the v1.0.2 cut, so the v1.0.2 bundles predate it.

Notes

  • Public API is unchanged vs v1.0.1; NIMRTC_API_VERSION = 10002,
    NIMRTC_API_VERSION_PRE_RELEASE = "".
  • The 3A status table in this release's body was wrong, and so was
    the reason it gave for the windows line.
    The table is generated
    from the per-platform build-time APM mode
    (build/3a-status-<platform>.txt, which records whether the WebRTC
    APM prebuild succeeded), not from what the published bundle carries.
    The "WebRTC APM (real 3A) bundled" lines for linux/macOS therefore
    described the build, not the artefact: none of the four bundles ships
    the APM archives (see the known issue above). The windows line
    blamed a failed prebuild, but the Prebuild WebRTC APM step
    succeeded in the final v1.0.2 release run (release / build / windows → Prebuild WebRTC APM → success); the persistent Windows
    stub-3A outcome through v1.0.2 came from defects in
    tools/build_webrtc_apm.cmd — LF-only line endings that cmd.exe
    mis-parses, a powershell -Command wrapper that turned ninja's
    stderr progress line into a terminating error, and a ninja invocation
    without call — all fixed in 9c3c522, i.e. before this cut. The
    generator now lists the published tarball and reports the build mode
    and the shipped content separately, so "real 3A bundled" is only
    claimed when lib/webrtc_apm/ is actually present in the artefact.

Verifying the signature

The public half of the signing key ships with this
release as nimrtc-signing-key.asc. To verify a bundle:

gpg --import nimrtc-signing-key.asc
gpg --verify nimrtc-<version>-<platform>.tar.xz.asc nimrtc-<version>-<platform>.tar.xz

The signing key fingerprint is 114154CFEC3F5EE5A8D2D313BEACFBB55871CC06.
Check it against the fingerprint shown by gpg --fingerprint
after importing — do not trust the key file blindly.


3A (AEC/ANS/AGC) status per platform

  • linux-aarch64 — the build used the real WebRTC APM, but this bundle ships no APM archives (lib/webrtc_apm/ is absent), so it provides no usable 3A
  • linux-x86_64 — the build used the real WebRTC APM, but this bundle ships no APM archives (lib/webrtc_apm/ is absent), so it provides no usable 3A
  • macos-arm64 — the build used the real WebRTC APM, but this bundle ships no APM archives (lib/webrtc_apm/ is absent), so it provides no usable 3A
  • windows — the build used the real WebRTC APM, but this bundle ships no APM archives (lib/webrtc_apm/ is absent), so it provides no usable 3A

The WebRTC APM is prebuilt out-of-tree with meson. Where
that prebuild fails, the build falls back to NimRTC's
built-in stub 3A path instead of aborting the release.
The status above is checked against the published bundle:
a platform counts as "real 3A bundled" only when
lib/webrtc_apm/ is actually present in the tarball.