Skip to content

Configuration

Jadarit reads a single config.toml. Every setting has a default, so a missing file or a missing key still works, and the first run writes a fully commented file you can edit.

InstallPath
Debian package/etc/jadarit/config.toml
Containermounted into the data volume
Run from a directoryconfig.toml beside the binary

Set MS_CONFIG to override the path. MS_API_TOKEN overrides the API token from the environment, so a secret need never be written to the file.

Changing settings through the dashboard or PUT /api/v1/settings writes this file. Changes take effect on restart, and the API says so rather than pretending they applied live.

Where the server listens and where it keeps its data.

KeyTypeDefaultDescription
http_addrString"0.0.0.0:9001"HTTP bind address for API + dashboard + HLS.
rtmp_portu161935RTMP ingest port.
data_dirString"data"Root of vod/live/ads data directories.
api_tokenString""Bearer token for the control API. Empty = auth disabled. The MS_API_TOKEN environment variable overrides this.
trusted_proxiesVec<String>["127.0.0.1/32", "::1/128"]Addresses or CIDR ranges of reverse proxies and CDNs in front of the server. Only from these is X-Forwarded-For believed: anyone else could claim any address, and a viewer’s address is what ad servers target and count.

SRT ingest: the UDP port encoders push to, how long to wait for lost packets, and optional encryption.

KeyTypeDefaultDescription
enabledbooltrueAccept SRT publishers. On by default, like RTMP.
portu168890UDP port encoders connect to. 8890 is the port most SRT users already know from other media servers.
latency_msu32120How long, in milliseconds, to wait for lost packets to be resent before giving up on them. Higher survives worse networks at the cost of delay; the publisher’s own setting is used if it asks for more.
passphraseString""Encrypt SRT with this passphrase (10 to 79 characters). Empty means unencrypted. When set, publishers that do not use it are refused.

Built-in HTTPS. Most deployments put a reverse proxy or tunnel in front instead.

KeyTypeDefaultDescription
enabledboolfalseServe HTTPS on https_addr in addition to HTTP.
https_addrString"0.0.0.0:9443"Address to serve HTTPS on when enabled is true.
cert_pathString""PEM paths. Both empty + enabled → a self-signed certificate is generated under <data_dir>/tls/ on startup.
key_pathString""Private key matching cert_path. Leave both empty to self-sign.

Segment length and how much of the live window is kept.

KeyTypeDefaultDescription
segment_secsf642.0Target segment duration (seconds). Cuts happen at the first keyframe past this mark.
window_segmentsusize20Segments kept in the live playlist window.
sessionsbooltrueGive every HLS viewer a session of their own: a player asking for a stream’s playlist is redirected once to a per-viewer address. Needed to count HLS viewers and to choose ads per viewer.

How uploaded VOD and ad assets are normalised so they play out cleanly.

KeyTypeDefaultDescription
presetString"veryfast"x264 preset for offline mezzanine conditioning.
crfu820Quality target. Lower is better and larger; 18 to 23 is the useful range.
maxrate_kbpsu326000Ceiling on the conditioned video bitrate.
audio_bitrate_kbpsu32160Bitrate for the conditioned audio track.

WebRTC networking. Set these to serve viewers beyond the local network.

KeyTypeDefaultDescription
public_ipString""Public IP advertised as an additional ICE candidate. Set this (plus a router port-forward for the UDP range) to serve viewers outside the LAN. Empty = LAN-only.
udp_port_minu160UDP port range for WebRTC sessions. 0/0 = ephemeral (LAN only); a fixed range is what you forward on the router.
udp_port_maxu160Top of that range. Forward min..=max on the router.
bwe_initial_mbpsu3210Bandwidth-estimation budget in Mbps. The pacer drains at current × 1.1.
bwe_current_mbpsu328Working budget the pacer drains against. Keep it above the real media bitrate or the pacer starves the stream.
send_buffer_videousize4096Packet ring shared by pacing queue and NACK history.

Defaults for server-side ad insertion.

KeyTypeDefaultDescription
default_break_secsf6410.0Default ad-break length when the API request omits duration_secs.

Log level, destination, rotation, and the in-memory buffer the dashboard reads.

KeyTypeDefaultDescription
levelString"info"Level filter, e.g. info, debug, or per-module info,ms_egress=debug. RUST_LOG overrides this when set.
directoryString"data/logs"Where log and crash files go. Relative paths are relative to the working directory; empty disables file logging (stdout only).
jsonboolfalseWrite JSON lines instead of human-readable text. Useful when shipping logs into a collector; harder to read by eye.
retention_daysu6414Delete rotated log files older than this many days. 0 keeps them all.
ring_capacityusize2000How many recent events to keep in memory for the dashboard viewer.

Licence renewal. Monthly and yearly licences fetch their renewal from jadarit.com; set renew_url to an empty string for an air-gapped install.

KeyTypeDefaultDescription
renew_urlString"https://jadarit.com/pay/licence/renew"Where to fetch a renewed licence. Only a licence with an expiry ever checks in, sending nothing but its licence id; trials and lifetime licences never contact anything. On by default so a customer who renews from the reminder email has nothing else to do. Empty disables the check entirely, which is what an air-gapped install wants.