Files
TeleportFling/README.md
T
petere 3084c438ee docs: add README with build, usage and network requirements
Document the two ports TeleportFling needs (TCP 9756 stream, UDP 9999
multicast discovery) and how to open them on NixOS and other firewalls,
based on the two-machine test.
2026-09-19 09:22:58 +01:00

3.0 KiB

TeleportFling

Standalone Linux screen + audio sender for the OBS Teleport protocol.

TeleportFling captures a Wayland screen (via xdg-desktop-portal + PipeWire) and the system's default audio, encodes the video to JPEG, packetizes both into the Teleport protocol, and streams them over TCP so any OBS instance with the obs-teleport plugin can discover and display the stream.

Features

  • Real screen + audio capture on Wayland (PipeWire / xdg-desktop-portal).
  • LAN discovery via UDP multicast, matching obs-teleport's AnnouncePayload.
  • Multiple receivers — every connected OBS streams from one sender.
  • Headless CLI (teleportfling) and desktop GUI + system tray (teleportfling-gui).
  • Config persistence at ~/.config/teleportfling/config.json, customisable with --config.
  • Daemon mode via a per-user systemd service (see contrib/).

Build & run

Requires a Nix dev shell (or Go 1.26+ with libjpeg-turbo and the Fyne/GLFW native deps for the GUI).

nix develop
go build ./cmd/teleportfling       # headless CLI
go build ./cmd/teleportfling-gui   # desktop GUI + tray

Run:

./teleportfling --name "Studio" --port 9756

Flags: --name, --port, --quality, --fps, --source screen|pattern, --audio, --no-announce, --stream-index, --duration, --config.

Network requirements

TeleportFling uses two kinds of traffic:

Port Proto Direction Purpose
9756 TCP Sender → listen Video + audio stream to receivers
9999 UDP Sender → listen multicast discovery (peerdiscovery)

For a sender to be discoverable and reachable by OBS receivers on another machine, both machines need these ports open:

NixOS

networking.firewall = {
  enable = true;
  allowedTCPPorts = [ 9756 ]; # TeleportFling screen/audio streaming
  allowedUDPPorts = [ 9999 ]; # TeleportFling multicast discovery
};

Apply with sudo nixos-rebuild switch --flake .#<hostname>. If the machines are on separate/isolation LANs, Tailscale works as an alternative transport (point OBS at the receiver's Tailscale IP:port), but the multicast discovery list will only show senders reachable via LAN multicast.

Other distros / firewalls

Open TCP 9756 inbound and UDP 9999 inbound on the sender machine; receivers just need outbound access (or the same rules if a firewall restricts it). mDNS (UDP 5353) is only needed for zero-config name resolution, not for TeleportFling itself.

Daemon mode

See contrib/README.mdcontrib/install-daemon.sh installs a per-user systemd unit that runs the headless CLI with its own config.

Development

  • go build ./... — build
  • go test ./... — tests
  • golangci-lint run ./... — lint
  • See AGENTS.md and project.md for workflow and milestone history.

License

GPL-2.0, matching the obs-teleport project whose protocol we implement.