Initial implementation of Wayland AirPlay desktop sharing

This commit is contained in:
Niklas Haiden
2026-09-09 22:04:30 +02:00
commit 7cda80d840
18 changed files with 11044 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
[package]
name = "spielab"
version = "0.1.0"
edition = "2024"
license = "GPL-2.0-only"
description = "A native Wayland AirPlay sender built with Rust and GPUI"
[features]
default = ["gui"]
gui = ["dep:gpui"]
[dependencies]
anyhow = "1"
async-channel = "2"
tokio = { version = "1", features = ["rt-multi-thread", "sync", "time", "net", "macros", "io-util", "process"] }
gpui = { version = "=0.2.2", default-features = false, features = ["wayland"], optional = true }
airplay-core = { git = "https://github.com/lmcgartland/airplay2-rs", rev = "a7f019fe6246ebd9701201a8a5c31e9a15243956" }
airplay-discovery = { git = "https://github.com/lmcgartland/airplay2-rs", rev = "a7f019fe6246ebd9701201a8a5c31e9a15243956" }
airplay-rtsp = { git = "https://github.com/lmcgartland/airplay2-rs", rev = "a7f019fe6246ebd9701201a8a5c31e9a15243956" }
ashpd = { version = "0.12.3", default-features = false, features = ["async-std"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
uuid = { version = "1", features = ["v4"] }
airplay-pairing = { git = "https://github.com/lmcgartland/airplay2-rs", rev = "a7f019fe6246ebd9701201a8a5c31e9a15243956" }
airplay-crypto = { git = "https://github.com/lmcgartland/airplay2-rs", rev = "a7f019fe6246ebd9701201a8a5c31e9a15243956" }
plist = "1"
hkdf = "0.12"
sha2 = "0.10"
chacha20poly1305 = "0.10"
rand = "0.8"
libc = "0.2"
[dev-dependencies]
symphonia-codec-alac = "0.5.5"
symphonia-core = "0.5.5"
tempfile = "3"
[profile.dev]
debug = 0
# The development runner is also used for live streaming. Keep per-frame
# packet parsing and encryption optimized without rebuilding all GPUI deps.
[profile.dev.package.spielab]
opt-level = 2
[profile.dev.package.chacha20poly1305]
opt-level = 3
[profile.dev.package.chacha20]
opt-level = 3
[profile.dev.package.poly1305]
opt-level = 3
[[bin]]
name = "spielab"
path = "src/main.rs"
required-features = ["gui"]