This is the first (and hopefully last!) release candidate for liquidsoap 2.4.0
!
This release includes several user-facing features intended at making user's life easier.
You can read a detailed presentation of these features here: https://www.liquidsoap.info/blog/2025-08-11-liquidsoap-2.4.0/
This release is recommended to any user who wants to get the latest feature and bugfixes.
To install via opam
:
git clone https://github.com/savonet/liquidsoap.git
cd liquidsoap/
git checkout v2.4.0-rc1
opam pin -n .
opam install liquidsoap
Full changelog:
2.4.0-rc1 (2025-08-16)
New:
Language:
- Allow destructing function arguments using the same patterns as for
variable assignment (#4562) - Enhanced labeled arguments syntax (#4526)
- Add warning when erasing top-level variables (#4518)
null
can now be used directly without having to callnull()
.
null(value)
calls are still valid and can be used to create
non-null values with nullable types. Calls tonull()
are marked
as deprecated (#4516)- Added
liquidsoap.script.path
that contains the path to the current
script's file, if available.
Core:
- BREAKING: Most callbacks have been moved to source methods and are now
executed asynchronously by default. See migration notes for all the
details. - BREAKING: Added new file-to-file external
decoder.add
API. This
makes it much easier and safer to write external decoders (#4531) - Deprecated
insert_metadata
, added defaultinsert_metadata
method on
every source (#4541) - Added client certificate support to
http.transport.tls
(#4589)
Utilities:
- Added
cron.parse
,cron.{add,remove}
and a cron thread
to allow registration of cron-like asynchronous tasks (#4579) - Added LUFS-based per-track loudness correction (#4545)
Changed:
Language:
- BREAKING: Error methods have been removed by default.
Useerror.methods
to get them! (#4537) - Make sure that
let { foo = gni } = v
assigns a value to
gni
but not tofoo
(#4561)
Core:
- Turned initial memory compaction on by default. This
has show to greatly reduce initial memory consumption. - Improved source and clock naming (#4497)
- Support for
ImageLib
has been removed. The library is not
maintained anymore and causes issues with dangling external
processes (#4595)
Utilities:
- Deprecated
replaygain
operator, introduced unified
normalize_track_gain
which works with both ReplayGain
and LUFS (#4545)
Fixed:
- Fixed issues with autocue
start_next
. This brings autocue's behavior
inline with its expectation but can change existing script's output (#4605) - Fix error when loading script path having non-ascii characters in them
(#4343) - Fix error with interactive variables (#4592, @myeungdev)
- Prevent concurrent reload and request fetch in playlists (#4316)
- Don't mark source as ready until their clock has started. (#4496)
- Fixed mutex deadlock caused by aggressive inlining (#4540)
- Fixed segfault when using SRT on windows (#4538)
- Fixed memleak in ffmpeg inline encoder (#4501)
- Fixed
tmp:
protocol logic (#4544)