Skip to content

Quick start

No need to clone the repo. Download the compose file and the example settings:

Terminal window
mkdir mendil && cd mendil
curl -fsSLO https://raw.githubusercontent.com/ulaski/mendil/main/docker-compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/ulaski/mendil/main/.env.example

Edit .env and set at least:

TS3CLIENT_LICENSE=accept # accepts the TeamSpeak client license, see Legal
TS3_HOST=ts.example.com # your server
TS3_SERVER_PASSWORD= # if your server has one

Then start it:

Terminal window
docker compose up -d
docker compose logs -f

The first start downloads the TeamSpeak client (~110 MB). Once you see connected to server, join Mendil’s channel and type !help.

Without Compose: a single docker run
Terminal window
docker run -d --name mendil --restart unless-stopped --shm-size 256m \
-e TS3CLIENT_LICENSE=accept \
-e TS3_HOST=ts.example.com \
-e TS3_SERVER_PASSWORD= \
-v mendil-data:/home/node/.ts3client \
-v mendil-client:/opt/ts3client \
ghcr.io/ulaski/mendil:latest

Add --platform linux/amd64 on an ARM machine.

From source
Terminal window
git clone https://github.com/ulaski/mendil.git
cd mendil
cp .env.example .env # then edit it
docker compose up -d --build
With the native engine

In docker-compose.yml, use the native image and drop what only Classic needs:

services:
mendil:
image: ghcr.io/ulaski/mendil:native
container_name: mendil
restart: unless-stopped
env_file: .env
volumes:
- ts3client-data:/home/node/.ts3client
volumes:
ts3client-data:

TS3CLIENT_LICENSE isn’t needed, because no TeamSpeak client is downloaded. Everything else in .env stays the same; if your .env sets VOICE_BACKEND=classic, remove that line.

From source, add a build section to the same service, so Compose builds the native image instead of downloading it:

build:
context: .
target: native

and start it with docker compose up -d --build.

Next: tell Mendil where your TeamSpeak server is if it runs on the same machine, and set up the channel.