This is the third bugfix release of Liquidsoap 2.4.x.
This release has been extensively tested and should be rock solid. We still recommend trying it on your staging environment before rolling out to production.
This release is intended to be the last of the 2.4.x branch. We've already started working on 2.5.x and there are some exciting things in store!
⚠️ Note for Ubuntu Noble users: this is the last release that includes binary packages for Ubuntu Noble. To keep up with the latest FFmpeg releases, we need to move forward to more recent Ubuntu versions.
New features
- Raw string syntax
{|...|}and{id|...|id}: a new string literal form where no escape sequences or string interpolation (#{}) are processed. This is especially useful in automated or user-facing setups where external input (filenames, URLs, user-provided values) is embedded directly in a script — with regular strings, a value containing#{...}would be silently evaluated as code. Raw strings prevent this entirely, making scripts that handle untrusted input safer and more predictable.
Notable fixes
- Audio glitches with crossfade: Two separate issues caused clicks or audio gaps when using cue points and crossfades together — both are now resolved.
- HLS fMP4 audio+video: Multiplexed HLS streams using fragmented MP4 containers were broken; this is now fixed.
- Playlist initialization slowdown: A performance regression that made large playlists slow to start is gone.
- Process I/O reliability: Several edge cases around reading stdout/stderr and handling
EINTRsignal interruptions have been addressed, making external process integration more robust. - Sequence resource cleanup: The
sequenceoperator now releases sources it no longer needs early, reducing resource usage in scripts with many fallback sources. - Better error messages:
Invalid_valueerrors now include a call stack, making it much easier to track down where an invalid value originated at runtime.
📢 6th Liquidshop Workshop — Friday, 29 May 2026!
We're gearing up for the 6th Liquidshop workshop and we'd love to see you there! If you'd like to share what you've built or how you use Liquidsoap, please consider contributing a talk — and everyone is welcome to attend. We love connecting with the community!
2.4.3 (2026-04-11)
New:
- Added raw string syntax
{|...|}and{id|...|id}for strings
with no escape sequences (#4959) - Added optional
replay_metadataandadd_new_trackto
thebufferoperator to replay latest metadata and insert
track marks when the buffer becomes available again. - Added support for array options in ffmpeg filters (#4799)
Changed:
- DEPRECATED telnet/server
request.on_aircommand is enabled when
settings.request.deprecated_on_air_metadataistrue. - Add back missing
"status"telnet/server command for outputs. - Reduced default buffer size throughout the app to improve memory efficiency
(#4919) - Refactored XML parsing to be type-driven, support optional fields with
custom element name aliases (#4926, #4927) - Removed
self_syncparameter frominput.jackandoutput.jack(#5017) - Make posix build target paths configurable via env vars (#5046)
Fixed:
sequencenow releases unused sources early, reducing resource usage when
earlier sources in the sequence are no longer needed (#5082)- Improved error messages:
Invalid_valueerrors now include the call stack
to help pinpoint the origin of the invalid value (#5090) - Fixed clicks/glitches when combining
liq_cue_inwithliq_fade_indue tofade.infiring too late on new tracks (#5019) - Prevent crashing when getting out-of-bound mark in
split_frame(#5054) - Fixed clock source detach when clock is running (#5051)
- Fixed
??operator type inference in conditional branches (#4922) - Prevent double nullable types (#4925)
- Make active
stereotoolreally be active.. (#4882) - Fixed
fMP4HLS support for audio+video streams (#4841) - Fixed crossfade clocks inconsistencies leading to weird caching audio glitches (#4851)
- Fixed first frame of new track getting lost when crossfading with
fade.induration is set to0.(#4887) - Fixed crash with concurrent
stop/startoperations (#4849) - Fixed metadata leak from underlying ffmpeg
oggdemuxer inffmpegstream
decoder (#4848) - Fixed performance regression when initializing
playlist(#4913) - Make sure that we read all stdout/stderr before considering a process closed. (#4918, #4934, #4941)
- Fixed
EINTRsignal interruption in process I/O, read, and flush operations (#4947, #4949, #4951) - Improved string binary detection heuristics by checking for valid UTF-8 and max length; added
settings.string.max_printable_lengthconfiguration key - Make sure
output.filedoes not create files without data (#4899) - Fixed content type propagation through free type variables (#4988)
- Improved runtime error reporting by wrapping low-level exceptions into proper
runtime errors (#5004) - Fixed
syslogsupport and added it to build configuration detection (#5009) - Fixed sub-clock accumulation causing gradual CPU growth over time (#5032)