Skip to main content
This page provides a comprehensive reference for the TeamSpeak 6 Server YAML configuration file (tsserver.yaml). The YAML format provides a structured and readable way to configure all server settings in one place.

Overview

The tsserver.yaml file allows you to configure all server settings in a structured format. This approach offers several advantages:
  • Organization: Group related settings together logically
  • Version Control: Easy to track changes in git
  • Documentation: Comments can be added to explain settings
  • Simplicity: No need for long command-line arguments
Command-line flags take precedence over YAML configuration, which takes precedence over environment variables.

Using the Configuration File

To use a YAML configuration file:
./tsserver --config-file tsserver.yaml
Or with an environment variable:
export TSSERVER_CONFIG_FILE=tsserver.yaml
./tsserver

Complete Schema Example

Below is the complete YAML schema with all available options:
server:
  # General Configuration
  license-path: .
  accept-license: accept
  
  # Voice Server Configuration
  default-voice-port: 9987
  voice-ip:
    - 0.0.0.0
    - "::"
  threads-voice-udp: 5
  
  # Machine Identification
  machine-id: ""
  
  # Virtual Server
  no-default-virtual-server: 0
  
  # Logging
  log-path: logs
  log-append: 0
  
  # File Transfer
  filetransfer-port: 30033
  filetransfer-ip:
    - 0.0.0.0
    - "::"
  
  # Database Maintenance
  clear-database: 0
  no-permission-update: 0
  
  # Network
  http-proxy: ""
  
  # Crash Handling
  crashdump-path: crashdumps
  
  # Database Configuration
  database:
    plugin: sqlite3
    sql-path: /opt/tsserver/sql/
    sql-create-path: /opt/tsserver/sql/create_sqlite/
    client-keep-days: 30
    
    config:
      skip-integrity-check: 0
      host: 127.0.0.1
      port: 5432
      socket: ""
      timeout: 10
      name: teamspeak
      username: ""
      password: ""
      connections: 10
      log-queries: 0
  
  # Query Configuration
  query:
    pool-size: 2
    log-timing: 3600
    ip-allow-list: query_ip_allowlist.txt
    ip-block-list: query_ip_denylist.txt
    admin-password: ""
    log-commands: 0
    skip-brute-force-check: 0
    buffer-mb: 20
    documentation-path: serverquerydocs
    timeout: 300
    
    # SSH Query
    ssh:
      enable: 0
      port: 10022
      ip:
        - 0.0.0.0
        - "::"
      rsa-key: ssh_host_rsa_key
    
    # HTTP Query
    http:
      enable: 0
      port: 10080
      ip:
        - 0.0.0.0
        - "::"
    
    # HTTPS Query
    https:
      enable: 0
      port: 10443
      ip:
        - 0.0.0.0
        - "::"
      certificate: ""
      private-key: ""

Schema Reference

Root Level

All configuration is nested under the server key:
server:
  # All configuration goes here

General Configuration

license-path
string
default:"."
Directory path where the server will look for the licensekey.dat file.
license-path: /opt/teamspeak/licenses
accept-license
string
Confirms you have read and accepted the server license agreement.Accepted values: accept, 1, true
accept-license: accept
machine-id
string
A string to distinguish this instance from other instances using the same database.
machine-id: "server-01"
no-default-virtual-server
integer
default:"0"
If set to 1, no default server is created even if no server exists in the database.
no-default-virtual-server: 0
no-permission-update
integer
default:"0"
If set to 1, do not apply permission changes during server updates.
no-permission-update: 0
clear-database
integer
default:"0"
⚠️ WARNING: If set to 1, resets the database completely (deletes all servers, clients, etc.).
clear-database: 0

Voice Server

default-voice-port
integer
default:"9987"
Permanently sets the default UDP voice port for the first virtual server created.Range: 1 - 65535
default-voice-port: 9987
voice-ip
array
IP addresses for the server to bind the voice port to. Supports multiple entries.
voice-ip:
  - 0.0.0.0
  - "::"
  - 192.168.1.100
threads-voice-udp
integer
default:"5"
Number of threads to use for voice processing.Range: 1 - 16
threads-voice-udp: 5

Logging

log-path
string
default:"logs"
Path to the directory where log files are stored.
log-path: /var/log/teamspeak
log-append
integer
default:"0"
If set to 1, write one ever-growing log file per virtual server.
log-append: 0

File Transfer

filetransfer-port
integer
default:"30033"
Port on which to listen and advertise for file transfer connections.Range: 1 - 65535
filetransfer-port: 30033
Docker Note: Internal container port must match the external host port for file transfers to work correctly.
filetransfer-ip
array
The addresses on which to listen for file transfer connections.
filetransfer-ip:
  - 0.0.0.0
  - "::"

Network

http-proxy
string
Proxy server used for external connections.
http-proxy: "http://proxy.example.com:8080"

Crash Handling

crashdump-path
string
default:"crashdumps"
Path where crash dumps should be written.
crashdump-path: /var/crash/teamspeak

Database Configuration

