This is the first release of the 2.4.x
release cycle! 🎉✨
This release includes several new features focuses on improving user's experience!
We have summarized the most important changes in our 2.4.0 blog post
This release has been carefully tested and does not include any major rewrite of the core components. Therefore, we highly recommend switching to it as soon as possible.
As usual, however, we recommend testing your script in a staging environment before pushing to production. Please report any regression or issues to us and we will work on it as soon as time allows.
Installation notes
opam
remains our favorite installation method. It makes it easier to install from any branch or compiler version and to only install the features that you need. If you do not need an optional feature, it's always better to disable it to prevent side-effects, bugs and etc. However,opam
installs liquidsoap in a local directory, which might not always be suitable.- If you are stuck with an old LTS release (anything before 2024 at this point), consider using docker` images!
- With debian packages, makes sure to also enable the deb-multimedia.org packages. These packages provide up-to date version of the libraries needed to run liquidsoap and also support for
libdfk-aac
inffmpeg
.
⚠️ Warning ⚠️
Assets in this release can be deleted. If you are looking for permanent links to release assets, please head over to https://github.com/savonet/liquidsoap-release-assets/releases
For more details about our release process, please checkout https://github.com/savonet/liquidsoap#release-details
OCaml 5.x
Switching to OCaml 5.x
has proven complicated to us due to some serious regressions in memory allocation. The experimental OxCaml
compiler has some fixes for these issues that are planned to be backported into the main OCaml
compiler.
Thus, we now provide ocaml-5.2.0-ox
builds to test this compiler. These should be considered suitable for production purposes.
If you feel like it, it would be great to test your script with these builds and report to us if you can confirm that memory usage with them is comparable or not with builds using the 4.14
compiler.
We are long overdue to a switch to the latest OCaml compiler to make sure that the collection of modules and packages we use to build liquidsoap stay up-to date so any help on this front would be greatly appreciated!
Full changelog
2.4.0 (2025-09-01)
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, @DelilahHoare)
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 concurrent inline encoders (#4638)
- 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) - Fixed dangling file descriptors with
file.*.stream
(#4639, reported by @limebar)