No description
Find a file
Breadway 3d27ddf677
All checks were successful
check / check (push) Successful in 3m27s
ci: build on bread-ecosystem's shared Arch container
Route dev/beta/release build steps through ci/build.sh, pinned to
bread-ecosystem@147cfbb, instead of installing toolchain/libraries
directly on the bare runner. Adds ci/deps.txt for the build-time-only
packages breadcast needs beyond the shared image's base set (jsoncpp
and libcrypto for breadcast-caststream-sys's build.rs; gstreamer and
gst-plugins-base-libs for the gstreamer-app/-video sys crates) --
deliberately excludes bakery.toml's runtime-only plugin deps
(pipewire/bad/hlssink3/va), which are loaded dynamically by name and
never linked at compile time. Also adds check.yml to run clippy/test
on feature/fix branches ahead of a release build, matching breadpad's
already-migrated pattern.
2026-08-05 19:16:28 +08:00
.forgejo/workflows ci: build on bread-ecosystem's shared Arch container 2026-08-05 19:16:28 +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
ci ci: build on bread-ecosystem's shared Arch container 2026-08-05 19:16:28 +08:00
contrib Implement Cast Streaming mirroring, DLNA casting, daemon+GUI, and breadd integration 2026-08-03 09:07:21 +08:00
graphify-out can't be bothered writing a commit message 2026-08-03 09:17:59 +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.