Jalv is a simple but fully featured LV2 host for Jack. It runs LV2 plugins and exposes their ports as Jack ports, essentially making any LV2 plugin function as a Jack application.

Jalv is a small program which is useful, but also intended to be an appropriate test host for plugin development. It runs plugins from the command line with no user interaction, is light enough to run in valgrind, and is capable of dumping all plugin to/from UI communication in a human readable format.

For testing with various host toolkits, there are several Jalv executables: jalv, jalv.gtk, jalv.gtkmm, and jalv.qt. The jalv and jalv.gtk programs are suitable for production use by users, the others are less complete and intended for developer testing only.


The latest version of Jalv is 1.4.6, released on August 08, 2014.



Jalv is developed and given away freely for the benefit of all. However, donations of appreciation for the considerable time and effort spent are appreciated:


30 thoughts on “Jalv

  1. Pingback: Jalv 1.0.0 | drobilla.net

  2. Pingback: Portable OpenGL Plugin UIs | drobilla.net

  3. Pingback: Jalv 1.2.0 | drobilla.net

  4. Pingback: LV2 plugin transport synchronisation | drobilla.net

  5. Pingback: Host-generated LV2 file choosers | drobilla.net

  6. Pingback: Jalv 1.4.0 | drobilla.net

  7. Pingback: OpenAV Productions | Pensieri Illimiti

      • It compiled, but no window is shown on start. There is a window in the dock (“not responding”). I guess it’s near working.

        • Same problem here. Block is caused bi zix_sem_wait jalv.c:map_ui. Commenting out that line makes it work for me like expected (but is no real solution, I know).

  8. Pingback: Jalv 1.4.4 | drobilla.net

  9. Jack session (and LADISH, because it supports JACK session) has this feature where it can tell the application to save its state in a particular location. Is Jalv able to save the LV2 plugin settings in a location specified by the session manager and then load them later, from a location specified from the session manager?

  10. Hi David ; I’m currently working with a DAW that is only LADSPA and (GNU/Linux) VST compatible. I told the author about LV2, and he seemed to say that LV2 implementation is very complicated. Could Jalv be a starting point towards said implementation?

    • It deliberately serves as a simple example host, anyway. The core of it, jalv.c, is less than 1000 LOC, and that includes all the Jack client stuff. Some of the fancier things are a little bit more work, but you can find simple relatively reusable implementations of the most important stuff in Jalv as well.

      The currently poor design of http://lv2plug.in/ tends to suggest that implementing LV2 is much harder than it actually is.

  11. Pingback: Jalv 1.4.6 | drobilla.net

  12. Hello. I can’t found answers in help.

    1. How I can set specific JACK-client name for Jalv instance?
    2. There’s any way to control knobs of Jalv instance in realtime (from another application, not by my bare hands)?

  13. Would it be too hard to implement a prompt during execution where you cloud enter changes to values the same way you do with the -c SYM=VAL option?

  14. Hello! Thanks for jalv!

    I have the following question (tried to create ticket but still waiting for confirmation email…):
    I’m a beginner and tried to translate the eg-amp example to Rust. It’s working, but I used valgrind and saw that there where still errors of the type:

    stefan@vb:~$ valgrind –leak-check=yes jalv http://test.org/test
    JACK Name: Simple Amp
    ==575== Syscall param write(buf) points to uninitialised byte(s)
    ==575== at 0x4E47DAD: ??? (syscall-template.S:81)
    ==575== by 0x56A5524: Jack::JackClientSocket::Write(void*, int) (JackSocket.cpp:233)
    ==575== Address 0xffefff573 is on thread 1’s stack
    ==575== in frame #3, created by Jack::JackGenericClientChannel::ClientOpen(char const*, int, int, int*, int*, int*, int*) (JackGenericClientChannel.cpp:110)

    and similar. I couldn’t find out what’s wrong, but then I tried using the original “eg-amp” instead of my plugin, and saw that it shows the same errors! How can I get rid of those?

    I’m using Kubuntu 15.04 on virtualbox (just for learning to program, not to make music…), with
    jalv 1.4.6
    lv2-dev 1.10.0
    lv2-examples 1.10.0.

    Thanks for your help, Stefan

  15. Is there a way to set receive midi channel by command line?
    The examples on the man-pages indicate -c for volume controI have a need when performing live to set the midi channel for the plugin (when running Jack) so I can change midi channel from my keyboard.

    Any help would be greatly appreciated


  16. Hello, I’m struggling with the –preset= option. What shape a preset URI have? I do know where my preset lives (~/.lv2/amsynth_MyPreset.preset.lv2/MyPreset.ttl) but I have no idea how to tell jalv.gtk about it in “Preset URI” form.

    • It depends on the preset, a preset can have any URI.

      One you saved to the file system likely has no permanent URI, so you can use the file URI, e.g. file:///home/whoever/.lv2/whatever.preset.lv2/whatever.ttl

Leave a Reply

Your email address will not be published. Required fields are marked *