Launch the gateway component#

Debian packages#

Edit and remove the .example extension for /etc/slidge/conf.d/common.conf and /etc/slidge/superduper.conf.example. Enable and start the service with sudo systemctl enable --now slidge@superduper.service.



The guide describes how to run slidge as containers with podman, but it is also possible to set it up differently, for instance by using the OS’s python install, a virtual environment, pipx, …


Make sure that podman is installed on your system, e.g. apt install podman (debian, ubuntu…). Container images are available on

Let’s launch the container:

podman run --network=host \   # so the xmpp server is available on localhost
  --name=slidge-superduper \  # human-friendly name for the container
  --detach \                  # detach from tty \
  --secret=secret \           # secret used to connect, as per the XMPP server config  # JID of the gateway component, as per the XMPP server config

Congrats, users of your XMPP server can now chat with their buddies on the “Super Duper Chat Network”, yoohoo!

Check the logs via podman logs slidge-superduper

Data persistence#

To keep data persistent between stop/starts (which will inevitably happen during updates), add volumes to your container. By default, all persistent data slidge needs is in /var/lib/slidge inside the container, so use --volume /where/you/want:/var/lib/slidge as a podman run argument.

As a systemd unit#


The following instructions have been tested with debian bullseye. For other distros, they might need to be adapted.

Create a system user named slidge (as root):

adduser --system slidge --home /var/lib/slidge

Give permission for this user to use subuids and subgids (as root, required for podman):

usermod --add-subuids 200000-201000 --add-subgids 200000-201000 slidge


Check that the 200000-201000 range does not overlap with any other user’s range in /etc/subuid and /etc/subgid

Enable lingering for this user so that its systemd user services start on startup (as root):

loginctl enable-linger $(id -u slidge)

Create slidge conf files, to avoid passing everything as CLI arguments (as root):

mkdir -p /etc/slidge/conf.d/
echo "" > /etc/slidge/conf.d/common.conf
echo "" > /etc/slidge/conf.d/superduper.conf
echo "secret=a_real_secret" >> /etc/slidge/conf.d/superduper.conf

Temporarily login as the system user (as root):

su slidge --shell /bin/bash

Create the podman container (as the slidge user):

podman run --rm --detach \
   --name superduper \                          # friendly name of the conainter
   --volume /var/lib/slidge:/var/lib/slidge \   # persistent data
   --volume /etc/slidge:/etc/slidge \           # config files
   --log-driver journald \                      # logs in journalctl
   --label "io.containers.autoupdate=image" \   # auto-update via podman dedicated mechanism
   --network=host \                             # make localhost available \
   --config=/etc/slidge/superduper.conf         # specific config file for this gateway

Create, launch and enable automatic launch of the container as a systemd service (as the slidge user):

export XDG_RUNTIME_DIR=/run/user/$(id -u)
podman generate systemd --new --name superduper > $HOME/.config/systemd/user/superduper.service
systemctl --user daemon-reload
systemctl --user enable --now superduper

Logs can be examined with journalctl CONTAINER_NAME=superduper