github savonet/liquidsoap v2.4.0
Liquidsoap 2.4.0

latest release: rolling-release-v2.4.x
one day ago

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 in ffmpeg.

⚠️ 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 call null().
    null(value) calls are still valid and can be used to create
    non-null values with nullable types. Calls to null() 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 default insert_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.
    Use error.methods to get them! (#4537)
  • Make sure that let { foo = gni } = v assigns a value to
    gni but not to foo (#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)

Don't miss a new liquidsoap release

NewReleases is sending notifications on new releases.