Skip to main content
Version: v3

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 ConfigurationV3 Configuration
NEKO_LOGS=trueNEKO_LOG_DIR=/var/log/neko, V3 allows specifying the log directory
NEKO_CERTNEKO_SERVER_CERT
NEKO_KEYNEKO_SERVER_KEY
NEKO_BINDNEKO_SERVER_BIND
NEKO_PROXYNEKO_SERVER_PROXY
NEKO_STATICNEKO_SERVER_STATIC
NEKO_PATH_PREFIXNEKO_SERVER_PATH_PREFIX
NEKO_CORSNEKO_SERVER_CORS
NEKO_LOCKSNEKO_SESSION_LOCKED_CONTROLS and NEKO_SESSION_LOCKED_LOGINS,
V3 allows separate locks for controls and logins
NEKO_IMPLICIT_CONTROLNEKO_SESSION_IMPLICIT_HOSTING
NEKO_CONTROL_PROTECTIONNEKO_SESSION_CONTROL_PROTECTION
NEKO_HEARTBEAT_INTERVALNEKO_SESSION_HEARTBEAT_INTERVAL
NEKO_FILE_TRANSFER_ENABLEDNEKO_FILETRANSFER_ENABLED
NEKO_FILE_TRANSFER_PATHNEKO_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 ConfigurationV3 Configuration
NEKO_DISPLAYNEKO_CAPTURE_VIDEO_DISPLAY and NEKO_DESKTOP_DISPLAY,
consider using DISPLAY env variable if both should be the same
NEKO_VIDEO_CODECNEKO_CAPTURE_VIDEO_CODEC
NEKO_AV1=true deprecatedNEKO_CAPTURE_VIDEO_CODEC=av1
NEKO_H264=true deprecatedNEKO_CAPTURE_VIDEO_CODEC=h264
NEKO_VP8=true deprecatedNEKO_CAPTURE_VIDEO_CODEC=vp8
NEKO_VP9=true deprecatedNEKO_CAPTURE_VIDEO_CODEC=vp9
NEKO_VIDEONEKO_CAPTURE_VIDEO_PIPELINE, V3 allows multiple video pipelines
NEKO_VIDEO_BITRATEremoved, use custom pipeline instead
NEKO_HWENCremoved, use custom pipeline instead
NEKO_MAX_FPSremoved, 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 ConfigurationV3 Configuration
NEKO_DEVICENEKO_CAPTURE_AUDIO_DEVICE
NEKO_AUDIO_CODECNEKO_CAPTURE_AUDIO_CODEC
NEKO_G722=true deprecatedNEKO_CAPTURE_AUDIO_CODEC=g722
NEKO_OPUS=true deprecatedNEKO_CAPTURE_AUDIO_CODEC=opus
NEKO_PCMA=true deprecatedNEKO_CAPTURE_AUDIO_CODEC=pcma
NEKO_PCMU=true deprecatedNEKO_CAPTURE_AUDIO_CODEC=pcmu
NEKO_AUDIONEKO_CAPTURE_AUDIO_PIPELINE
NEKO_AUDIO_BITRATEremoved, use custom pipeline instead

Broadcast​

See the V3 configuration options for the Broadcast.

V2 ConfigurationV3 Configuration
NEKO_BROADCAST_PIPELINENEKO_CAPTURE_BROADCAST_PIPELINE
NEKO_BROADCAST_URLNEKO_CAPTURE_BROADCAST_URL
NEKO_BROADCAST_AUTOSTARTNEKO_CAPTURE_BROADCAST_AUTOSTART

Desktop​

See the V3 configuration options for the Desktop.

V2 ConfigurationV3 Configuration
NEKO_SCREENNEKO_DESKTOP_SCREEN

Authentication​

See the V3 configuration options for the Authentication.

V2 ConfigurationV3 Configuration
NEKO_PASSWORDNEKO_MEMBER_MULTIUSER_USER_PASSWORD with NEKO_MEMBER_PROVIDER=multiuser
NEKO_PASSWORD_ADMINNEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD with NEKO_MEMBER_PROVIDER=multiuser

The V2 password settings map to the Multi-user provider.

Limitation

V2 clients might not be compatible with any other authentication provider than the multiuser.

WebRTC​

See the V3 configuration options for the WebRTC.

V2 ConfigurationV3 Configuration
NEKO_NAT1TO1NEKO_WEBRTC_NAT1TO1
NEKO_TCPMUXNEKO_WEBRTC_TCPMUX
NEKO_UDPMUXNEKO_WEBRTC_UDPMUX
NEKO_ICELITENEKO_WEBRTC_ICELITE
NEKO_ICESERVERS or NEKO_ICESERVERNEKO_WEBRTC_ICESERVERS_FRONTEND and NEKO_WEBRTC_ICESERVERS_BACKEND,
V3 allows separate ICE servers for frontend and backend
NEKO_IPFETCHNEKO_WEBRTC_IP_RETRIEVAL_URL
NEKO_EPRNEKO_WEBRTC_EPR

Full V2 Configuration Reference​

Here is a full list of V2 configuration options that remain available as deprecated aliases in Neko V3.

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.