selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Liquidsoap logo

Self-host Liquidsoap

v2.4.6

Scripting language for audio and video streaming

ReleaseOpen SourceGPL-2.0
Updatedlast week
LanguageOCaml
Setup difficultyAdvanced
Stars
1 742
Docker
savonet/liquidsoap
Install with Linux

What is Liquidsoap?

Liquidsoap is a powerful scripting language designed for creating and managing audio and video streams. It is widely used for internet radio stations and web TV, offering a flexible language with operators for playlist management, live input handling, transcoding, and output to streaming servers like Icecast, Shoutcast, YouTube Live, and protocols including RTMP, SRT, and HLS. The software includes built-in FFmpeg integration for encoding, decoding, and filtering. It can be self-hosted via Docker images, native packages (Debian, Ubuntu, Fedora, Alpine), OPAM, or built from source. Major users include Radio France (77 stations), AzuraCast, and LibreTime.

Should you self-host Liquidsoap?

Liquidsoap scores 62/100 on selfhost.directory (how scoring works) and ranks #9 of 54 in Media Streaming. It has 1 742 GitHub stars.

It shipped 9 stable releases in the past year. The latest, rolling-release-v2.5.x, came out on 28 October 2026. New versions land roughly every 2 weeks.

Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is GPL-2.0-licensed and written mostly in OCaml.

Its closest alternative on selfhost.directory is Invidious (81/100, 25 798 stars). It scores higher overall, so compare the two before you pick. See Liquidsoap vs Invidious side by side.

Features

  • Audio and video streaming
  • Crossfading and transitions
  • FFmpeg Integration
  • Harbor input for live sources
  • Live input handling
  • Metadata handling
  • Multiple output protocols
  • Playlist Management
  • Prometheus Metrics
  • Request-based sources
  • Scripting language for streams
  • Speech and sound synthesis
  • Telnet/UNIX socket control

Liquidsoap README

How to install Liquidsoap

Install Liquidsoap with Linux

curl -fsSL https://repo.liquidsoap.info/setup.sh | sudo sh dnf install liquidsoap

Official repositories for current Fedora release on x86_64/aarch64, requires RPM Fusion for FFmpeg codecs

How to configure Liquidsoap

  • LIQUIDSOAP_CACHE_DIR/var/cache/liquidsoapSystem cache directory

    System cache directory

  • LIQUIDSOAP_CAMOMILE_DIR/usr/share/liquidsoap/camomileCamomile charset data directory

    Camomile charset data directory

Liquidsoap releases & version history

FAQ

What to do when Liquidsoap crashes with a thread exception?

This usually indicates a bug (report on GitHub) or a user error that wasn't caught cleanly. Check surrounding log messages for the cause.

How to fix PulseAudio interference with ALSA input/output?

Either bypass PulseAudio by creating a custom ALSA device in /etc/asound.conf, or disable PulseAudio by setting autospawn=no in /etc/pulse/client.conf and killing the process.

Where does Liquidsoap store temporary files?

On Unix: TMPDIR environment variable or /tmp. On Windows: TEMP environment variable or current directory.

Why does encoding blank/silence cause listener disconnections?

Pure silence compresses too effectively, resulting in almost no data sent, which causes clients to disconnect. Use a non-silent jingle or synthesis sources like noise() instead.

Why are listeners disconnected at the end of every track?

Some media players (like VLC) don't properly support Ogg/Vorbis streams and treat track boundaries as end-of-file. Workaround: drop metadata and track marks using source.drop.metadata_track_marks.

What causes 'We must catchup x.xx!' errors?

This means a clock is falling behind, typically caused by CPU overload from too much encoding/processing, or network lag to an Icecast server.

What does a type error mean in Liquidsoap?

Type errors indicate mismatched types in your script, such as passing an integer where a float is expected, using a video source where audio is required, or incorrect argument order/labels.

More in Audio

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…