github savonet/liquidsoap v2.4.0-rc1
Liquidsoap 2.4.0-rc1

latest releases: v2.4.0, rolling-release-2.4.x
18 days ago

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 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)

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 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)

Don't miss a new liquidsoap release

NewReleases is sending notifications on new releases.