Migration from V2
Neko v3 accepts many V2 configuration options as deprecated aliases, which are mapped to their V3 equivalents. When both forms are set, the V3 option takes precedence. The V2 API and client compatibility layer have been removed; clients must use the V3 API.
Docker Images
Previously, neko was available primarily on Dockerhub as m1k1o/neko. While it stays as an option there, now the primary location is ghcr.io/m1k1o/neko.
ARM images were previously available as an flavor e.g. m1k1o/neko:arm-firefox or ghcr.io/m1k1o/neko/arm-firefox. Now, the ARM images are available as multi-arch images under the same tags as the amd64 images., e.g. ghcr.io/m1k1o/neko/firefox.
All applications available in the V2 images are also available in the V3 images. See the Docker Images documentation for more details.
Configuration
V3 continues to accept the V2 configuration aliases listed below. This does not enable or restore the V2 API.
The configuration in Neko V3 has been structured differently compared to V2. The V3 configuration is more modular and allows for more flexibility. The V3 configuration is split into multiple sections, each section is responsible for a specific part of the application. This allows for better organization and easier management of the configuration.
In order to migrate from V2 to V3, you need to update the configuration to the new format. The following table shows the mapping between the V2 and V3 configuration options.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_LOGS=true | NEKO_LOG_DIR=/var/log/neko, V3 allows specifying the log directory |
NEKO_CERT | NEKO_SERVER_CERT |
NEKO_KEY | NEKO_SERVER_KEY |
NEKO_BIND | NEKO_SERVER_BIND |
NEKO_PROXY | NEKO_SERVER_PROXY |
NEKO_STATIC | NEKO_SERVER_STATIC |
NEKO_PATH_PREFIX | NEKO_SERVER_PATH_PREFIX |
NEKO_CORS | NEKO_SERVER_CORS |
NEKO_LOCKS | NEKO_SESSION_LOCKED_CONTROLS and NEKO_SESSION_LOCKED_LOGINS, V3 allows separate locks for controls and logins |
NEKO_IMPLICIT_CONTROL | NEKO_SESSION_IMPLICIT_HOSTING |
NEKO_CONTROL_PROTECTION | NEKO_SESSION_CONTROL_PROTECTION |
NEKO_HEARTBEAT_INTERVAL | NEKO_SESSION_HEARTBEAT_INTERVAL |
NEKO_FILE_TRANSFER_ENABLED | NEKO_FILETRANSFER_ENABLED |
NEKO_FILE_TRANSFER_PATH | NEKO_FILETRANSFER_DIR |
See the V3 configuration options. For file transfer, see the File Transfer Plugin.
WebRTC Video
See the V3 configuration options for the WebRTC Video.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_DISPLAY | NEKO_CAPTURE_VIDEO_DISPLAY and NEKO_DESKTOP_DISPLAY, consider using DISPLAY env variable if both should be the same |
NEKO_VIDEO_CODEC | NEKO_CAPTURE_VIDEO_CODEC |
NEKO_AV1=true deprecated | NEKO_CAPTURE_VIDEO_CODEC=av1 |
NEKO_H264=true deprecated | NEKO_CAPTURE_VIDEO_CODEC=h264 |
NEKO_VP8=true deprecated | NEKO_CAPTURE_VIDEO_CODEC=vp8 |
NEKO_VP9=true deprecated | NEKO_CAPTURE_VIDEO_CODEC=vp9 |
NEKO_VIDEO | NEKO_CAPTURE_VIDEO_PIPELINE, V3 allows multiple video pipelines |
NEKO_VIDEO_BITRATE | removed, use custom pipeline instead |
NEKO_HWENC | removed, use custom pipeline instead |
NEKO_MAX_FPS | removed, use custom pipeline instead |
V2 video settings map to a single V3 video pipeline. The V3 client renders the cursor separately from the video stream.
WebRTC Audio
See the V3 configuration options for the WebRTC Audio.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_DEVICE | NEKO_CAPTURE_AUDIO_DEVICE |
NEKO_AUDIO_CODEC | NEKO_CAPTURE_AUDIO_CODEC |
NEKO_G722=true deprecated | NEKO_CAPTURE_AUDIO_CODEC=g722 |
NEKO_OPUS=true deprecated | NEKO_CAPTURE_AUDIO_CODEC=opus |
NEKO_PCMA=true deprecated | NEKO_CAPTURE_AUDIO_CODEC=pcma |
NEKO_PCMU=true deprecated | NEKO_CAPTURE_AUDIO_CODEC=pcmu |
NEKO_AUDIO | NEKO_CAPTURE_AUDIO_PIPELINE |
NEKO_AUDIO_BITRATE | removed, use custom pipeline instead |
Broadcast
See the V3 configuration options for the Broadcast.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_BROADCAST_PIPELINE | NEKO_CAPTURE_BROADCAST_PIPELINE |
NEKO_BROADCAST_URL | NEKO_CAPTURE_BROADCAST_URL |
NEKO_BROADCAST_AUTOSTART | NEKO_CAPTURE_BROADCAST_AUTOSTART |
Desktop
See the V3 configuration options for the Desktop.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_SCREEN | NEKO_DESKTOP_SCREEN |
Authentication
See the V3 configuration options for the Authentication.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_PASSWORD | NEKO_MEMBER_MULTIUSER_USER_PASSWORD with NEKO_MEMBER_PROVIDER=multiuser |
NEKO_PASSWORD_ADMIN | NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD with NEKO_MEMBER_PROVIDER=multiuser |
The V2 password settings map to the Multi-user provider.
V2 clients might not be compatible with any other authentication provider than the multiuser.
WebRTC
See the V3 configuration options for the WebRTC.
| V2 Configuration | V3 Configuration |
|---|---|
NEKO_NAT1TO1 | NEKO_WEBRTC_NAT1TO1 |
NEKO_TCPMUX | NEKO_WEBRTC_TCPMUX |
NEKO_UDPMUX | NEKO_WEBRTC_UDPMUX |
NEKO_ICELITE | NEKO_WEBRTC_ICELITE |
NEKO_ICESERVERS or NEKO_ICESERVER | NEKO_WEBRTC_ICESERVERS_FRONTEND and NEKO_WEBRTC_ICESERVERS_BACKEND, V3 allows separate ICE servers for frontend and backend |
NEKO_IPFETCH | NEKO_WEBRTC_IP_RETRIEVAL_URL |
NEKO_EPR | NEKO_WEBRTC_EPR |
Full V2 Configuration Reference
Here is a full list of V2 configuration options that remain available as deprecated aliases in Neko V3.
- YAML Configuration File
- Environment Variables
- Command Line Arguments
You can set the following environment variables in your docker-compose.yaml file or in your shell environment.
# save logs to file (boolean)
NEKO_LOGS=false
# path to the SSL cert used to secure the neko server (string)
NEKO_CERT=<string>
# path to the SSL key used to secure the neko server (string)
NEKO_KEY=<string>
# address/port/socket to serve neko (string)
NEKO_BIND=<string>
# enable reverse proxy mode (boolean)
NEKO_PROXY=false
# path to neko client files to serve (string)
NEKO_STATIC=<string>
# path prefix for HTTP requests (string)
NEKO_PATH_PREFIX=<string>
# list of allowed origins for CORS (strings)
NEKO_CORS=<comma-separated list of strings>
# resources, that will be locked when starting (control, login) (strings)
NEKO_LOCKS=<comma-separated list of strings>
# if enabled members can gain control implicitly (boolean)
NEKO_IMPLICIT_CONTROL=false
# control protection means, users can gain control only if at least one admin is in the room (boolean)
NEKO_CONTROL_PROTECTION=false
# heartbeat interval in seconds (int)
NEKO_HEARTBEAT_INTERVAL=120
# enable file transfer feature (boolean)
NEKO_FILE_TRANSFER_ENABLED=false
# path to use for file transfer (string)
NEKO_FILE_TRANSFER_PATH=<string>
# XDisplay to capture (string)
NEKO_DISPLAY=<string>
# video codec to be used (string)
NEKO_VIDEO_CODEC=<string>
# DEPRECATED: use video_codec (boolean)
NEKO_AV1=false
# DEPRECATED: use video_codec (boolean)
NEKO_H264=false
# DEPRECATED: use video_codec (boolean)
NEKO_VP8=false
# DEPRECATED: use video_codec (boolean)
NEKO_VP9=false
# video codec parameters to use for streaming (string)
NEKO_VIDEO=<string>
# video bitrate in kbit/s (int)
NEKO_VIDEO_BITRATE=0
# use hardware accelerated encoding (string)
NEKO_HWENC=<string>
# maximum fps delivered via WebRTC, 0 is for no maximum (int)
NEKO_MAX_FPS=0
# audio device to capture (string)
NEKO_DEVICE=<string>
# audio codec to be used (string)
NEKO_AUDIO_CODEC=<string>
# DEPRECATED: use audio_codec (boolean)
NEKO_G722=false
# DEPRECATED: use audio_codec (boolean)
NEKO_OPUS=false
# DEPRECATED: use audio_codec (boolean)
NEKO_PCMA=false
# DEPRECATED: use audio_codec (boolean)
NEKO_PCMU=false
# audio codec parameters to use for streaming (string)
NEKO_AUDIO=<string>
# audio bitrate in kbit/s (int)
NEKO_AUDIO_BITRATE=0
# custom gst pipeline used for broadcasting, strings {hostname} {url} {device} {display} will be replaced (string)
NEKO_BROADCAST_PIPELINE=<string>
# a default default URL for broadcast streams, can be disabled/changed later by admins in the GUI (string)
NEKO_BROADCAST_URL=<string>
# automatically start broadcasting when neko starts and broadcast_url is set (boolean)
NEKO_BROADCAST_AUTOSTART=false
# default screen resolution and framerate (string)
NEKO_SCREEN=<string>
# password for connecting to stream (string)
NEKO_PASSWORD=<string>
# admin password for connecting to stream (string)
NEKO_PASSWORD_ADMIN=<string>
# sets a list of external IP addresses of 1:1 (D)NAT and a candidate type for which the external IP address is used (strings)
NEKO_NAT1TO1=<comma-separated list of strings>
# single TCP mux port for all peers (int)
NEKO_TCPMUX=0
# single UDP mux port for all peers (int)
NEKO_UDPMUX=0
# configures whether or not the ice agent should be a lite agent (boolean)
NEKO_ICELITE=false
# describes a single STUN and TURN server that can be used by the ICEAgent to establish a connection with a peer (strings)
NEKO_ICESERVER=<comma-separated list of strings>
# describes a single STUN and TURN server that can be used by the ICEAgent to establish a connection with a peer (string)
NEKO_ICESERVERS=<string>
# automatically fetch IP address from given URL when nat1to1 is not present (string)
NEKO_IPFETCH=<string>
# limits the pool of ephemeral ports that ICE UDP connections can allocate from (string)
NEKO_EPR=<string>
You can list the following command line arguments using neko serve --help.
# save logs to file (boolean)
--logs false
# path to the SSL cert used to secure the neko server (string)
--cert <string>
# path to the SSL key used to secure the neko server (string)
--key <string>
# address/port/socket to serve neko (string)
--bind <string>
# enable reverse proxy mode (boolean)
--proxy false
# path to neko client files to serve (string)
--static <string>
# path prefix for HTTP requests (string)
--path_prefix <string>
# list of allowed origins for CORS (strings)
--cors <comma-separated list of strings>
# resources, that will be locked when starting (control, login) (strings)
--locks <comma-separated list of strings>
# if enabled members can gain control implicitly (boolean)
--implicit_control false
# control protection means, users can gain control only if at least one admin is in the room (boolean)
--control_protection false
# heartbeat interval in seconds (int)
--heartbeat_interval 120
# enable file transfer feature (boolean)
--file_transfer_enabled false
# path to use for file transfer (string)
--file_transfer_path <string>
# XDisplay to capture (string)
--display <string>
# video codec to be used (string)
--video_codec <string>
# DEPRECATED: use video_codec (boolean)
--av1 false
# DEPRECATED: use video_codec (boolean)
--h264 false
# DEPRECATED: use video_codec (boolean)
--vp8 false
# DEPRECATED: use video_codec (boolean)
--vp9 false
# video codec parameters to use for streaming (string)
--video <string>
# video bitrate in kbit/s (int)
--video_bitrate 0
# use hardware accelerated encoding (string)
--hwenc <string>
# maximum fps delivered via WebRTC, 0 is for no maximum (int)
--max_fps 0
# audio device to capture (string)
--device <string>
# audio codec to be used (string)
--audio_codec <string>
# DEPRECATED: use audio_codec (boolean)
--g722 false
# DEPRECATED: use audio_codec (boolean)
--opus false
# DEPRECATED: use audio_codec (boolean)
--pcma false
# DEPRECATED: use audio_codec (boolean)
--pcmu false
# audio codec parameters to use for streaming (string)
--audio <string>
# audio bitrate in kbit/s (int)
--audio_bitrate 0
# custom gst pipeline used for broadcasting, strings {hostname} {url} {device} {display} will be replaced (string)
--broadcast_pipeline <string>
# a default default URL for broadcast streams, can be disabled/changed later by admins in the GUI (string)
--broadcast_url <string>
# automatically start broadcasting when neko starts and broadcast_url is set (boolean)
--broadcast_autostart false
# default screen resolution and framerate (string)
--screen <string>
# password for connecting to stream (string)
--password <string>
# admin password for connecting to stream (string)
--password_admin <string>
# sets a list of external IP addresses of 1:1 (D)NAT and a candidate type for which the external IP address is used (strings)
--nat1to1 <comma-separated list of strings>
# single TCP mux port for all peers (int)
--tcpmux 0
# single UDP mux port for all peers (int)
--udpmux 0
# configures whether or not the ice agent should be a lite agent (boolean)
--icelite false
# describes a single STUN and TURN server that can be used by the ICEAgent to establish a connection with a peer (strings)
--iceserver <comma-separated list of strings>
# describes a single STUN and TURN server that can be used by the ICEAgent to establish a connection with a peer (string)
--iceservers <string>
# automatically fetch IP address from given URL when nat1to1 is not present (string)
--ipfetch <string>
# limits the pool of ephemeral ports that ICE UDP connections can allocate from (string)
--epr <string>
You can create a /etc/neko/neko.yaml file with the following configuration options.
# save logs to file (boolean)
logs: false
# path to the SSL cert used to secure the neko server (string)
cert: <string>
# path to the SSL key used to secure the neko server (string)
key: <string>
# address/port/socket to serve neko (string)
bind: <string>
# enable reverse proxy mode (boolean)
proxy: false
# path to neko client files to serve (string)
static: <string>
# path prefix for HTTP requests (string)
path_prefix: <string>
# list of allowed origins for CORS (strings)
cors: [ <string> ]
# resources, that will be locked when starting (control, login) (strings)
locks: [ <string> ]
# if enabled members can gain control implicitly (boolean)
implicit_control: false
# control protection means, users can gain control only if at least one admin is in the room (boolean)
control_protection: false
# heartbeat interval in seconds (int)
heartbeat_interval: 120
# enable file transfer feature (boolean)
file_transfer_enabled: false
# path to use for file transfer (string)
file_transfer_path: <string>
# XDisplay to capture (string)
display: <string>
# video codec to be used (string)
video_codec: <string>
# DEPRECATED: use video_codec (boolean)
av1: false
# DEPRECATED: use video_codec (boolean)
h264: false
# DEPRECATED: use video_codec (boolean)
vp8: false
# DEPRECATED: use video_codec (boolean)
vp9: false
# video codec parameters to use for streaming (string)
video: <string>
# video bitrate in kbit/s (int)
video_bitrate: 0
# use hardware accelerated encoding (string)
hwenc: <string>
# maximum fps delivered via WebRTC, 0 is for no maximum (int)
max_fps: 0
# audio device to capture (string)
device: <string>
# audio codec to be used (string)
audio_codec: <string>
# DEPRECATED: use audio_codec (boolean)
g722: false
# DEPRECATED: use audio_codec (boolean)
opus: false
# DEPRECATED: use audio_codec (boolean)
pcma: false
# DEPRECATED: use audio_codec (boolean)
pcmu: false
# audio codec parameters to use for streaming (string)
audio: <string>
# audio bitrate in kbit/s (int)
audio_bitrate: 0
# custom gst pipeline used for broadcasting, strings {hostname} {url} {device} {display} will be replaced (string)
broadcast_pipeline: <string>
# a default default URL for broadcast streams, can be disabled/changed later by admins in the GUI (string)
broadcast_url: <string>
# automatically start broadcasting when neko starts and broadcast_url is set (boolean)
broadcast_autostart: false
# default screen resolution and framerate (string)
screen: <string>
# password for connecting to stream (string)
password: <string>
# admin password for connecting to stream (string)
password_admin: <string>
# sets a list of external IP addresses of 1:1 (D)NAT and a candidate type for which the external IP address is used (strings)
nat1to1: [ <string> ]
# single TCP mux port for all peers (int)
tcpmux: 0
# single UDP mux port for all peers (int)
udpmux: 0
# configures whether or not the ice agent should be a lite agent (boolean)
icelite: false
# describes a single STUN and TURN server that can be used by the ICEAgent to establish a connection with a peer (strings)
iceserver: [ <string> ]
# describes a single STUN and TURN server that can be used by the ICEAgent to establish a connection with a peer (string)
iceservers: <string>
# automatically fetch IP address from given URL when nat1to1 is not present (string)
ipfetch: <string>
# limits the pool of ephemeral ports that ICE UDP connections can allocate from (string)
epr: <string>
See the full V3 configuration reference for more details.
API
The V2 API compatibility layer has been removed. Migrate clients to the V3 API; the V2 /ws endpoint and V2 HTTP endpoints are no longer available.
Limitations
In v2, locks and muted users were managed using a simple map that tracked who set the lock and what was locked. In v3, locks are now implemented as setting options and no longer store the session_id of the user who applied the lock. As a result, if a client refreshes the page or reconnects, the lock information is lost, and the user who set the lock is displayed as Somebody.
Currently, the v3 has no native support for pipeline generation, meaning that the user has to manually specify the pipeline for video and audio if he wants to customize it. The v2 had a simple built-in support for setting the video bitrate, fps, audio bitrate, and hardware encoding. Since the introduction of multiple video pipelines in v3, this feature has been removed.