All database settings are nested under server.database:
database.plugin
string
default:"sqlite3"
Specifies the database plugin to use.Accepted values: sqlite3, mariadb
database:
  plugin: sqlite3
database.sql-path
string
default:"sql"
Path to folder containing SQL queries used by the server.
database:
  sql-path: /opt/tsserver/sql/
database.sql-create-path
string
default:"create_sqlite"
Subdirectory in SQL path to use for DB creation scripts.
database:
  sql-create-path: /opt/tsserver/sql/create_mariadb/
database.client-keep-days
integer
default:"30"
Number of days to keep clients in the database.
database:
  client-keep-days: 90

Database Connection

Connection settings are nested under server.database.config:
database.config.skip-integrity-check
integer
default:"0"
SQLite only: if set to 1, skip DB integrity check at startup.
database:
  config:
    skip-integrity-check: 0
database.config.host
string
default:"127.0.0.1"
Database hostname or IP address.
database:
  config:
    host: db.example.com
database.config.port
integer
default:"5432"
Database port.Range: 1 - 65535
database:
  config:
    port: 3306  # MariaDB/MySQL
database.config.socket
string
Socket file to use for database connection.
database:
  config:
    socket: /var/run/mysqld/mysqld.sock
database.config.timeout
integer
default:"10"
Timeout in seconds when connecting to the database.Range: 1 - 432000
database:
  config:
    timeout: 30
database.config.name
string
default:"teamspeak"
Name of the database to use.
database:
  config:
    name: ts6server
database.config.username
string
The username to use for database authentication.
database:
  config:
    username: tsserver
database.config.password
string
The password to use for database authentication.
database:
  config:
    password: secure_password
Consider using environment variable substitution or secrets management for passwords in production.
database.config.connections
integer
default:"10"
Number of connections to establish to the database.Range: 2 - 100
database:
  config:
    connections: 20
database.config.log-queries
integer
default:"0"
If set to 1, enable logging of SQL queries.
database:
  config:
    log-queries: 0

Query Interface

All query settings are nested under server.query:
query.pool-size
integer
default:"2"
How many threads to use for query command processing.Range: 2 - 32
query:
  pool-size: 4
query.log-timing
integer
default:"3600"
Interval in seconds after which to log query statistics.Range: 10 - 31556952
query:
  log-timing: 1800
query.ip-allow-list
string
default:"query_ip_allowlist.txt"
File path listing IPs exempt from query flood protection.
query:
  ip-allow-list: /etc/teamspeak/allowlist.txt
query.ip-block-list
string
default:"query_ip_denylist.txt"
File path listing IPs blocked from the query interface.
query:
  ip-block-list: /etc/teamspeak/blocklist.txt
query.admin-password
string
Override the query password for the built-in serveradmin account.
query:
  admin-password: "strong_admin_password"
query.log-commands
integer
default:"0"
If set to 1, log every command received on the query interface.
query:
  log-commands: 0
query.skip-brute-force-check
integer
default:"0"
If set to 1, skip brute force checking on query interface connections.
query:
  skip-brute-force-check: 0
query.buffer-mb
integer
default:"20"
How much memory (in MB) to allocate for query connection buffering.Range: 20 - 100
query:
  buffer-mb: 50
query.documentation-path
string
default:"serverquerydocs"
Path to the query documentation files.
query:
  documentation-path: /opt/tsserver/docs
query.timeout
integer
default:"300"
Timeout in seconds before query connections expire.
query:
  timeout: 600

SSH Query

SSH query settings are nested under server.query.ssh:
query.ssh.enable
integer
default:"0"
If set to 1, enable the SSH query interface.
query:
  ssh:
    enable: 1
query.ssh.port
integer
default:"10022"
Port on which to listen for SSH query connections.Range: 1 - 65535
query:
  ssh:
    port: 10022
query.ssh.ip
array
Addresses to listen on for SSH query connections.
query:
  ssh:
    ip:
      - 0.0.0.0
      - "::"
query.ssh.rsa-key
string
default:"ssh_host_rsa_key"
Path to the SSH RSA host key file.
query:
  ssh:
    rsa-key: /etc/teamspeak/ssh_host_rsa_key

HTTP Query

HTTP query settings are nested under server.query.http:
query.http.enable
integer
default:"0"
If set to 1, enable the HTTP query interface.
query:
  http:
    enable: 1
query.http.port
integer
default:"10080"
Port on which to listen for Web Query connections.Range: 1 - 65535
query:
  http:
    port: 10080
query.http.ip
array
Addresses to listen on for Web Query connections.
query:
  http:
    ip:
      - 0.0.0.0
      - "::"

HTTPS Query

HTTPS query settings are nested under server.query.https:
query.https.enable
integer
default:"0"
If set to 1, enable the HTTPS query interface.
query:
  https:
    enable: 1
query.https.port
integer
default:"10443"
Port on which to listen for secure Web Query connections.Range: 1 - 65535
query:
  https:
    port: 10443
query.https.ip
array
Addresses to listen on for secure Web Query connections.
query:
  https:
    ip:
      - 0.0.0.0
      - "::"
