TeaSpeak Offline Reference Document
Compiled from GitHub repositories (TeaSpeak, TeaWeb, TeaMusic) and archived website (teaspeak.de).
Last updated: June 2026
Table of Contents
- Project Overview
- Architecture
- Feature Comparison
- Complete Feature List
- Protocol Implementation Details
- Audio/Codec Support
- Channel Types and Properties
- Permissions System
- Server Configuration
- Music Bot System
- Chat System
- Token System
- ServerQuery Notify System
- Ban System
- Web Client Architecture
- Music Bot Architecture (TeaMusic)
- Server Binary Distribution
- License Information
- Known Issues and Limitations
- Properties Reference
- Feature Support Commands
Project Overview
TeaSpeak is a free-to-use, community-driven VoIP (Voice over IP) communication platform consisting of a server and multiple client implementations. It is designed as an alternative to TeamSpeak with enhanced features, no license fees, and open-source components.
Components
| Component |
Repository |
Language |
Description |
| TeaSpeak Server |
TeaSpeak/TeaSpeak |
C++ (proprietary binary) |
The server daemon (issue tracker + docs in repo) |
| TeaWeb |
TeaSpeak/TeaWeb |
TypeScript (84.1%), SCSS, HTML |
Web client (open source, MPL-2.0) |
| TeaMusic |
TeaSpeak/TeaMusic |
C++ (99.3%), CMake |
Music bot provider plugins (open source) |
| TeaClient |
Not open source |
Native |
Desktop client for Windows/Linux |
Key Design Principles
- Free to use (no license fees)
- Community-driven development
- Self-hostable server
- Web client (installation-less)
- Built-in music bots
- Hidden/invisible channel system
- Extended ServerQuery interface
- Compatible with TeamSpeak 3 protocol
Architecture
Server Architecture
The TeaSpeak server is a single binary (TeaSpeakServer) written in C++ that handles:
- Voice connections via UDP (native TeamSpeak protocol) and WebRTC (for web clients)
- ServerQuery via TCP telnet-like interface (default port 10101)
- File transfer via HTTP/HTTPS (default port 30303)
- Web client hosting via built-in web server
- Music bot management with provider plugin system
- Database using SQLite (default) or MySQL
- Instance management supporting multiple virtual servers
Network Architecture
Threading Model (1.5.4+)
As of version 1.5.4, the server merges the web, query, and voice client network event loops into fewer threads, reducing resource usage.
Feature Comparison
From the archived teaspeak.de website:
| Feature |
TeaSpeak |
TeamSpeak |
Discord |
Skype |
| Community and non-commercial driven |
✅ |
❌ |
❌ |
❌ |
| Spam/Ad free |
✅ |
✅ |
❌ |
❌ |
| Web Client / Installation-less Client |
✅ |
❌ |
✅ |
❌ |
| Host your own private server |
✅ |
✅ |
❌ |
❌ |
| High quality video and screen sharing |
✅ |
✅ |
✅ |
✅ |
| Built in music bots |
✅ |
❌ |
❌ |
❌ |
| Ability to hide channels |
✅ |
❌ |
❌ |
❌ |
| Cross and permanent channel chat |
✅ |
❌ |
✅ |
✅ |
| Built in unlimited file transfer |
✅ |
✅ |
❌ |
✅ |
| High quality OPUS voice transmission |
✅ |
✅ |
✅ |
✅ |
| Offline / LAN functionality |
✅ |
✅ |
❌ |
❌ |
| Advanced permissions system |
✅ |
✅ |
✅ |
❌ |
| Easy to use chat box with markdown support |
✅ |
❌ |
✅ |
✅ |
| Open Source |
Partial |
❌ |
❌ |
❌ |
| Direct Messaging |
✅ |
✅ |
✅ |
✅ |
Complete Feature List
Server Features (Unique to TeaSpeak)
- Built-in Music Bots - High-quality, low bandwidth music bots with playlist management
- Invisible/Hidden Channels - Channels hidden based on
i_channel_view_power
- Customizable Messages - Customize server stop messages, default descriptions, version display, license type, query MOTD, country flags
- Built-in Console - Stdout commands:
end|shutdown, chat, permgrant, passwd
- VPN Detection -
b_client_ignore_vpn permission to bypass
- Scheduled Shutdowns -
serverprocessstop type=schedule time=60 msg=
- Increased Slot Count - Up to 1024 slots per virtual server (unlimited virtual servers)
- Per-Server Binding - Individual binding options per virtual server
- Global Ban System - Instance-wide bans with
sid=0
- Ban Enforcement List - Log of all ban enforcements (
bantriggerlist)
- Ban Editing - Direct ban editing (not delete+recreate)
- HWID Bans - Ban by hardware ID
- Encrypted Query - SSL/TLS encrypted ServerQuery connections
- Extended ServerQuery Notifies - Almost all events available to query clients
- Global Group Assignment - Instance-wide group assignment via
use 0
- Channel Chat Conversations - Persistent cross-channel chat
- SNI Certificate Support - Different certificates for different server names
- WebRTC for Web Clients - Native WebRTC voice bridge
- Video Broadcasting - Camera and screen sharing via WebRTC
- Automatic Permission Updates - New permissions auto-applied via
i_group_auto_update_type
- Channel Creation Limits - Per-client limits on temporary/semi/permanent channels
- Customizable Token System - Configurable token values and actions
- Multiple IP Bindings - IPv4 and IPv6 multi-binding support
- Compressed Snapshots - Server snapshot compression
- IP Range Whitelists/Blacklists - For query and file transfer
TeamSpeak Compatibility
TeaSpeak implements the TeamSpeak 3 Server Query protocol and voice protocol, making it compatible with:
- TeamSpeak 3 clients (native voice)
- YaTQA (query administration)
- SinusBot (music bot)
- Other TS3-compatible tools
Protocol Implementation Details
Voice Protocol
- Transport: UDP for native clients, WebRTC for web clients
- Codec: OPUS only (all non-OPUS codecs dropped in 1.5.0)
- Speex 8/16/32kbps: Removed
- CELT-Mono 48kbps: Removed
- OPUS Voice: Default
- OPUS Music: Available
- Encryption: Configurable per channel (
channel_codec_is_unencrypted) and server-wide (virtualserver_codec_encryption_mode)
- Video Codecs: VP8 (default, better with packet loss), H264 available
- Packet handling: Control commands separated from voice/keepalive (1.4.7+) for reliability
- RTO: 200ms (matching Linux kernel TCP/IP RFC 6298)
- WebRTC: Uses libnice for ICE/STUN, thread pool for bridges (not per-client threads)
ServerQuery Protocol
- Transport: TCP (plain text) or TLS/SSL encrypted
- Default port: 10101
- Newline:
\n (changed from \n\r in 1.4.14-beta6)
- Max command length: Configurable via
config.yml
- Flood protection: Configurable commands/time/ban_time
- Authentication: Server admin password, token-based, or name-based
File Transfer Protocol
- Transport: HTTP/HTTPS
- Default port: 30303
- Commands:
ftcreatedir, ftgetfilelist, ftgetfileinfo, ftdeletefile, ftinitupload, ftinitdownload, ftrenamefile, ftlist, ftstop
- Bulk support:
ftdeletefile and ftgetfileinfo support bulks
- Bandwidth limits: Per-transfer and server-wide configurable
Audio/Codec Support
Voice Codecs (Server 1.5.0+)
| Codec |
Status |
Notes |
| OPUS Voice |
✅ Default |
Primary codec |
| OPUS Music |
✅ Supported |
Higher quality for music |
| Speex 8/16/32kbps |
❌ Removed |
Permissions removed |
| CELT-Mono 48kbps |
❌ Removed |
Permission removed |
Video Codecs
| Codec |
Status |
Notes |
| VP8 |
✅ Default |
Better with packet loss |
| H264 |
✅ Available |
Poor performance with packet loss |
Video Permissions
b_video_screen - Screen sharing permission
b_video_camera - Camera permission
i_video_max_kbps - Max video bitrate
i_video_max_streams - Max total video streams
i_video_max_screen_streams - Max screen share streams
i_video_max_camera_streams - Max camera streams
Audio Processing (Web Client)
- Voice Activity Detection (VAD) - Default mode
- Push-to-Talk (PTT) with configurable delay
- Threshold-based audio filtering
- Echo test support
- Whisper support
- Native audio encoding/decoding (Rust-based worker, replaced Emscripten)
Channel Types and Properties
Channel Types
| Type |
Flag |
Description |
| Permanent |
channel_flag_permanent=1 |
Persists after all users leave |
| Semi-Permanent |
channel_flag_semi_permanent=1 |
Persists until deleted |
| Temporary |
Both flags 0 |
Auto-deleted when empty (with configurable delay) |
| Default |
channel_flag_default=1 |
Landing channel for new connections |
| Password-Protected |
channel_flag_password=1 |
Requires password to join |
| Private/Hidden |
channel_flag_private=1 |
Invisible to unauthorized users |
Conversation Modes (1.4.22+)
| Value |
Mode |
Description |
| 0 |
None |
Shows channel description instead of conversation |
| 1 |
Public |
Default conversation mode |
| 2 |
Private |
Only accessible while in the channel |
| Value |
Mode |
Description |
| 0 |
Public |
Default sidebar mode |
Channel Properties (Key)
| Property |
Type |
Default |
Description |
channel_name |
string |
- |
Channel name |
channel_topic |
string |
empty |
Channel topic |
channel_description |
string |
empty |
Channel description |
channel_password |
string |
empty |
Channel password |
channel_codec |
number |
4 (OPUS) |
Audio codec |
channel_codec_quality |
number |
7 |
Codec quality (0-10) |
channel_maxclients |
number |
-1 (-1=unlimited) |
Max clients |
channel_maxfamilyclients |
number |
-1 |
Max clients including sub-channels |
channel_needed_talk_power |
number |
0 |
Required talk power |
channel_forced_silence |
bool |
0 |
Force silence in channel |
channel_delete_delay |
number |
0 |
Delay before temp channel deletion |
channel_conversation_history_length |
number |
1500 |
Chat history length (-1=none, 0=unlimited) |
channel_conversation_mode |
number |
1 |
Conversation mode |
channel_sidebar_mode |
number |
0 |
Sidebar mode |
channel_created_at |
number |
- |
Creation timestamp |
channel_created_by |
number |
- |
Creator database ID |
channel_last_left |
number |
- |
Last time a user left |
Channel Name Spacers
TeaSpeak supports [spacerX] channel name spacers for visual organization in the channel tree.
Permissions System
Permission Calculation Flow
TeaSpeak uses a multi-layer permission system:
- Server Groups - Global permissions from server group membership
- Channel Groups - Channel-specific permissions
- Client Permissions - Per-client overrides
- Channel Client Permissions - Per-client per-channel overrides
- Playlist Permissions - Music bot playlist permissions
Each permission has:
- Value - The granted power level
- Negate - If set, the permission is denied regardless
- Skip - If set, skips this permission in calculation
TeaSpeak-Specific Permissions
General Permissions
| Permission |
Description |
b_client_allow_invalid_badges |
Bypass server kick for invalid badges |
b_client_allow_invalid_packet |
Bypass server kick for empty packets |
b_client_even_textmessage_send |
Allow sending private messages to self |
b_client_ignore_vpn |
Bypass VPN check |
b_client_music_server_list |
List all music bots on server |
b_client_music_channel_list |
List music bots in current channel |
b_client_music_create |
Create music bots |
b_client_music_delete_own |
Delete own music bots |
i_client_music_delete_power |
Power to delete music bots |
i_client_music_needed_delete_power |
Needed power to delete music bots |
i_client_music_info |
Power for .mbot info |
i_client_music_needed_info |
Needed info power for bot |
i_client_music_play_power |
Power for .mbot play |
i_client_music_needed_play_power |
Needed play power for bot |
i_client_music_rename_power |
Power for .mbot rename |
i_client_music_needed_rename_power |
Needed rename power for bot |
i_client_music_limit |
Max music bots per client |
i_client_max_clones_hwid |
Max clones with same HWID |
i_client_max_clones_ip |
Max clones with same IP |
b_virtualserver_modify_music_bot_limit |
Modify server music bot limit |
Channel View Permissions
| Permission |
Description |
i_channel_view_power |
Channel view power |
b_channel_ignore_view_power |
Bypass visibility check |
i_channel_needed_view_power |
Required view power for channel |
Group Management Permissions
| Permission |
Description |
i_channel_group_member_add_power |
Power to set channel group |
i_channel_group_needed_member_add_power |
Needed power to add to channel group |
i_channel_group_member_remove_power |
Power to remove channel group |
i_channel_group_needed_member_remove_power |
Needed power to remove channel group |
i_channel_group_modify_power |
Power to modify channel group |
i_channel_group_needed_modify_power |
Needed power to modify channel group |
i_server_group_self_add_power |
Power to add self to server group |
i_server_group_self_remove_power |
Power to remove self from server group |
i_channel_group_self_add_power |
Power to add self to channel group |
i_channel_group_self_remove_power |
Power to remove self from channel group |
Ban Permissions
| Permission |
Description |
b_client_ban_create_global |
Create global ban rules |
b_client_ban_delete_global |
Delete any global ban rules |
b_client_ban_delete_own_global |
Delete own global ban rules |
b_client_ban_edit |
Edit local ban rules |
b_client_ban_edit_global |
Edit global ban rules |
b_client_ban_list_global |
List global ban rules |
Channel Limit Permissions
| Permission |
Description |
i_client_max_channels |
Max channels per client |
i_client_max_temporary_channels |
Max temporary channels |
i_client_max_semi_channels |
Max semi-permanent channels |
i_client_max_permanent_channels |
Max permanent channels |
Chat/Conversation Permissions
| Permission |
Description |
b_channel_create_modify_conversation_private |
Modify conversation private flag |
b_channel_create_modify_conversation_history_length |
Modify history length (value = max) |
b_channel_create_modify_conversation_history_unlimited |
Set unlimited history |
b_channel_create_modify_conversation_mode_private |
Create/modify private conversation mode |
b_channel_create_modify_conversation_mode_public |
Create/modify public conversation mode |
b_channel_create_modify_conversation_mode_none |
Create/modify none conversation mode |
Other Permissions
| Permission |
Description |
b_channel_ignore_description_view_power |
Bypass description view power |
b_channel_ignore_subscribe_power |
Bypass subscribe power |
b_virtualserver_modify_country_code |
Edit server country code |
b_virtualserver_select_godmode |
Query can select server without binding (removed 1.5.0+) |
i_channel_subscribe_power (-1) |
Prevent channel subscription |
b_channel_create_modify_sidebar_mode |
Modify channel sidebar mode |
b_channel_modify_temp_delete_delay |
Modify temp delete delay |
b_channel_create_modify_force_password |
Force password on channel creation |
Removed Permissions (1.5.0+)
b_channel_create_modify_with_codec_speex8
b_channel_create_modify_with_codec_speex16
b_channel_create_modify_with_codec_speex32
b_channel_create_modify_with_codec_celtmono48
b_channel_create_private (replaced by conversation modes)
b_virtualserver_select_godmode (removed, queries always visible)
Server Configuration
config.yml Options
The server uses a YAML configuration file with the following key sections:
Instance Properties
| Property |
Default |
Description |
serverinstance_filetransfer_host |
0.0.0.0,[::] |
File transfer bind address |
serverinstance_filetransfer_port |
30303 |
File transfer port |
serverinstance_filetransfer_max_connections |
100 |
Max file transfer connections |
serverinstance_filetransfer_max_connections_per_ip |
20 |
Max file transfer connections per IP |
serverinstance_query_host |
0.0.0.0,[::] |
Query bind address |
serverinstance_query_port |
10101 |
Query port |
serverinstance_query_max_connections |
100 |
Max query connections |
serverinstance_query_max_connections_per_ip |
3 |
Max query connections per IP |
serverinstance_serverquery_flood_commands |
3 |
Flood protection commands |
serverinstance_serverquery_flood_time |
1 |
Flood protection time (seconds) |
serverinstance_serverquery_ban_time |
600 |
Query ban time (seconds) |
serverinstance_virtual_server_id_index |
1 |
Starting virtual server ID |
Customizable Messages (config.yml)
| Config Key |
Description |
| Server stop/crash message |
Message shown when server stops |
| Default channel/client description |
Fallback descriptions |
| Idle kick message |
Message for idle timeout kicks |
| Server version/platform |
Displayed version info |
| License type display |
No Licence, ATHP, LAN, NPL, or auto modes |
| Query MOTD |
Message of the day for query clients |
| Query newline character |
\n (default) or \n\r |
| Default country flag |
Flag when no valid country detected |
Other Notable Config Options
| Option |
Description |
allow_session_reinitialize |
Allow session re-initialization |
suppress_myts_warnings |
Suppress MyTeamSpeak warnings |
notifymute |
Notify on mute |
connect_limit |
Connection limit |
client_connect_limit |
Per-client connection limit |
strict_ut8_mode |
Strict UTF-8 mode |
show_invisible_clients |
Show invisible clients |
default_music_bot |
Default music bot settings |
virtualserver_max_channels |
Max channels per virtual server |
Runtime Terminal Commands
| Command |
Description |
end|shutdown <now|time> <reason> |
Stop the server |
chat <serverId> <mode> <targetId> <message> |
Send chat message |
permgrant <ServerId> <GroupId> <PermName> <Grant> |
Fix permissions |
passwd <new_password> <repeated> |
Change admin password |
reload config |
Reload config.yml |
Music Bot System
Quick Setup
- Grant yourself music-related permissions
- Type
.mbot in channel chat
- Use query commands for advanced control
Music Bot Query Commands
| Command |
Description |
musicbotcreate [cid=<channel>] |
Create a music bot |
musicbotdelete bot_id=<id> |
Delete a music bot |
musicbotsetsubscription bot_id=<id> |
Subscribe to bot events |
musicbotplayerinfo bot_id=<id> |
Get player info |
musicbotplayeraction bot_id=<id> action=<n> |
Control playback |
musicbotqueueadd bot_id=<id> type=<n> url=<url> |
Add song to queue |
musicbotqueueadd bot_id=<id> type=2 url=cid=<n>\sname=<file>\spath |
Add file from channel |
musicbotqueuelist bot_id=<id> [-bulk] |
List queue entries |
musicbotqueueremove bot_id=<id> song_id=<id> [-skip_error] |
Remove queue entry |
musicbotqueuereorder bot_id=<id> song_id=<id> index=<n> |
Reorder queue |
Player Actions
| Value |
Action |
Description |
| 0 |
Stop |
Stop the player |
| 1 |
Play |
Play current song |
| 2 |
Pause |
Pause current song |
| 3 |
Forward |
Skip to next song |
| 4 |
Rewind |
Jump to last song (limited support) |
Player States
| Value |
State |
Description |
| 0 |
Sleeping |
Waiting for new song |
| 1 |
Loading |
Loading current song |
| 2 |
Playing |
Playing current song |
| 3 |
Paused |
Playback paused |
| 4 |
Stopped |
Playback stopped |
Song Loader Types
| Value |
Type |
Description |
| 0 |
YouTube-DL |
Resolve URL via youtube-dl |
| 1 |
FFMPEG |
Direct FFMPEG playback |
| 2 |
Channel File |
Play from channel file system |
Playlist System
| Command |
Description |
playlistcreate |
Create playlist |
playlistdelete |
Delete playlist |
playlistlist |
List playlists |
playlistinfo |
Get playlist info |
playlistedit |
Edit playlist properties |
playlistsonglist |
List songs in playlist |
playlistsongadd |
Add song to playlist |
playlistsongremove |
Remove song from playlist |
playlistsongreorder |
Reorder songs |
playlistsongsetcurrent |
Set current song |
musicbotplaylistassign |
Assign playlist to bot |
playlistclientlist |
List client playlists |
playlistclientpermlist |
List client permissions |
playlistclientaddperm |
Add client permission |
playlistclientdelperm |
Remove client permission |
Playlist Properties
| Property |
Type |
Description |
playlist_id |
number |
Playlist identifier |
playlist_title |
string |
Playlist title |
playlist_description |
string |
Playlist description |
playlist_type |
number |
0=bot-bound, 1=global |
playlist_owner_dbid |
number |
Owner database ID |
playlist_max_songs |
number |
Max songs (-1=unlimited) |
playlist_flag_delete_played |
bool |
Delete played songs |
playlist_flag_finished |
bool |
Playlist finished flag |
playlist_replay_mode |
number |
0=normal, 1=loop, 2=loop-single, 3=shuffle |
playlist_current_song_id |
number |
Current song ID |
Music Bot Permissions
| Permission |
Description |
i_max_playlists |
Max playlists per client |
i_max_playlist_size |
Max songs per playlist |
i_playlist_view_power / i_playlist_needed_view_power |
View power |
i_playlist_modify_power / i_playlist_needed_modify_power |
Modify power |
i_playlist_delete_power / i_playlist_needed_delete_power |
Delete power |
i_playlist_song_add_power / i_playlist_song_needed_add_power |
Add song power |
i_playlist_song_remove_power / i_playlist_song_needed_remove_power |
Remove song power |
i_playlist_song_move_power / i_playlist_song_needed_move_power |
Move song power |
Music Bot Chat Commands
Type in channel chat:
.mbot - Show help
.mbot play - Start playback
.mbot info - Show bot info
.mbot rename <name> - Rename bot
Music Bot Events
| Event |
Description |
notifymusicqueueadd |
Song added to queue |
notifymusicqueueremove |
Song removed from queue |
notifymusicqueueorderchange |
Queue order changed |
notifymusicplayersongchange |
Current song changed |
notifymusicstatusupdate |
Player status update (every second when subscribed) |
Chat System
Overview
TeaSpeak's chat system is channel-based, using voice channel tree channels as chat rooms. Features:
- Each voice channel can be used as a chat room
- Conversations are persistent (saved to database)
- Offline users can read missed messages
- Cross-channel messaging (if you have join permission)
- Password-protected channels require active channel membership for chat
Chat Properties
| Property |
Range |
Description |
channel_conversation_history_length |
-1 to 65535 |
-1=no history, 0=unlimited, N=max messages |
channel_flag_conversation_private |
bool |
Private = only accessible while in channel |
Chat Commands (ServerQuery)
| Command |
Description |
sendtextmessage target=<id> targetmode=<mode> msg=<text> [cid=<channel>] |
Send message |
conversationhistory cid=<channel> |
Get conversation history |
conversationfetch cid=<channel> |
Fetch conversation |
conversationmessagedelete |
Delete message |
conversationsetsubscription |
Set subscription |
Supported Chat Features
- BBCode formatting
- Markdown support
- Emoji support
- Image preview
- YouTube video embeds
- URL detection and linking
- Tables, headings, lists, horizontal rules
- Code blocks
- Blockquotes
Token System
Overview
Tokens are long, random-generated keys that trigger actions when used. Their main purpose is granting extra permissions.
Token Properties
| Property |
Description |
token_max_uses |
Maximum uses (-1 = unlimited) |
token_expired |
Expiration timestamp (seconds since epoch) |
token |
Custom token value (optional, auto-generated if not set) |
Token Actions
| Action |
ID |
ID1 |
ID2 |
Text |
| Add server group |
0x01 |
Server group ID |
unused |
unused |
| Remove server group |
0x02 |
Server group ID |
unused |
unused |
| Set channel group |
0x03 |
Channel group ID |
Channel ID |
unused |
| Allow channel join |
0x04 |
unused |
Channel ID |
Channel password |
Token Commands
| Command |
Description |
tokenadd |
Create token |
tokendelete |
Delete token |
tokenlist [-new] |
List tokens |
tokenuse |
Use a token |
tokenedit |
Edit token (new system) |
tokenactionlist |
List token actions (new system) |
New Token System (1.5.1+)
- Token length increased from 20 to 32 characters
-new switch for new token system
tokenuse no longer requires permissions
tokendelete no longer requires permissions for own tokens
- Tokens given on join are taken into account
ServerQuery Notify System
Registration
Server Events
| Event |
Command |
Description |
| Server Edit |
notifyserverupdated |
Server settings changed |
Client Events
| Event |
Command |
Description |
| Client Poke |
notifyclientpoke |
Received a poke |
| Client Updated |
notifyclientupdated |
Client property changed |
| Client Command |
notifyplugincmd |
Plugin message received |
| Client Join |
notifycliententerview |
Client entered view |
| Client Switch |
notifyclientmoved |
Client moved channels |
| Client Leave |
notifyclientleftview |
Client left/kicked/banned |
| Group Add |
notifyservergroupclientadded |
Added to server group |
| Group Remove |
notifyservergroupclientdeleted |
Removed from server group |
| Channel Group Change |
notifyclientchannelgroupchanged |
Channel group changed |
Chat Events
| Event |
Command |
Description |
| Composing |
notifyclientchatcomposing |
Client is typing |
| Receive |
notifytextmessage |
Message received |
| Close |
notifyclientchatclosed |
Chat closed |
Channel Events
| Event |
Command |
Description |
| Create |
notifychannelcreated |
Channel created |
| Edit |
notifychanneledited |
Channel edited |
| Description Changed |
notifychanneldescriptionchanged |
Description changed |
| Password Changed |
notifychannelpasswordchanged |
Password changed |
| Moved |
notifychannelmoved |
Channel moved |
| Deleted |
notifychanneldeleted |
Channel deleted |
Ban System
Standard Ban Commands
| Command |
Description |
banadd |
Add ban rule |
bandel |
Delete ban rule |
banedit |
Edit ban rule (TeaSpeak-specific) |
banlist |
List ban rules |
banclient |
Ban client (supports database ID) |
bantriggerlist |
List ban enforcements |
Global Bans
Use sid=0 for instance-wide bans:
HWID Bans
Ban Properties
- IP-based bans
- Name-based bans
- HWID-based bans
- Configurable auto-ban on complain threshold
- Ban time in seconds
- Global (instance-wide) or local (per-server)
Web Client Architecture
Technology Stack
| Technology |
Version |
Purpose |
| TypeScript |
4.2+ |
Primary language (84.1%) |
| React |
16.x |
UI framework |
| SCSS |
- |
Styling (10.8%) |
| Webpack |
5.x |
Build system |
| Rust/WASM |
- |
Audio processing worker |
| WebRTC |
- |
Voice/video communication |
Key Dependencies
| Package |
Purpose |
react / react-dom |
UI rendering |
react-grid-layout |
Drag-and-drop layouts |
react-player |
Media playback |
remarkable |
Markdown rendering |
emoji-mart |
Emoji picker |
twemoji |
Twitter emoji support |
highlight.js |
Code syntax highlighting |
sdp-transform |
SDP parsing for WebRTC |
webrtc-adapter |
WebRTC cross-browser support |
dompurify |
HTML sanitization |
crypto-js / webcrypto-liner |
Cryptography |
jquery |
Legacy DOM manipulation |
moment |
Date/time handling |
detect-browser |
Browser detection |
Project Structure
Build Commands
Browser Support
| Browser |
Supported |
| Chrome |
✅ Yes |
| Firefox |
✅ Yes |
| Opera |
✅ Yes |
| Safari |
✅ Yes |
| MS Edge (Chromium) |
✅ Yes |
| MS Edge (Legacy) |
⚠️ Partial |
| Internet Explorer |
❌ No |
Key Web Client Features
- Multi-server tabs (connect to multiple servers)
- Popoutable modals (detached windows)
- CSS variable editor for theming
- Dark theme
- Responsive design (font-size based)
- Bookmark system with import/export
- Auto-connect on startup
- Channel tree with React rendering
- Video spotlight mode (multiple simultaneous videos)
- Screen sharing
- Watch-together mode
- Image preview in chat
- Drag-and-drop for clients
- Context menus
- Hotkey system
- Volume controls (master + per-client)
- Identity management with auto-generation
- Auto-reconnect system
Music Bot Architecture (TeaMusic)
Technology
- Language: C++ (99.3%), CMake (0.7%)
- Standard: C++17
- Build: CMake with shared library providers
Provider System
TeaMusic uses a plugin-based provider architecture:
Provider Details
| Provider |
Prefix |
Dependencies |
Description |
| FFMPEG |
000 |
libevent, threadpool, StringVariables |
Direct audio playback via FFMPEG |
| YouTube-DL |
001 |
FFMPEG provider, jsoncpp, threadpool, StringVariables |
YouTube/video URL resolution + playback |
Build Options
Music Provider Features
- Automatic reconnect (3 attempts) on stream disconnect
- Shuffle mode
- Song change notifications
- Configurable announce messages
- Volume control per bot
- Playlist persistence across restarts
- YouTube URL resolution via youtube-dl
- FFMPEG direct stream playback
- Channel file system playback
Server Binary Distribution
Download Sources (Archived)
| Platform |
URL Pattern |
| Linux x64 (stable) |
https://repo.teaspeak.de/server/linux/amd64_stable/TeaSpeak-.tar.gz |
| Linux x64 (nightly) |
https://repo.teaspeak.de/server/linux/amd64_nightly/ |
| Docker (TeaWeb) |
https://hub.docker.com/r/teaspeak/web |
| Web Client Releases |
https://github.com/TeaSpeak/TeaWeb/releases |
| TeaClient Releases |
https://clientapi.teaspeak.de/files/release/ |
TeaClient Versions (Archived)
| Platform |
Format |
Version |
| Linux x64 |
.deb installer |
1.5.3-2 |
| Linux x64 |
.tar.gz |
1.5.3-2 |
| Windows x64 |
.exe installer |
1.5.3-2 |
| Windows x64 |
.tar.gz |
1.5.3-2 |
Installation
Server:
Docker (Web Client):
teastart.sh Commands
Supported Architectures
- x86_64 (primary)
- armv32v7 (since 1.4.5, with web client since 1.4.6)
License Information
TeaWeb (Web Client)
License: Mozilla Public License 2.0 (MPL-2.0)
Key terms:
- Source code modifications must remain under MPL-2.0
- Can be combined with other code under different licenses
- Must provide source for MPL-covered portions
- No warranty, no liability
TeaMusic (Music Bot Providers)
License: Not explicitly stated in repository (likely open source based on public GitHub presence)
TeaSpeak Server
License: Proprietary / Not open source
The server binary is distributed freely but is not open source. The issue tracker and documentation are public.
TeaClient (Desktop Client)
License: Not open source (distributed as binary)
Known Issues and Limitations
Open Issues (as of compilation)
From the GitHub issue tracker (61 open issues on TeaSpeak/TeaSpeak):
| Issue |
Title |
Status |
| #723 |
Arch Linux core dump |
Open |
| #722 |
Screen share not working, project unmaintained |
Open |
| #721 |
Server crashes |
Open |
| #720 |
Video sharing erratic and crashing |
Open |
| #719 |
Can't start server on Windows WSL2 |
Open |
| #718 |
Failed to parse VP8 header, screen share failed |
Open |
| #717 |
Raspberry Pi setup |
Open |
| #716 |
Can't download |
Open |
| #715 |
None of available versions working |
Open |
| #714 |
Server binary for Raspberry Pi (ARM) |
Open |
| #713 |
Packet resend failed |
Open |
| #712 |
Feature discussion |
Open |
Web Client Issues (TeaWeb, 15 open)
The TeaWeb repository is archived (read-only since Jul 9, 2025).
Known Limitations
- Non-OPUS codecs removed - All Speex and CELT codecs dropped in 1.5.0
- VP8 parsing issues - Screen sharing can fail with VP8 header parsing errors
- ARM support limited - Raspberry Pi builds not consistently available
- WebRTC stability - Some video streaming instability reported
- Project maintenance - Appears unmaintained since ~2022
- Video performance - H264 performs poorly with packet loss
- Windows WSL2 - Server startup issues on WSL2
- Music bot queue - Some features marked as "unimplemented" in documentation
- YouTube-DL dependency - Requires separate youtube-dl installation
- Snapshot version - Version 2 introduced breaking changes for music bot data
Critical Fixes (Historical)
- 1.4.12-beta4: Fixed critical server crash due to malformed packets
- 1.4.12-beta4: Fixed crash from missing "providers" directory
- 1.3.26b: Fixed out-of-order packet sending ("invalid clientID disconnect")
- 1.3.17b: Fixed deeply rooted protocol bug (generation ID miscalculation)
- 1.3.14b: Fixed voice encryption issue
Properties Reference
Instance Properties
| Property |
Type |
Default |
Description |
serverinstance_database_version |
uint |
0 |
Database version |
serverinstance_permissions_version |
uint |
0 |
Permissions version |
serverinstance_filetransfer_host |
string |
0.0.0.0,[::] |
File transfer host |
serverinstance_filetransfer_port |
uint |
30303 |
File transfer port |
serverinstance_filetransfer_max_connections |
uint |
100 |
Max connections |
serverinstance_filetransfer_max_connections_per_ip |
uint |
20 |
Max per IP |
serverinstance_query_host |
string |
0.0.0.0,[::] |
Query host |
serverinstance_query_port |
uint |
10101 |
Query port |
serverinstance_query_max_connections |
uint |
100 |
Max query connections |
serverinstance_query_max_connections_per_ip |
uint |
3 |
Max per IP |
serverinstance_max_download_total_bandwidth |
int |
-1 |
Download bandwidth limit |
serverinstance_max_upload_total_bandwidth |
int |
-1 |
Upload bandwidth limit |
serverinstance_serverquery_flood_commands |
uint |
3 |
Flood commands |
serverinstance_serverquery_flood_time |
uint |
1 |
Flood time |
serverinstance_serverquery_ban_time |
uint |
600 |
Ban time |
serverinstance_virtual_server_id_index |
uint |
1 |
Server ID start index |
Virtual Server Properties
| Property |
Type |
Default |
Description |
virtualserver_unique_identifier |
string |
- |
Server UID |
virtualserver_name |
string |
"Another TeaSpeak server..." |
Server name |
virtualserver_welcomemessage |
string |
"Welcome on another..." |
Welcome message |
virtualserver_maxclients |
uint |
120 |
Max clients |
virtualserver_password |
string |
empty |
Server password |
virtualserver_port |
uint |
9987 |
Voice port |
virtualserver_host |
string |
0.0.0.0,:: |
Bind address |
virtualserver_codec_encryption_mode |
uint |
0 |
Encryption mode |
virtualserver_hostmessage |
string |
"Welcome" |
Host message |
virtualserver_hostbanner_url |
string |
empty |
Banner URL |
virtualserver_hostbanner_gfx_url |
string |
empty |
Banner image URL |
virtualserver_hostbanner_gfx_interval |
uint |
0 |
Banner rotation interval |
virtualserver_complain_autoban_count |
uint |
5 |
Auto-ban threshold |
virtualserver_complain_autoban_time |
uint |
5 |
Auto-ban time |
virtualserver_complain_remove_time |
uint |
5 |
Complain expiry |
virtualserver_priority_speaker_dimm_modificator |
float |
-18 |
Priority speaker volume reduction |
virtualserver_antiflood_points_tick_reduce |
uint |
25 |
Anti-flood point reduction |
virtualserver_antiflood_points_needed_command_block |
uint |
150 |
Command block threshold |
virtualserver_antiflood_points_needed_ip_block |
uint |
300 |
IP block threshold |
virtualserver_needed_identity_security_level |
uint |
8 |
Required security level |
virtualserver_channel_temp_delete_delay_default |
uint |
60 |
Temp channel delete delay |
virtualserver_max_channels |
uint |
1000 |
Max channels |
virtualserver_web_host |
string |
0.0.0.0 |
Web client host |
virtualserver_web_port |
uint |
0 |
Web client port |
virtualserver_default_client_description |
string |
empty |
Default client description |
virtualserver_default_channel_description |
string |
empty |
Default channel description |
virtualserver_default_channel_topic |
string |
empty |
Default channel topic |
virtualserver_music_bot_limit |
int |
-1 |
Music bot limit |
virtualserver_country_code |
string |
XX |
Server country code |
virtualserver_reserved_slots |
uint |
0 |
Reserved slots |
Client Properties (Key)
| Property |
Type |
Default |
Description |
client_unique_identifier |
string |
- |
Client UID |
client_nickname |
string |
- |
Nickname |
client_version |
string |
"unknown" |
Client version |
client_platform |
string |
"unknown" |
Client platform |
client_input_muted |
bool |
0 |
Input muted |
client_output_muted |
bool |
0 |
Output muted |
client_is_recording |
bool |
0 |
Recording flag |
client_database_id |
uint |
0 |
Database ID |
client_away |
bool |
0 |
Away status |
client_away_message |
string |
empty |
Away message |
client_type |
uint |
0 |
0=normal, 1=query |
client_type_exact |
uint |
0 |
Exact type |
client_talk_power |
uint |
0 |
Talk power |
client_is_talker |
bool |
0 |
Talker flag |
client_is_priority_speaker |
bool |
0 |
Priority speaker |
client_is_channel_commander |
bool |
0 |
Channel commander |
client_badges |
string |
empty |
Client badges |
client_total_online_time |
uint |
0 |
Total online time |
client_month_online_time |
uint |
0 |
Monthly online time |
client_meta_data |
string |
empty |
Metadata |
client_description |
string |
empty |
Description |
client_country |
string |
"TS" |
Country code |
client_teaforo_id |
uint |
0 |
TeaForum ID |
client_teaforo_name |
string |
empty |
TeaForum name |
client_owner |
uint |
0 |
Owner (for music bots) |
client_bot_type |
uint |
0 |
Bot type |
player_state |
uint |
0 |
Music player state |
player_volume |
float |
1 |
Music player volume |
client_playlist_id |
uint |
0 |
Assigned playlist |
Feature Support Commands
listfeaturesupport
The server exposes feature support via listfeaturesupport:
| Feature Name |
Version |
Description |
error-bulks |
1 |
Bulked command responses |
advanced-channel-chat |
1 |
Cross-channel persistent chat |
log-query |
1 |
Instance log querying |
sidebar-mode |
1 |
Channel sidebar modes |
Bulked Command Responses
Supported commands for individual error results:
servergroupaddperm, servergroupdelperm, servergroupautoaddperm, servergroupautodelperm
channeladdperm, channeldelperm
clientaddperm, clientdelperm
channelclientaddperm, channelclientdelperm
channelgroupaddperm, channelgroupdelperm
playlistaddperm, playlistdelperm, playlistclientaddperm, playlistclientdelperm
ftdeletefile, ftgetfileinfo
Additional Command Extensions
Extended Command Parameters
| Command |
Extra Parameters |
channellist / channelinfo |
created_by, created_at |
clientdblist -details / clientdbfind -details / clientdbinfo |
client_badges, client_version, client_platform, client_hwid |
notifyplugincmd / notifyconnectioninforequest |
invokerid |
sendtextmessage |
cid (target channel) |
tokenadd |
token (custom value) |
banclient |
Accepts database ID |
New Commands
| Command |
Description |
propertylist |
List all properties |
listfeaturesupport |
List supported features |
logquery |
Query server log |
logadd |
Add log entry |
permoverview |
Permission overview |
ftrenamefile |
Rename file |
ftlist |
List file transfers |
ftstop |
Stop file transfer |
conversationhistory |
Chat history |
conversationfetch |
Fetch conversation |
conversationmessagedelete |
Delete chat message |
conversationsetsubscription |
Set chat subscription |
tokenactionlist |
List token actions |
tokenedit |
Edit token |
Removed Commands
| Command |
Replacement |
logview |
logquery |
musicbotqueuelist |
Playlist system (removed 1.5.4+) |
musicbotqueueadd |
Playlist system (removed 1.5.4+) |
musicbotqueuereorder |
Playlist system (removed 1.5.4+) |
musicbotqueueremove |
Playlist system (removed 1.5.4+) |
Version History Highlights
Major Versions
| Version |
Key Changes |
| 1.5.6 |
Latest known version, IP2Location update, config reload fix |
| 1.5.5 |
Video viewer tracking, native client counting |
| 1.5.4 |
Channel admin fix, bulked commands, query group improvements |
| 1.5.2 |
WebRTC STUN enabled by default |
| 1.5.1 |
Token system redesign, web list removal |
| 1.5.0 |
Video broadcasting, OPUS-only, WebRTC improvements, sidebar modes |
| 1.4.22 |
Conversation modes (none/public/private) |
| 1.4.21 |
File transfer crash fix, logging properties |
| 1.4.20 |
Web client whisper support, echo tests |
| 1.4.19 |
Raw command support for web client, whisper API |
| 1.4.18 |
Database improvements, compressed snapshots, snapshot deploy improvements |
| 1.4.17 |
YT-DL improvements, file transfer changes |
| 1.4.16 |
Server logging system, logadd/logquery commands |
| 1.4.15 |
File transfer restructure, bulked responses, ftrenamefile |
| 1.4.14 |
Permission checking rework, bulk operations, query newline change |
| 1.4.13 |
Statistics improvements, packet loss calculation, RTO adjustment |
| 1.4.12 |
Connection statistics, UDP packet loss, RTO RFC 6298 |
| 1.4.11 |
WebRTC thread pool, automated rlimit check |
| 1.4.10 |
License renewal system, music bot fixes |
| 1.4.8 |
Playlist client commands, skip/negate fix |
| 1.4.7 |
Packet handling restructure (voice separation) |
| 1.4.6 |
Command API rework, permission system overhaul |
| 1.4.5 |
ARM support, join flood protection |
| 1.4.4 |
Config reload, default certificates |
| 1.4.3 |
libnice bundled, music bot slot counting |
| 1.4.1 |
Music bot properties, country code, IP2Location |
| 1.4.0 |
Server snapshots, conversation system, new permissions |
| 1.3.26b |
Critical packet ordering fix |
| 1.3.22b |
Permission system performance improvements |
| 1.3b |
Music bot overhaul, playlist system introduction |
References
Relevance to Chanora
This section maps TeaSpeak features and protocol details to Chanora SRS requirements, identifying where TeaSpeak diverges from the TS3 reference protocol.
Feature Mapping to SRS Requirements
| TeaSpeak Feature |
Chanora SRS Area |
Notes |
| OPUS-only codec (since 1.5.0) |
SRS-071, SRS-072 (Opus encode/decode) |
Simplifies Chanora codec support — no legacy Speex/CELT needed for TeaSpeak servers |
| WebRTC voice bridge |
SRS-045 (protocol adapter) |
TeaSpeak web clients use WebRTC, not UDP; Chanora uses tsclientlib (UDP) — bridge is server-side only |
| Channel tree with hidden/private channels |
SRS-020 (channel tree display) |
i_channel_view_power / channel_flag_private controls visibility; Chanora state sync must handle partial visibility |
| Conversation modes (none/public/private) |
SRS-024 (text chat) |
TeaSpeak channel conversations are persistent; affects chat history expectations |
| Extended ServerQuery notify events |
SRS-047 (event translation) |
TeaSpeak exposes more events to query clients than TS3 (e.g., music bot events); protocol adapter must handle unknown events gracefully (SRS-060) |
| Music bot system |
Out of scope (SRS-010) |
Chanora does not host bots; music bot clients appear as normal clients in channel tree |
| Token system redesign (1.5.1+) |
SRS-045 (connect flow) |
Token length changed from 20→32 chars; token-based group assignment may differ |
| Ban system (global bans, HWID bans, ban editing) |
SRS-048 (error handling) |
TeaSpeak adds banedit command and HWID bans; Chanora must handle unknown ban types gracefully |
listfeaturesupport command |
SRS-052 (protocol probe) |
TeaSpeak exposes advanced-channel-chat, sidebar-mode, etc.; useful for capability detection |
| Anti-flood point system |
SRS-048, SRS-060 |
TeaSpeak uses same tick-reduce model as TS3 but with different point values for some actions |
| File transfer via HTTP |
Out of scope for MVP |
TeaSpeak uses HTTP (port 30303) instead of TS3's custom TCP protocol; Chanora file transfer is P3/Future |
Protocol Divergence Points
The following TeaSpeak behaviors diverge from the TeamSpeak 3 reference protocol documented in the YaTQA and ReSpeak references:
-
Codec removal: Speex (8/16/32kHz) and CELT-Mono (48kHz) are removed in TeaSpeak 1.5.0+. Chanora's Opus-only strategy (SRS-071/072) aligns, but connecting to older TeaSpeak or TS3 servers may require codec negotiation awareness.
-
ServerQuery line terminator: TeaSpeak changed from \n\r to \n in 1.4.14-beta6. TS3 uses 0x0A 0x0D. Chanora connects as a voice client (not query), so this does not affect the voice protocol path.
-
WebRTC vs UDP: TeaSpeak supports both UDP (native clients) and WebRTC (web clients). Chanora uses tsclientlib which implements the UDP voice protocol. The WebRTC bridge is server-side and transparent to native clients.
-
New commands: TeaSpeak adds propertylist, listfeaturesupport, logquery, logadd, conversationhistory, conversationfetch, conversationmessagedelete, tokenactionlist, tokenedit, ftrenamefile, ftlist, ftstop. These are ServerQuery-only and do not affect Chanora's voice-client protocol path.
-
Extended permissions: TeaSpeak adds music bot permissions, channel view power, conversation mode permissions, video permissions, and channel limit permissions. Unknown permissions must be ignored gracefully (SRS-060).
-
Video broadcasting: TeaSpeak supports VP8/H264 video via WebRTC. Chanora does not implement video in MVP (SRS-010 scope constraint). Video streams from other clients should not crash the application (SRS-060).
-
Conversation system: TeaSpeak's persistent channel conversations (conversationhistory, conversationfetch) differ from TS3's simpler text message model. If Chanora connects to a TeaSpeak server, chat history behavior may differ from TS3 expectations.
-
VPN detection: TeaSpeak has b_client_ignore_vpn permission. Chanora does not control server-side VPN detection but should handle any resulting connection failures gracefully.
-
Snapshot format differences: TeaSpeak snapshot version 2 includes music bot data with breaking changes. Not relevant to Chanora client (server-side only).
-
Error code extensions: TeaSpeak may return undocumented error codes for its extended features. Chanora's protocol adapter (SRS-048) should map unknown error codes to a generic error category.