Repository navigation
Renderd v0.8.0-viewer
Pre-releaseAll 8 milestones complete. Pre-release hardening and end-to-end integration in progress.
Note:renderd-hostandrenderd-viewerinitialize their respective subsystems and run
loops successfully. End-to-end streaming between host and viewer is not yet integrated
— the components are implemented individually and tested in isolation. Full pipeline
integration is planned for v1.0.
Milestone 8 complete: Viewer Application (
renderd-viewer).
- Scaffolded
renderd-viewerapplication with nativewinitevent loop, borderless
fullscreen window management, and Per-Monitor v2 DPI awareness on Windows. (#89) - Implemented DXGI Allow-Tearing feature check (
check_tearing_support()) for safe swap
chain creation. (#90) - Implemented D3D12 swap chain and renderer with YUV-to-RGB HLSL pixel shader and
conditionalDXGI_PRESENT_ALLOW_TEARINGpresentation. (#91) - Implemented
ID3D12VideoDecoderhardware H.265/H.264 video decoder integration with
GPU VRAM surface output. (#92) - Implemented QUIC datagram receiver and sliding-window
ReassemblyWindowtask forwarding
completed frames to the decoder. (#93) - Implemented DWM vsync phase reporter querying
DwmGetCompositionTimingInfoand
transmittingVsyncReportover QUIC Stream 0. (#94) - Implemented dual-timescale ABR feedback exporter:
ReactiveStatsat 100 ms,
PeriodicStatsat 500 ms, and immediateKeyframeRequeston loss. (#95) - Implemented viewer pairing UI with SPAKE2+ prover handshake over QUIC Stream 0,
storing derivedPairTokenin Windows Credential Manager on success. (#96) - Implemented reconnect watchdog with mDNS re-discovery filtering by stored
host_uuid
for automatic recovery on host IP change. (#97) - Implemented semi-transparent
Reconnecting...status UI overlay during disconnect
state without closing window. (#98) - Implemented Windows system tray icon via
Shell_NotifyIconwith context menu:
"Connect to Host...", "Settings", "Disconnect", "Exit". (#99) - Added Windows viewer release packaging CI workflow on
windows-2025runner
(release-viewer.yml) producing standalone installer artifact. (#100) - Wired
HostApp::run()with full subsystem initialization (capture, encode, clock,
ABR, session, network, UI) and persistent SIGINT/SIGTERM signal handler loop
replacing placeholder print-and-exit entrypoint. (#101)
Milestone 7 complete: Host Application (
renderd-host).
- Scaffolded
renderd-hostapplication crate withInfo.plist, entitlements, and macOS
app bundle layout. (#76) - Added macOS app bundle packaging script (
tools/bundle-host/assemble.sh). (#77) - Implemented app startup, CLI argument parsing, Figment config loading, and structured
panic hook viatracing-subscriber. (#78) - Implemented macOS login item auto-start using
SMAppService.mainAppwith enable,
disable, and status query. (#79) - Implemented
HostSessionstate machine (IDLE → PAIRING → CONNECTED → STREAMING)
with typedSessionErrortransitions. (#80) - Implemented pairing handler with 6-digit PIN generation, SPAKE2+ verifier protocol,
exponential failure lockout, and keychain storage. (#81) - Implemented
DeviceRegistryfor paired viewer listing and keychain revocation. (#82) - Implemented
CapturePipelineandEncodePipelinewiring ScreenCaptureKit frames
directly to VideoToolbox encoder via lock-free SPSC ring buffer. (#83) - Implemented datagram burst sender task fragmenting NAL units and sending non-yielding
QUIC datagram bursts per frame. (#84) - Connected
ClockControllerandAbrManagerto host control loop processing
VsyncReport,ReactiveStats, andPeriodicStatsmessages. (#85) - Implemented macOS menu bar UI with status icon, pairing PIN display, paired device
list, and quit action viaMenuBar. (#86) - Implemented
NotificationManagerposting macOS user notifications on session start
and device pairing events. (#87) - Added host release packaging CI workflow (
release-host.yml) with code signing,
notarization, stapling, and DMG artifact creation. (#88)
Milestone 6 complete: Algorithm Layer (ABR & Clock Sync).
- Scaffolded
renderd-abrcrate with pureRampPolicystep-up/step-down bitrate math
clamped to [5 Mbps, 50 Mbps]. (#64) - Implemented
BandwidthEstimatorexponential moving average filter for receive bandwidth
samples. (#65) - Implemented
AbrEnginedual-timescale state machine: reactive (100 ms, loss-triggered)
and proactive (500 ms, bandwidth-degradation) bitrate adjustment. (#66) - Added
proptestproperty tests assertingAbrEnginebitrate decisions remain in
configured bounds for arbitrary inputs. (#67) - Added Criterion benchmark for
on_reactiveandon_proactiveABR decision calls. (#68) - Scaffolded
renderd-clockcrate withClockOffset::compute()for host/viewer clock
domain translation using QUIC RTT. (#69) - Implemented
JitterFiltermedian-window outlier rejection for vsync phase reports. (#70) - Implemented
ClockSyncstate machine with 30-frame warmup, phase tracking, and
capture pacing output. (#71) - Added
proptestproperty tests asserting pacing interval is bounded in [8 ms, 33 ms]. (#72) - Added Criterion benchmark for
on_vsync_reportandnext_capture_time. (#73) - Created
tools/latency-benchCLI skeleton with--frames,--resolution, and
--codecflag support. (#74) - Implemented pipeline microsecond stage telemetry with p50/p95/p99/max latency
reporting across all pipeline stages. (#75)
Milestone 5 complete: Service Layer (Net, Keychain & Discovery).
- Implemented
ServerTlsConfigandClientTlsConfigwith strict mutual TLS 1.3 and
pinned certificate verification inrenderd-net. (#48) - Implemented
QuicServerand QUIC connection listener inrenderd-net. (#49) - Implemented
QuicClientwith QUIC connection initiation and TLS handshake in
renderd-net. (#50) - Implemented 4-byte length-prefixed control stream framing (
send_control/
recv_control) inrenderd-net. (#51) - Implemented non-yielding
FragmentBurst::send_all()datagram burst sender in
renderd-net. (#52) - Implemented RTT telemetry exporter via
quinn::ConnectionStatsinrenderd-net. (#53) - Scaffolded
renderd-keychaincrate withKeychainStoretrait andPairingEntry
struct. (#54) - Implemented macOS Keychain Services backend (
MacosKeychain) using
kSecClassGenericPassword. (#55) - Implemented Windows Credential Manager backend (
WindowsCredentialManager) using
CredWrite/CredRead/CredDelete. (#56) - Implemented
MockKeychainin-memory store for headless testing. (#57) - Scaffolded
renderd-discoverycrate withAdvertiserandBrowsertraits and
ServiceRecordstruct. (#58) - Implemented macOS Bonjour discovery backend using
dns_sd.hbindings. (#59) - Implemented Windows Win32 mDNS backend using
DnsServiceRegister/DnsServiceBrowse. (#60) - Implemented
ManualBrowserstatic IP fallback for corporate network environments. (#61) - Implemented
DiscoveryErrorhierarchy (BindFailed,ServiceRegistrationFailed,
BrowseFailed). (#62) - Implemented
MockConnectionin-memory transport for integration testing. (#63)
Milestone 4 complete: FFI Layer (VideoToolbox & ScreenCaptureKit shims).
- Scaffolded
renderd-vt-syscrate withbuild.rslinking VideoToolbox, CoreMedia, and
CoreFoundation frameworks. (#36) - Implemented
renderd_VTCompressionSessionCreateC bridge shim for Rust FFI callback
compatibility. (#37) - Implemented
CompressionSessionsafe Rust wrapper with H.265 real-time hardware encoder
initialization andDropcleanup. (#38) - Implemented dynamic bitrate control (
set_bitrate) and force-keyframe trigger in
CompressionSession. (#39) - Implemented
IOSurfaceRust wrapper withCFRetain/CFReleaselifetime management. (#40) - Implemented
VtErrorOSStatus decoder with human-readable error messages. (#41) - Scaffolded
renderd-sc-syscrate with ObjC2 ScreenCaptureKit framework imports. (#42) - Implemented
ScreenRecordingPermission::check()TCC authorization query. (#43) - Implemented
ContentFilter::main_display()display enumeration and selection. (#44) - Implemented
ScreenStreamwrapper with GPU-resident frame callback on
QOS_CLASS_USER_INTERACTIVEGCD queue. (#45) - Implemented dynamic
minimumFrameIntervalvsync pacing controls onScreenStream. (#46) - Implemented
ScErrorhierarchy (PermissionDenied,NoDisplaysFound,
StreamFailed). (#47)
Milestone 3 complete: Primitive Layer (Frame & Crypto).
- Added 16-byte fixed binary fragment header codec (
FragmentHeader) inrenderd-frame
crate per RFC-0002 §12.1. (#23) - Added type-safe fragment header bitfield flags (
FragmentFlags) inrenderd-frame
crate. (#24) - Added
FragmentandCompleteFrametypes inrenderd-framecrate. (#25) - Added sliding-window fragment reassembly buffer state machine (
ReassemblyWindow) in
renderd-framecrate per RFC-0002 §12.2. (#26) - Added dynamic fragment deadline computer (
DeadlineComputer) inrenderd-frame. (#27) - Added
proptestproperty tests for reassembly window safety under arbitrary reordering. (#28) - Added Criterion benchmark for reassembly window throughput. (#29)
- Scaffolded
renderd-cryptocrate withPairTokenandSessionKeytypes with
Zeroizeon drop. (#30) - Added RFC 9382 SPAKE2+ test vectors as unit test suite. (#31)
- Implemented SPAKE2+
ProverandVerifierstate machines for P-256 pairing. (#32) - Implemented HKDF-SHA256 key derivation helpers (
derive_pair_token,
derive_session_key) with canonical info strings. (#33) - Implemented TLS certificate generator (
generate_cert) usingrcgenwith pair token
derived key material. (#34) - Added Criterion benchmarks for crypto operations (
derive_pair_token,
generate_cert). (#35)
Milestone 2 complete: Foundation Layer.
- Added Protobuf protocol schema definition in
proto/renderd.protoper RFC-0002 §11.
(#13) - Added
tools/proto-gencode generator and generatedprostRust types in
renderd-protocrate. (#14) - Added protocol domain newtypes (
FrameId,FragmentId,BitrateKbps,
VsyncPeriodNs,ViewerId,HostId) inrenderd-protocrate. (#15) - Added envelope dispatch helpers (
MessageKind) and message validation logic for
SessionHelloandSessionConfiginrenderd-protocrate. (#16) - Enabled proto freshness CI check step in
.github/workflows/ci.yml. (#17) - Added configuration schema structs (
RenderdConfig,HostConfig,ViewerConfig,
NetworkConfig,CryptoConfig,AbrConfig) inrenderd-configcrate. (#18) - Added Figment-based layered config loader (
ConfigBuilder) supporting defaults, TOML
files, environment variables, and CLI overrides inrenderd-configcrate. (#19) - Added configuration validation rules (
ValidateConfigtrait) forRenderdConfigin
renderd-configcrate. (#20) - Added
ConfigErrorenum hierarchy (FileNotFound,ParseError,ValidationError)
andDisplayimplementations inrenderd-configcrate. (#21) - Added canonical host and viewer default configuration templates
(renderd-host.default.toml,renderd-viewer.default.toml) and template validation
integration tests. (#22)
Milestone 1 complete: Repository Bootstrap & Infrastructure.
- Initialized Cargo workspace root with resolver v2 and declared all 15 member crates
across 5 DAG layers (crates/renderd-*,tools/latency-bench,tools/proto-gen)
per REPO-0001. (#1) - Added
rust-toolchain.tomlpinning Rust stable channel (MSRV 1.80) with
aarch64-apple-darwin,x86_64-pc-windows-msvc, andaarch64-pc-windows-msvc
target support. (#1) - Configured workspace-level dependency versions, lint policies, and build profiles
(dev,release,bench). (#1) - Configured workspace-level
clippy.tomlsettingmsrv = \"1.80\", disallowing
std::process::exitandstd::env::var, and restricting raw array pair-tokens.
(#2) - Added per-crate lint overrides:
unsafe_code = \"deny\"for non-FFI crates;
unsafe_code = \"warn\"for FFI crates (renderd-vt-sys,renderd-sc-sys) per
REPO-0001 §9. (#2) - Added root
.rustfmt.tomlworkspace formatting configuration per REPO-0001 §10.
(#3) - Configured
cargo-denypolicy indeny.tomlfor license checking, dependency bans,
and security advisory checking per REPO-0001 §9. (#4) - Added test runner configuration in
nextest.tomlper REPO-0001 §14.7. (#5) - Added primary CI workflow in
.github/workflows/ci.ymlper REPO-0001 §18.1. (#6) - Added security audit workflow in
.github/workflows/security.ymlper
REPO-0001 §18.2. (#7) - Added nightly benchmark workflow in
.github/workflows/bench.ymlper
REPO-0001 §18.3. (#8) - Added code ownership rules in
.github/CODEOWNERSper REPO-0001 §7.1. (#9) - Added PR template and GitHub Issue forms for bug reports, latency regressions, and
feature requests. (#10) - Added spell-checking configuration in
_typos.tomland
.github/workflows/typos.yml. (#11) - Added documentation deployment workflow in
.github/workflows/docs.ymlper
REPO-0001 §18.5. (#12)