All apps · 0 apps
nicotine-plus
Docker app from Selfhosters
Overview
Readme
View on GitHubNicotine-plus-docker
Nicotine+ is an open source graphical client for the Soulseek peer-to-peer network. As per their website, Nicotine+ aims to be a pleasant, Free and Open Source (FOSS) alternative to the official Soulseek client, providing additional functionality while keeping current with the Soulseek protocol.
Supported Architectures
| Architecture | Available | Tag |
|---|---|---|
| x86-64 | ✅ | latest |
| arm64 | ✅ | latest |
Application Setup
The application can be accessed at:
https://yourhost:6081/(recommended)http://localhost:6080/(only works from the same machine)
⚠️ Breaking Change (Selkies migration): The underlying Selkies web client now uses the WebCodecs API for video decoding, which requires a Secure Context. This means plain HTTP access only works via
localhost. For remote access, you must use HTTPS on port6081or place the container behind a reverse proxy with HTTPS termination (e.g. SWAG). A self-signed certificate is automatically generated on first run.
Usage
Here are some example snippets to help you get started creating a container.
docker-compose (recommended)
---
services:
nicotine-plus:
image: ghcr.io/fletchto99/nicotine-plus-docker:latest
container_name: nicotine-plus
environment:
- PUID=1000
- PGID=1000
volumes:
- /path/to/data:/config
- /path/to/downloads:/data/downloads
- /path/to/incomplete:/data/incomplete_downloads
ports:
- 6080:6080
- 6081:6081
- 2234-2239:2234-2239
shm_size: "1gb"
restart: unless-stopped
docker cli
docker run -d \
--name=nicotine-plus \
-e PUID=1000 \
-e PGID=1000 \
-p 6080:6080 \
-p 6081:6081 \
-p 2234-2239:2234-2239 \
-v /path/to/data:/config \
-v /path/to/downloads:/data/downloads \
-v /path/to/incomplete:/data/incomplete_downloads \
--shm-size="1gb" \
--restart unless-stopped \
ghcr.io/fletchto99/nicotine-plus-docker:latest
Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 3001:3001 would expose port 3001 from inside the container to be accessible from the host's IP on port 3001 outside the container.
| Parameter | Function |
|---|---|
-p 6080 |
Nicotine+ desktop gui (HTTP, localhost only). |
-p 6081 |
Nicotine+ desktop gui (HTTPS, recommended for remote access). |
-p 2234-2239 |
Nicotine+ P2P ports. |
-e PUID=1000 |
for UserID - see below for explanation. |
-e PGID=1000 |
for GroupID - see below for explanation. |
-v /config |
Where Nicotine+ should store configuration and queue data. |
-v /data/downloads |
Where Nicotine+ should store complete downloads. |
-v /data/incomplete_downloads |
Where Nicotine+ should store data during the download process. |
--shm-size=1gb |
Recommended for stability. |
Optional run configurations
| Variable | Description |
|---|---|
--device /dev/dri:/dev/dri |
Mount a GPU into the container for hardware acceleration. Only Open Source drivers are supported (Intel, AMDGPU, Radeon, ATI, Nouveau). |
Options in all Selkies-based GUI containers
This container is based on LinuxServer's Docker Baseimage Selkies which means there are additional environment variables and run configurations to enable or disable specific functionality.
Optional environment variables
| Variable | Description |
|---|---|
NICOTINE_CLI |
Additional CLI flags to pass to Nicotine+. |
CUSTOM_PORT |
Internal port the container listens on for HTTP if it needs to be swapped from the default 6080. |
CUSTOM_HTTPS_PORT |
Internal port the container listens on for HTTPS if it needs to be swapped from the default 6081. |
CUSTOM_USER |
HTTP Basic auth username, abc is default. |
PASSWORD |
HTTP Basic auth password, abc is default. If unset there will be no auth. |
SUBFOLDER |
Subfolder for the application if running a subfolder reverse proxy, need both slashes IE /subfolder/. |
TITLE |
The page title displayed on the web browser, default Nicotine+. |
LC_ALL |
Set the language for the container IE fr_FR.UTF-8. |
Security Hardening
This container ships with sensible security defaults enabled:
| Variable | Default | Description |
|---|---|---|
HARDEN_DESKTOP |
true |
Disables sudo, terminal emulators, and xdg-open/exo-open. Also hides file transfer and app launcher UI in Selkies sidebar. |
HARDEN_OPENBOX |
true |
Disables close button, right-click/middle-click menus, and escape keybinds. Automatically enables RESTART_APP so Nicotine+ restarts if closed. |
These can be overridden by setting the variable to false in your environment if needed.
Additional hardening options
| Variable | Description |
|---|---|
SELKIES_MASTER_TOKEN |
Enables token-based authentication instead of basic auth. See Selkies docs for details. |
SELKIES_CLIPBOARD_ENABLED |
Set to false to disable clipboard sync between host and container. |
Note: The built-in basic auth (
PASSWORD) is a convenience feature, not a robust security mechanism. For internet-facing deployments, place the container behind a reverse proxy with proper authentication (e.g. SWAG).
Environment variables from files (Docker secrets)
You can set any environment variable from a file by using a special prepend FILE__.
As an example:
-e FILE__PASSWORD=/run/secrets/mysecretpassword
Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.
Umask for running applications
For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting.
Keep in mind umask is not chmod it subtracts from permissions based on its value it does not add. Please read up here before asking for support.
User / Group Identifiers
When using volumes (-v flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance PUID=1000 and PGID=1000, to find yours use id user as below:
$ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
Support Info
- Shell access whilst the container is running:
docker exec -it nicotine-plus /bin/bash - To monitor the logs of the container in realtime:
docker logs -f nicotine-plus - container version number
docker inspect -f '{{ index .Config.Labels "build_version" }}' nicotine-plus
- image version number
docker inspect -f '{{ index .Config.Labels "build_version" }}' ghcr.io/fletchto99/nicotine-plus-docker:latest
Building locally
The build verifies the Nicotine+ release archive against its upstream SHA-256 checksum before extracting it.
If you want to make local modifications to these images for development purposes or just to customize the logic:
git clone https://github.com/fletchto99/nicotine-plus-docker.git
cd nicotine-plus-docker
docker build \
--no-cache \
--pull \
--build-arg VERSION="$(cat .github/.current-release)" \
--build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
-t ghcr.io/fletchto99/nicotine-plus-docker:latest .
CI and release publishing
Pull requests run build checks and workflow linting, plus browser smoke tests on native AMD64 and ARM64 runners. Browser tests use Node.js 24.
Publishing builds each architecture once on a native runner with a shared UTC build timestamp and uploads the images to GHCR by digest. Both image digests must pass the smoke tests before the release tags are updated in GHCR and Docker Hub; the tested images are not rebuilt for publishing.
Scheduled weekly publishes bypass build caches and pull current base images to refresh installed dependencies.
Versions
- 17.09.26: - Migrated to Debian Trixie base (from Ubuntu Noble).
- 09.04.26: - Migrated to Ubuntu Noble base (from Arch Linux). Nicotine+ installed from official PPA.
- 02.04.26: - Migrated to baseimage-selkies (from baseimage-kasmvnc). Arch Linux base with Wayland support. Breaking: Remote HTTP access no longer works; use HTTPS (
:6081) or a reverse proxy instead (see Application Setup). - 19.07.23: - Initial release.
Categories
Download Statistics
Total Downloads Over Time
Related apps
Explore more like this
Explore allDetails
ghcr.io/fletchto99/nicotine-plus-docker:latestRuntime arguments
- Web UI
http://[IP]:[PORT:6080]- Network
bridge- Privileged
- false
Template configuration
- Target
- 6080
- Value
- 6080
- Target
- 2234
- Value
- 2234
- Target
- 2235
- Value
- 2235
- Target
- 2236
- Value
- 2236
- Target
- 2237
- Value
- 2237
- Target
- 2238
- Value
- 2238
- Target
- 2239
- Value
- 2239
- Target
- /data/downloads/completed
- Target
- /data/downloads/incomplete
- Target
- /data/share
- Target
- /config
- Value
- /mnt/user/appdata/nicotine-plus
Container Variable: PUID
- Default
- 99
Container Variable: PGID
- Default
- 100
Container Variable: UMASK
- Default
- 002