open-standards/wai/examples
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science b4f33410cb watch-together test: the example as a person runs it first, then a held page, held to the room's log
Review of b01681570, the example's test. It had replaced the example's own run with the hold:
Ada's play always went through take-for-gone and re-entry, never the path a present viewer's
control takes. And it passed defects the old test failed: it let either page re-enter any
number of times uncounted (only Ada's `rejoins >= 1` was read, Ben's never), a `not_present`
refusal went nowhere, and "the room refused no page's event" held while the test had Ada's
events refused. Moving app.js's statements back after `begin()` passed (Ada was held either
way; a Ben slow past 4 s just re-entered), as did a page that stopped stating, or a room whose
silence limit shrank. And it checked the play against the instant Ada first signed it for, not
the one the room carried after re-signing moved it.

Now:

1. As before, both pages enter; Ada plays and Ben pauses, each while present; both apply each
   control at its instant within a quarter second of the room and pause at one position.
2. Ben's page is held until the room's log carries his `leave`; Ada seeks back to 2 s
   meanwhile; Ben's play is signed as the hold ends, before his page can enter again. The
   test reads the room's log until Ben's play is carried after his second `join`, takes the
   instant the room carried (at least that join's `t` plus the lead, and no earlier than first
   asked), and both pages must play from the seek at it within the bound, then pause at one
   position again when Ada pauses 3 s later.
3. The room's log, read once and every record verified (`roomTest.watchLog`): exactly one
   `leave`, Ben's, after his hold began; Ada joined once, Ben twice, the second after the
   `leave`; every slot wholly within each stretch of each page's presence holds a statement of
   it (co-watch §7.3), but Ben's hold; and each page's first statement comes before the instant
   it began to follow the log, which it does only once it has its relay session. That last is
   ordering, not timing: with the statements started after `begin()` it cannot hold.
4. Each page's own counts: Ada never taken for gone and never entering again, Ben taken for
   gone once (`stats.gone`), entering again once with his play signed again; no other event of
   either refused, and no page stopped.

A wait still ends at once when a page stops and says each page's counts.

Verified on the build host, the room client and the archive built as wai-examples.yml builds
them (load 62-73): watch-together through run-examples.sh passed 5 of 5, every check held.
Falsified, each built and run the same way: statements started after `begin()` again fails the
first-statement check; a page that stops stating once it has entered again fails the slot and
`leave` checks; a room silence limit of 400 ms fails the `leave` count and the pages' counts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 08:13:11 -05:00
..
android-app wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
apple-app wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
encoder-ingest wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
messaging wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
package-and-deliver wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
remote-desktop The service binaries are wai-relay, wai-room and wai-ingest; the crates keep their names 2026-10-27 04:52:31 -04:00
verify-receipts wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
video-room wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00
watch-together watch-together test: the example as a person runs it first, then a held page, held to the room's log 2026-11-04 08:13:11 -05:00
README.md wai/examples: every template Apache-2.0, its LICENSE carried into the project 2026-10-27 04:52:31 -04:00

WAI examples

Small projects that each do one thing with WAI, and each run on your own machine with the open reference software alone. Every one is a template of wai create:

wai create my-room --template video-room
cd my-room
wai dev
Template What it shows Runs with
video-room Your own page with a live room in it: camera, microphone, every object checked against its receipt wai dev, a browser
watch-together Everyone in a room watching one file in sync: play, pause and seek at one instant for all wai dev, a browser
messaging An end-to-end encrypted conversation, and a call placed, rung and answered wai dev, a browser
encoder-ingest An SRT encoder's stream published into a room, each group signed at the first hop and checked at the relay and the subscriber cargo
package-and-deliver A title packed by policy, its package verified, its standard floor played in a page wai-pack, wai dev, a browser
verify-receipts The receipts beside an object checked offline by the reference implementation (Rust) and by a second one (Python, standard library only) wai hello, cargo, python3
apple-app The native sink in a SwiftUI app, and a recorded playback session replayed through it Xcode, the wai-sink-swift package
android-app The native sink's Kotlin API, the one an Android app's player session calls a JDK 17, the wai-sink-android project
remote-desktop One machine's screen shared into a room, with control handed over and every input signed wai dev, wai-remote-host, a browser

Every example is Apache-2.0, and carries the license's text as LICENSE, which a project wai create makes from it receives with the rest.

Each example's test/ directory holds the check that it works; it is not part of the project wai create writes. bash ../quickstart/test/run-examples.sh portable|browser|apple|android runs them, as .github/workflows/wai-examples.yml does.