No description
Find a file
Breadway 8c745d18e0
Some checks failed
dev release / build (push) Failing after 12s
Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration
Builds out the full v1 scope: a vendored+patched openscreen subset for
low-latency Cast Streaming (Mirroring receiver 0F5096E8) alongside the
existing Cast V2/HLS and new DLNA/AVTransport casting paths, breadcastd's
Idle/Casting state machine with a private IPC socket, the breadcast GTK4
popup as a thin IPC client, and bread.cast.*/bread.command.cast.* breadd
integration (device discovery, start/stop, mirroring lifecycle events).
Also adds bakery/systemd/Forgejo CI packaging.

Validated end-to-end against a real Chromecast/Google TV: negotiated
Cast Streaming session, live pipeline playback, and daemon+GUI click-to-cast/
stop through the actual popup.
2026-08-03 09:07:21 +08:00
.forgejo/workflows Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
breadcast Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
breadcast-caststream-sys Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
breadcast-core Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
breadcastd Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
contrib Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
vendor/rust_cast-0.21.0 Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
.gitignore Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
bakery.toml Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
Cargo.lock Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
Cargo.toml Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
CONTRIBUTING.md Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
EVENTS.md Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
LICENSE Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
README.md Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00

breadcast

Cast your screen to any Chromecast/Google TV, for Hyprland. It consists of two binaries:

  • breadcastd — a background daemon that discovers Cast devices on the LAN and (once built — see Status) owns the screen-capture/encode/serve pipeline and the live Cast V2 session.
  • breadcast — a GTK4 Layer Shell popup for picking a device and starting/stopping a cast.

Status

This is early: device discovery (mDNS) and the Cast V2 sender (real device control — connect, launch the receiver, load media) are built and validated against real Chromecast/Google TV hardware. The actual screen-mirroring pipeline (portal-based screen capture → GPU-accelerated encode → HLS → local HTTP server) and the GTK4 device-picker UI are not built yet. breadcastd today only does discovery and optional breadd event publishing; breadcast is a stub binary. See CLAUDE.md's Status section for more detail.

Requirements

  • Rust toolchain (edition 2021)
  • GTK 4.12+ and gtk4-layer-shell (once the UI lands)
  • GStreamer + gst-plugin-pipewire, gst-plugins-bad (VA-API va plugin), gst-plugin-hlssink3 (once the capture pipeline lands)
  • Hyprland (or any Wayland compositor with Layer Shell and the xdg-desktop-portal ScreenCast interface)

Build

git clone https://git.breadway.dev/breadway/breadcast
cd breadcast
cargo build --release

The compiled binaries are at target/release/breadcast and target/release/breadcastd.

Try device discovery today

cargo run -p breadcast-core --example discover

Prints Chromecast/Google TV devices as they appear/disappear on the LAN.

Install

Copy the binaries to somewhere on your $PATH, e.g.:

cp target/release/breadcast target/release/breadcastd ~/.local/bin/

systemd user service

A unit file is provided in contrib/:

cp contrib/breadcastd.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now breadcastd

Hyprland keybind

For stock Hyprland, add the contents of contrib/hyprland.conf to your hyprland.conf:

layerrule = blur, breadcast
layerrule = ignorezero, breadcast

bind = $mainMod, C, exec, breadcast

On BOS, Hyprland config is Lua+JSON-driven instead — see contrib/binds.json for the equivalent keybind entry to merge into your binds.json by hand (there's no per-app self-registration mechanism yet). There is currently no BOS-native equivalent for the layerrule blur lines.

bread event integration

breadcastd optionally publishes into the shared bread automation fabric (bread.cast.*) when breadd is running, and works identically without it. See EVENTS.md for the full, honest-about-scope contract — most of the eventually-planned events (mirroring start/stop) aren't implemented yet, since the mirroring pipeline itself isn't built yet.

Theming

breadcast will inherit its colour palette from bread-theme, matching the rest of the ecosystem, once its GTK4 UI is built.