# TeaSpeak Offline Reference Document > Compiled from GitHub repositories (TeaSpeak, TeaWeb, TeaMusic) and archived website (teaspeak.de). > Last updated: June 2026 --- ## Table of Contents 1. [Project Overview](#project-overview) 2. [Architecture](#architecture) 3. [Feature Comparison](#feature-comparison) 4. [Complete Feature List](#complete-feature-list) 5. [Protocol Implementation Details](#protocol-implementation-details) 6. [Audio/Codec Support](#audiocodec-support) 7. [Channel Types and Properties](#channel-types-and-properties) 8. [Permissions System](#permissions-system) 9. [Server Configuration](#server-configuration) 10. [Music Bot System](#music-bot-system) 11. [Chat System](#chat-system) 12. [Token System](#token-system) 13. [ServerQuery Notify System](#serverquery-notify-system) 14. [Ban System](#ban-system) 15. [Web Client Architecture](#web-client-architecture) 16. [Music Bot Architecture (TeaMusic)](#music-bot-architecture-teamusic) 17. [Server Binary Distribution](#server-binary-distribution) 18. [License Information](#license-information) 19. [Known Issues and Limitations](#known-issues-and-limitations) 20. [Properties Reference](#properties-reference) 21. [Feature Support Commands](#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](https://github.com/TeaSpeak/TeaSpeak) | C++ (proprietary binary) | The server daemon (issue tracker + docs in repo) | | **TeaWeb** | [TeaSpeak/TeaWeb](https://github.com/TeaSpeak/TeaWeb) | TypeScript (84.1%), SCSS, HTML | Web client (open source, MPL-2.0) | | **TeaMusic** | [TeaSpeak/TeaMusic](https://github.com/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 ``` ┌─────────────────┐ ┌──────────────────┐ │ Native Clients │────▶│ UDP Voice │ │ (TeaClient/TS3)│ │ (Port 9987) │ └─────────────────┘ └──────────────────┘ │ ┌─────────────────┐ ┌──────────────────┐ │ Web Clients │────▶│ WebRTC Bridge │ │ (Browser) │ │ (via HTTPS) │ └─────────────────┘ └──────────────────┘ │ ┌─────────────────┐ ┌──────────────────┐ │ Query Clients │────▶│ ServerQuery │ │ (YaTQA, bots) │ │ (Port 10101) │ └─────────────────┘ └──────────────────┘ │ ┌─────────────────┐ ┌──────────────────┐ │ File Transfer │────▶│ HTTP/HTTPS │ │ │ │ (Port 30303) │ └─────────────────┘ └──────────────────┘ ``` ### 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) 1. **Built-in Music Bots** - High-quality, low bandwidth music bots with playlist management 2. **Invisible/Hidden Channels** - Channels hidden based on `i_channel_view_power` 3. **Customizable Messages** - Customize server stop messages, default descriptions, version display, license type, query MOTD, country flags 4. **Built-in Console** - Stdout commands: `end|shutdown`, `chat`, `permgrant`, `passwd` 5. **VPN Detection** - `b_client_ignore_vpn` permission to bypass 6. **Scheduled Shutdowns** - `serverprocessstop type=schedule time=60 msg=` 7. **Increased Slot Count** - Up to 1024 slots per virtual server (unlimited virtual servers) 8. **Per-Server Binding** - Individual binding options per virtual server 9. **Global Ban System** - Instance-wide bans with `sid=0` 10. **Ban Enforcement List** - Log of all ban enforcements (`bantriggerlist`) 11. **Ban Editing** - Direct ban editing (not delete+recreate) 12. **HWID Bans** - Ban by hardware ID 13. **Encrypted Query** - SSL/TLS encrypted ServerQuery connections 14. **Extended ServerQuery Notifies** - Almost all events available to query clients 15. **Global Group Assignment** - Instance-wide group assignment via `use 0` 16. **Channel Chat Conversations** - Persistent cross-channel chat 17. **SNI Certificate Support** - Different certificates for different server names 18. **WebRTC for Web Clients** - Native WebRTC voice bridge 19. **Video Broadcasting** - Camera and screen sharing via WebRTC 20. **Automatic Permission Updates** - New permissions auto-applied via `i_group_auto_update_type` 21. **Channel Creation Limits** - Per-client limits on temporary/semi/permanent channels 22. **Customizable Token System** - Configurable token values and actions 23. **Multiple IP Bindings** - IPv4 and IPv6 multi-binding support 24. **Compressed Snapshots** - Server snapshot compression 25. **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 | ### Sidebar Modes (1.5.0+) | 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: 1. **Server Groups** - Global permissions from server group membership 2. **Channel Groups** - Channel-specific permissions 3. **Client Permissions** - Per-client overrides 4. **Channel Client Permissions** - Per-client per-channel overrides 5. **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 ` | Stop the server | | `chat ` | Send chat message | | `permgrant ` | Fix permissions | | `passwd ` | Change admin password | | `reload config` | Reload config.yml | --- ## Music Bot System ### Quick Setup 1. Grant yourself music-related permissions 2. Type `.mbot` in channel chat 3. Use query commands for advanced control ### Music Bot Query Commands | Command | Description | |---------|-------------| | `musicbotcreate [cid=]` | Create a music bot | | `musicbotdelete bot_id=` | Delete a music bot | | `musicbotsetsubscription bot_id=` | Subscribe to bot events | | `musicbotplayerinfo bot_id=` | Get player info | | `musicbotplayeraction bot_id= action=` | Control playback | | `musicbotqueueadd bot_id= type= url=` | Add song to queue | | `musicbotqueueadd bot_id= type=2 url=cid=\sname=\spath` | Add file from channel | | `musicbotqueuelist bot_id= [-bulk]` | List queue entries | | `musicbotqueueremove bot_id= song_id= [-skip_error]` | Remove queue entry | | `musicbotqueuereorder bot_id= song_id= index=` | 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 ` - 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= targetmode= msg= [cid=]` | Send message | | `conversationhistory cid=` | Get conversation history | | `conversationfetch cid=` | 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 ``` servernotifyregister event=all specifier=all # All events servernotifyregister event=server specifier={edit} # Server edit servernotifyregister event=client specifier={poke|update|command|join|switch|leave|add|remove|change} servernotifyregister event=chat specifier={composing|receive_server|receive_channel|receive_private|close} servernotifyregister event=channel specifier={create|edit|desc|move|delete} servernotifyregister event=music specifier={queue|player} ``` ### 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: ``` banadd sid=0 ip=8.8.8.8 reason=Global\sban ``` ### HWID Bans ``` banadd hwid=, banadd hwid= # Ban empty HWIDs ``` ### 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 ``` TeaWeb/ ├── client-api/ # PHP API endpoint (legacy) ├── client/ # Native client wrapper code ├── documentation/ # i18n documentation ├── loader/ # Initial loader (ES5 compatible) ├── scripts/ # Build/install scripts ├── shared/ # Shared code between web/client ├── tools/ # Development tools ├── vendor/ # Vendor dependencies ├── web/ # Main web application │ ├── css/ # SCSS styles │ ├── html/ # HTML templates │ └── ts/ # TypeScript source │ ├── client/ # Client-side code │ ├── connection/ # Server connection │ ├── ui/ # UI components (React) │ └── voice/ # Voice/audio handling ├── webpack/ # Webpack configurations ├── webpack-web.config.ts ├── webpack-client.config.ts ├── package.json └── tsconfig.json ``` ### Build Commands ```bash npm install # Install dependencies ./scripts/install_dependencies.sh # Install rustup, wasm-pack npm start web # Start dev server (http://localhost:8081) npm run build-web # Build for production npm run build-client # Build native client ./scripts/web_package.sh rel # Package into .zip ``` ### 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: ``` TeaMusic/ ├── include/teaspeak/ # Headers (MusicPlayer.h) ├── providers/ │ ├── ffmpeg/ # FFMPEG provider (000 prefix = load first) │ │ ├── FFMpegProvider.cpp │ │ ├── FFMpegMusicPlayer.cpp │ │ ├── FFMpegMusicProcess.cpp │ │ └── FFMpegStream.cpp │ ├── yt/ # YouTube-DL provider (001 prefix = load second) │ │ ├── YTProvider.cpp │ │ ├── YTVManager.cpp │ │ ├── YoutubeMusicPlayer.cpp │ │ └── YTRegex.cpp │ └── shared/ # Shared utilities │ ├── libevent.cpp │ └── CommandWrapper.cpp ├── helpers/ # Development helpers └── CMakeLists.txt ``` ### 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 ```cmake BUILD_PROVIDER_YT=ON # Build YouTube-DL provider BUILD_PROVIDER_FFMPEG=ON # Build FFMPEG provider BUILD_HELPERS=ON # Build development helpers ``` ### 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:** ```bash # Download wget https://repo.teaspeak.de/server/linux/amd64_stable/TeaSpeak-.tar.gz # Extract tar -xzf TeaSpeak-*.tar.gz # Run ./teastart.sh start ``` **Docker (Web Client):** ```bash docker pull teaspeak/web ``` ### teastart.sh Commands ```bash ./teastart.sh start # Start server ./teastart.sh stop # Stop server ./teastart.sh status # Returns 0 if running, 1 if not ./teastart.sh reload # Reload config ./teastart.sh execute # Execute command ``` ### 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 1. **Non-OPUS codecs removed** - All Speex and CELT codecs dropped in 1.5.0 2. **VP8 parsing issues** - Screen sharing can fail with VP8 header parsing errors 3. **ARM support limited** - Raspberry Pi builds not consistently available 4. **WebRTC stability** - Some video streaming instability reported 5. **Project maintenance** - Appears unmaintained since ~2022 6. **Video performance** - H264 performs poorly with packet loss 7. **Windows WSL2** - Server startup issues on WSL2 8. **Music bot queue** - Some features marked as "unimplemented" in documentation 9. **YouTube-DL dependency** - Requires separate youtube-dl installation 10. **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 - **TeaSpeak Server Issues**: https://github.com/TeaSpeak/TeaSpeak/issues - **TeaWeb Issues**: https://github.com/TeaSpeak/TeaWeb/issues (archived) - **TeaMusic Issues**: https://github.com/TeaSpeak/TeaMusic/issues - **Archived Website**: https://web.archive.org/web/2024/https://teaspeak.de/ - **Forum** (archived): https://forum.teaspeak.de/ - **Docker Hub**: https://hub.docker.com/r/teaspeak/web