query.https.certificate
string
Path to certificate file for HTTPS Web Query.
query:
  https:
    certificate: /etc/teamspeak/ssl/cert.pem
query.https.private-key
string
Path to private key file used with the certificate.
query:
  https:
    private-key: /etc/teamspeak/ssl/key.pem

Configuration Examples

SQLite (Default)

server:
  license-path: .
  accept-license: accept
  default-voice-port: 9987
  voice-ip:
    - 0.0.0.0
    - "::"
  filetransfer-port: 30033
  filetransfer-ip:
    - 0.0.0.0
    - "::"
  log-path: logs
  
  database:
    plugin: sqlite3
    sql-path: sql
    sql-create-path: sql/create_sqlite
    client-keep-days: 30
    config:
      skip-integrity-check: 0
  
  query:
    ssh:
      enable: 1
      port: 10022
    http:
      enable: 1
      port: 10080

MariaDB/MySQL

server:
  license-path: /opt/teamspeak/licenses
  accept-license: accept
  default-voice-port: 9987
  voice-ip:
    - 0.0.0.0
    - "::"
  filetransfer-port: 30033
  log-path: /var/log/teamspeak
  
  database:
    plugin: mariadb
    sql-path: /opt/tsserver/sql
    sql-create-path: /opt/tsserver/sql/create_mariadb
    client-keep-days: 90
    config:
      host: db.example.com
      port: 3306
      name: teamspeak
      username: tsserver
      password: secure_db_password
      connections: 20
      timeout: 30
  
  query:
    pool-size: 4
    admin-password: admin_password
    ssh:
      enable: 1
      port: 10022
    https:
      enable: 1
      port: 10443
      certificate: /etc/ssl/certs/teamspeak.crt
      private-key: /etc/ssl/private/teamspeak.key

Production Deployment

server:
  license-path: /opt/teamspeak/licenses
  accept-license: accept
  
  # Network Configuration
  default-voice-port: 9987
  voice-ip:
    - 0.0.0.0
    - "::"
  filetransfer-port: 30033
  filetransfer-ip:
    - 0.0.0.0
    - "::"
  
  # Performance Tuning
  threads-voice-udp: 8
  machine-id: ts-prod-primary
  
  # Logging
  log-path: /var/log/teamspeak
  log-append: 0
  crashdump-path: /var/crash/teamspeak
  
  # Database - MariaDB
  database:
    plugin: mariadb
    sql-path: /opt/tsserver/sql
    sql-create-path: /opt/tsserver/sql/create_mariadb
    client-keep-days: 90
    config:
      host: db-primary.example.com
      port: 3306
      name: teamspeak_prod
      username: tsserver
      password: "${DB_PASSWORD}"  # Use environment variable
      connections: 30
      timeout: 30
      log-queries: 0
  
  # Query Interface
  query:
    pool-size: 8
    buffer-mb: 50
    log-timing: 3600
    ip-allow-list: /etc/teamspeak/query_allowlist.txt
    ip-block-list: /etc/teamspeak/query_blocklist.txt
    admin-password: "${QUERY_ADMIN_PASSWORD}"  # Use environment variable
    log-commands: 0
    skip-brute-force-check: 0
    timeout: 600
    
    # SSH Query - Enabled
    ssh:
      enable: 1
      port: 10022
      ip:
        - 0.0.0.0
        - "::"
      rsa-key: /etc/teamspeak/ssh_host_rsa_key
    
    # HTTP Query - Disabled (use HTTPS)
    http:
      enable: 0
    
    # HTTPS Query - Enabled
    https:
      enable: 1
      port: 10443
      ip:
        - 0.0.0.0
        - "::"
      certificate: /etc/ssl/certs/teamspeak.crt
      private-key: /etc/ssl/private/teamspeak.key

Best Practices

  • Use environment variables for sensitive data like passwords
  • Enable HTTPS for query interfaces in production
  • Set up IP allow/block lists for query interfaces
  • Use strong admin passwords
  • Keep the license file secure with proper file permissions
  • Disable HTTP query in production (use HTTPS instead)
  • Adjust threads-voice-udp based on your CPU cores (typically 1 per 2 cores)
  • Increase database.config.connections for high-traffic servers
  • Use MariaDB instead of SQLite for production
  • Adjust query.pool-size based on expected query load
  • Monitor and adjust query.buffer-mb if needed
  • Set appropriate database.client-keep-days based on your retention policy
  • Configure log-path to a location with adequate disk space
  • Regular backups of the database and configuration files
  • Use machine-id to identify instances in multi-server setups
  • Keep crashdump-path on a partition with sufficient space
  • Use external database (MariaDB) for clustering
  • Set unique machine-id for each instance
  • Share database across instances
  • Use load balancers for query interfaces
  • Implement database replication for redundancy

Validation

To validate your configuration file without starting the server:
./tsserver --config-file tsserver.yaml --write-config-file
This will load the configuration and write it back, helping identify any syntax errors.

See Also

CLI Options

Complete list of command-line options

Environment Variables

Complete list of environment variables

Build docs developers (and LLMs) love