Repository navigation
Administration
The installation-wide admin tasks that don't belong to any one server. Almost all of them are under Settings; the Connection Journal has its own place in the navigation.
| Tab | Who | What it is for |
|---|---|---|
| Connections | admins | The TeamSpeak servers the manager talks to — below, and the setup guides (same machine, elsewhere or rented) |
| Account | everyone | Your own password and two-factor authentication — Users and Roles |
| WebGui | everyone | Your theme, accent and language; for admins also the installation defaults and the storage notice — Themes and Appearance, Privacy and Hosting |
| Users | admins | Accounts, roles, server access and sessions — Users and Roles |
| YouTube | admins | Cookies for age-restricted video, and whether songs played from chat are kept — Music Bots |
| Streaming | admins | The resolution, frame rate, bitrate and volume a video stream starts with, and when an unwatched one ends — Music Bots |
| Network | admins | Which visitor address the backend sees — below |
| Debug | admins | Logging switches, and a danger zone — below |
| Restart | admins | Scheduled restarts — below |
| SSO | admins | Sign-in through an OpenID Connect provider — Users and Roles |
| Update Status | admins | Whether a newer version exists — below |
Settings → Connections lists the TeamSpeak servers as cards, each with a Test button (which names the real reason when it fails), Edit, the Bot Identity button and a bin. A card shows the host, the protocol and the SSH port, an Enabled or Disabled badge and, for a connection without an API key, a Voice only badge. The Add Connection / Edit Connection dialog has:
| Field | |
|---|---|
| Name, Host | Required. The host has to be reachable from inside the backend container, not from your browser. |
| WebQuery Port, Use HTTPS | Default port 10080. TeamSpeak's HTTPS interface defaults to 10443; switching HTTPS on does not change the port — see WebQuery over HTTPS. |
| API Key | Optional. Without one only the music bots and what runs over the voice connection work, and the pages that need WebQuery are hidden. When editing, a blank field keeps the stored key; Remove the API key takes it away. |
| Dashboard Ping Target | Optional; what the Dashboard's ping measures instead of the host. |
| Record history | Whether this connection's user counts, bandwidth and ping are recorded for Statistics → History. On by default. |
| Record who joins | Whether the Connection Journal records who joins its virtual servers. On by default. |
| SSH Port, SSH User, SSH Password | Optional; default port 10022. For event triggers, the Query Console's live events, the Files page and the icon picker — see Getting Started. Stored encrypted; when editing, they show (unchanged). |
Bot Identity gives bot flows a ServerQuery login of their own, so their actions appear under a name of their own in TeamSpeak's logs; if flow actions fail with "out of scope", Fix Permissions in the same dialog reissues its key (Tips and Pitfalls). Deleting a connection asks first, and the bots linked to it stop working.
Settings → Restart lets you restart this application's own containers on a schedule — a cheap way to keep a long-running deployment healthy, because it clears accumulated state and reconnects everything cleanly. It never restarts your TeamSpeak server.
-
Restart Backend and Restart Sidecar are separate switches, both off by default; switch on only what your setup has (the sidecar is only restarted when the backend knows its address,
SIDECAR_URL). - Time (default 04:00) and Days (all of them by default). The time is the clock of the backend container — compose does not set a time zone for it, so it normally runs in UTC. Save it with the button below; nothing changes until you do.
- How it works: at the set time the backend (and/or the sidecar) shuts down cleanly and Docker's
restart: unless-stoppedpolicy, which both shipped compose files set, starts it again. A backend that is not run by something that restarts it would simply stay down. Because the process shuts down cleanly on the signal, the query session and the music bots disconnect properly and reconnect on their own right after (this is the fix described in the Changelog under Reliability).
Settings → Update Status compares your running backend, frontend and sidecar against the latest on each component's main branch and shows, per component, the current and latest version and whether an update is available. The three are versioned independently, so it's normal for one to have an update while the others don't. It only tells you — nothing updates automatically. Actually applying an update is a deployment step, covered in Deployment → Updating. A GitHub token for the check is described under Configuration.
User accounts, roles, per-server access and active-session revocation are on the Users and Roles page.
Settings → Debug has three logging switches that take effect immediately, no restart or environment variable needed — ServerQuery, Voice Bot and Rank Check logging. What they're for and how to read the output is in Troubleshooting. Leave them off during normal operation; they can produce a lot of output.
Under them sits a Danger Zone with two buttons, Reset Radio Station IDs and Reset Music Bot IDs. They do not reset a counter and nothing else: the first deletes every radio station on every server connection, the second stops and deletes every music bot on every server connection, so that the next one starts again at #1. Each asks for confirmation first, and neither can be undone.
Settings → Network shows how the request that opened the page reached the backend: every address in the chain (the connection itself, then the X-Forwarded-For entries, nearest to the backend first), which of them the backend takes for you, the TRUST_PROXY setting in effect, and the number of proxies that would make the first public address the visitor. Use it behind a reverse proxy to check that the backend sees the real visitor and not your proxy; what to set and why is in Deployment.
Connection Journal (sidebar, Security) lists every sign-in event at the web interface and every client that joins a TeamSpeak server - successful or not, with the address it came from - and lets you sort, filter, see it by address, ban an address, set how long the journal is kept and empty it. It is described on its own page: Connection Journal.
Age-restricted and members-only video needs YouTube cookies, managed under Settings → YouTube — see Music Bots.
Settings → WebGui has a switch for the small notice about what the interface keeps in the browser. It is on by default, applies to everyone including the login page, and is purely informational. What it says, what it is not, and what your own hosting adds are on Privacy and Hosting.
v0.8, last edited 14.10.2026
Getting started
Using the app
Running it
When something is odd
Contributing