openrtc-tauri-plugin 3.0.1

First-party Tauri v2 plugin for the OpenRTC native runtime.
Documentation
# OpenRTC Tauri Plugin

First-party Tauri host integration for the native OpenRTC runtime.

```toml
[dependencies]
openrtc-tauri-plugin = "2.5.0"
```

The plugin owns native managed-session startup, auth relay, lifecycle events,
and host-reported transport capabilities. Product protocols, filesystem policy,
queues, and UI state remain application responsibilities. Optional transport
features mirror the core crate: `transport-lan`, `transport-webrtc`,
`transport-moq`, and `transport-ble`.

Rust 1.91 or newer is required. JavaScript consumers should pair this crate
with npm `openrtc@2.5.0`, Rust `openrtc@2.5.0`, and
`openrtc-tauri@2.5.0`.

## Custom Application Streams

WebView-only hosts that have no Rust product-protocol reader must construct
`OpenRtcTauriState::new(config).with_projected_stream_intake()` before installing
the plugin. This explicitly gives the plugin sole ownership of the admitted
application-stream queue. It starts once with the projection subscription,
preserves admission-classifier prefixes, checks current transport and admission,
and delegates bounded channel classification to the same handoff below.
Unowned channels close in this mode. Hosts with their own incoming reader must
leave this option disabled; the plugin never silently adds a competing reader.

A host consuming the Rust client's single `incoming_streams()` queue can offer
already-admitted, application-protected bidirectional streams through
`handoff_projected_peer_bi_stream`. Custom channel names are supported when
their channel envelope carries an `openrtcCapability` matching an active
native capability registration. Ticket capabilities must also match Rust's
admitted ticket scope; `share/*` retains its existing ticket-only ownership.

The handoff returns unowned streams, or streams without a projection subscriber,
to the host with consumed bytes restored. It neither grants admission nor
broadcasts unscoped binary data. Finishing the sending half keeps the receiving
half available for file-transfer acknowledgements.

## Native Custom Transports

The plugin exposes a compile-time Rust host extension point:
`TransportInstaller`, registered on `OpenRtcTauriState` with
`with_native_transport_installer(...)` before calling `init_with_state(...)`.
An installer may attach a host-owned transport before the shared Iroh endpoint
starts and keeps its runtime object alive for that client. It declares compiled
support only; `transports.ble` remains the application request and runtime
status remains the capability truth.

This is not a TypeScript extension API. The published `openrtc`,
`openrtc/runtime`, `openrtc/transport`, and `openrtc-tauri` packages do not
register arbitrary transport adapters. The reference BLE companion is
unpublished and distribution-gated. On 2026-07-22, the source-rebuilt Plutonium
host passed the operator-gated macOS/iPhone BLE lane: bilateral admission,
protected files in both directions, iPhone restart recovery, a 10-second
post-recovery settlement gate, and 61.4 seconds of unchanged BLE generations
with continued protected traffic. BLE remains an
experimental/private host integration until its packaging and licensing gates
are resolved; this evidence does not make it part of the public plugin binary.

When a host installs BLE, the plugin reports that compiled capability to the
runtime; configuration alone never advertises it. OpenRTC keeps the admitted
Iroh base route alive while attempting an atomic BLE replacement and retries a
transient failure at most three times for the current connection generation.
Consumer code must not add scanning, replacement, or retry timers.