43967cf3097f0f4a76d45b4f7682cc2ca691ef40
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.mdand rootDockerfilestill 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.mddocs/protocol_stack.md
License
MIT OR Apache-2.0
Languages
Rust
97.2%
Shell
1.9%
Dockerfile
0.9%