vnrit 0.2.21

Lightweight X11 desktop WebRTC streaming server (pure Rust, no GStreamer)
[package]
name = "vnrit"
version = "0.2.21"
edition = "2024"
description = "Lightweight X11 desktop WebRTC streaming server (pure Rust, no GStreamer)"
license = "Apache-2.0"  
repository = "https://github.com/nlsidf/vnrit.git"

[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1
strip = "symbols"

[profile.dev]
# Speed up debug builds: only optimize the hot path
opt-level = 1

[dependencies]
tokio = { version = "1", features = ["full"] }
tokio-util = "0.7"
axum = { version = "0.8.9", features = ["ws"] }
futures-util = "0.3"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
anyhow = "1"
clap = { version = "4", features = ["derive"] }
x11rb = { version = "0.13", features = ["xtest", "allow-unsafe-code", "shm", "xinput"] }
x11rb-protocol = "0.13"

# WebRTC pure Rust stack
webrtc = "0.20.0-rc.2"
rtc = "0.20.0-rc.2"
rtc-media = "0.20.0-rc.2"
# ICE network types for TCP-only mode
ice = { package = "rtc-ice", version = "0.20.0-rc.2" }

# async-trait for PeerConnectionEventHandler
async-trait = "0.1"

# Video encoding
openh264 = { version = "0.9", features = ["source"] }
openh264-sys2 = "0.9"

# shiguredo_libyuv — Rust bindings for Google's libyuv (SIMD-accelerated conversion + scaling)
# Fork: vnrit-libyuv (Android build fixes, Gitee mirrors for git clone)
vnrit-libyuv = { version = "0.1.4", features = ["source-build"] }

# Audio capture via PulseAudio
libpulse-binding = { version = "2.29", default-features = false }

# Opus audio encoding (forked for Android compatibility)
opus = { version = "0.3", package = "vnrit-opus" }

# Utilities for webrtc-rs
bytes = "1"
rand = "0.9"

# mmap for SHM shared memory
libc = "0.2"

# Lock-free memory pool for pipeline buffers
crossbeam-queue = "0.3"

# Data-parallelism for row-independent scaling passes
rayon = "1"

# SIMD vector types for inner-loop acceleration (i32x4, f32x4, etc.)
wide = "1"

# WebSocket compression (deflate, application-level)
flate2 = "1.0"

# Memory allocator
mimalloc = "0.1.52"
phf = { version = "0.11", features = ["macros"] }

# Image blur/sharpening (stack_blur, SIMD-accelerated, no image crate dependency)
libblur = { version = "0.24", default-features = false }

# Structured logging
log = "0.4"
env_logger = "0.11"

# Reliable local IP detection (enumeration, not DNS/connect trick)
if-addrs = "0.15"