Files

3.2 KiB

ReTeamSpeak

Desktop TeamSpeak 3 client built with iced and tsclientlib for Windows, Linux, and macOS.

Current Direction

  • UI: iced
  • TeamSpeak protocol + state sync: tsclientlib
  • Protocol declarations reference: refercence/tsdeclarations/
  • Old in-tree protocol/audio/database/Tauri implementation has been removed

Current User-Facing Features

  • Connect to a TeamSpeak server by address and port
  • Use a nickname and optional server password
  • Browse channels and join a channel
  • Receive live server/channel/client state updates
  • Send and receive channel chat messages
  • Mute microphone state and sync it to TeamSpeak
  • Mute speaker/output state and sync it to TeamSpeak
  • Toggle headset/output hardware state and sync it to TeamSpeak
  • Toggle AFK state and sync it to TeamSpeak
  • Import TeamSpeak identity from an exported identity string or file
  • Select input and output audio devices
  • Push-to-talk and continuous voice modes
  • Noise cancellation selection in settings
  • Local per-user mute and volume controls in the channel tree
  • Persistent bookmarks, favorites, recents, and settings

Current Gaps

  • Remote audio playback still needs runtime validation against a real TeamSpeak server
  • The legacy src/README.md and root Dockerfile still need to be reconciled with the current app layout

Build

Workspace root for cargo commands: src/

Default build

cd src
cargo check -p re-teamspeak

Audio Build

Host builds need system audio libraries and a Rust toolchain new enough for sonora. On Linux that generally means cmake, pkg-config, libasound2-dev, and libopus-dev.

Direct host build:

cd src
cargo check -p re-teamspeak

Repeatable Podman build:

./scripts/check-audio-podman.sh

Run the app in Podman

From a desktop shell with WAYLAND_DISPLAY or DISPLAY set:

./scripts/run-audio-podman.sh

The runtime wrapper will try to pass through:

  • /dev/snd
  • /dev/dri
  • PulseAudio socket
  • PipeWire socket
  • user D-Bus socket
  • Wayland socket or X11 socket

If you want to validate the container wiring without launching the GUI app, pass a custom command:

./scripts/run-audio-podman.sh -- /usr/bin/env

Override image or features when needed:

RETEAMSPEAK_AUDIO_IMAGE=docker.io/library/rust:1.91-bookworm \
./scripts/check-audio-podman.sh

Equivalent raw Podman command:

podman run --rm -v "$(pwd):/workspace:Z" -w /workspace/src \
  docker.io/library/rust:1.91-bookworm bash -lc '
    apt-get update >/dev/null &&
    apt-get install -y --no-install-recommends pkg-config libasound2-dev libopus-dev >/dev/null &&
    /usr/local/cargo/bin/cargo check -p re-teamspeak
  '

Repository Layout

src/
├── Cargo.toml
└── iced-app/
    ├── Cargo.toml
    └── src/
        ├── main.rs
        ├── audio.rs
        ├── identity.rs
        ├── icons.rs
        ├── noise_cancel.rs
        ├── persistence.rs
        ├── theme.rs
        ├── types.rs
        └── view.rs

Reference Material

  • refercence/tsclientlib/
  • refercence/tsdeclarations/
  • docs/protocol.md
  • docs/protocol_stack.md

License

MIT OR Apache-2.0