<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>drobilla.net - Lilv</title><link href="https://drobilla.net/" rel="alternate"/><link href="https://drobilla.net/category/lilv/feed/atom" rel="self"/><id>https://drobilla.net/</id><updated>2026-02-10T18:47:00-05:00</updated><entry><title>Lilv 0.26.4</title><link href="https://drobilla.net/2026/02/10/lilv-0-26-4.html" rel="alternate"/><published>2026-02-10T18:47:00-05:00</published><updated>2026-02-10T18:47:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2026-02-10:/2026/02/10/lilv-0-26-4.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.26.4.tar.xz"&gt;Lilv 0.26.4&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add clang nullability annotations&lt;/li&gt;
&lt;li&gt;Address new warnings in clang and clang-tidy 21&lt;/li&gt;
&lt;li&gt;Fix default LV2 path on cross-compiled Windows builds&lt;/li&gt;
&lt;li&gt;Fix loading of duplicate bundles with equivalent versions&lt;/li&gt;
&lt;li&gt;Fix potential crash when UIs have multiple types or binaries&lt;/li&gt;
&lt;li&gt;Use consistent quoting and punctuation in log messages&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.26.2</title><link href="https://drobilla.net/2025/11/25/lilv-0-26-2.html" rel="alternate"/><published>2025-11-25T19:49:00-05:00</published><updated>2025-11-25T19:49:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2025-11-25:/2025/11/25/lilv-0-26-2.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.26.2.tar.xz"&gt;Lilv 0.26.2&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Actually reload files if bundles are unloaded then reloaded&lt;/li&gt;
&lt;li&gt;Add support for loading xsd:float literals, "INF", and "NaN"&lt;/li&gt;
&lt;li&gt;Avoid warning about non-existent entries in LV2_PATH&lt;/li&gt;
&lt;li&gt;Fix crash when duplicate plugins are discovered&lt;/li&gt;
&lt;li&gt;Fix lilv_node_is_literal() with booleans&lt;/li&gt;
&lt;li&gt;Refine command line tool interfaces and documentation&lt;/li&gt;
&lt;li&gt;lv2bench: Add support for common features and options&lt;/li&gt;
&lt;li&gt;lv2bench: Use more realistic real-time scheduling&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.26.0</title><link href="https://drobilla.net/2025/11/12/lilv-0-26-0.html" rel="alternate"/><published>2025-11-12T19:15:00-05:00</published><updated>2025-11-12T19:15:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2025-11-12:/2025/11/12/lilv-0-26-0.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.26.0.tar.xz"&gt;Lilv 0.26.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add header warnings test&lt;/li&gt;
&lt;li&gt;Add option to control indexing overhead for subject queries&lt;/li&gt;
&lt;li&gt;Avoid over-use of yielding meson options&lt;/li&gt;
&lt;li&gt;Cache LANG value and add option to override it&lt;/li&gt;
&lt;li&gt;Fix Python tests&lt;/li&gt;
&lt;li&gt;Fix build with dynmanifest support&lt;/li&gt;
&lt;li&gt;Fix loading plugins that haven't been loaded yet as state&lt;/li&gt;
&lt;li&gt;Fix loading plugins with invalid lv2:appliesTo properties as state&lt;/li&gt;
&lt;li&gt;Fix potential memory leak in lilv_world_load_plugin_classes()&lt;/li&gt;
&lt;li&gt;Fix potential memory leak in lilv_world_set_option()&lt;/li&gt;
&lt;li&gt;Gracefully ignore and warn about non-directories in LV2_PATH&lt;/li&gt;
&lt;li&gt;Improve loading performance when many plugin versions are found&lt;/li&gt;
&lt;li&gt;Improve performance when loading and deleting state&lt;/li&gt;
&lt;li&gt;Only consider manifest data when discovering related presets/etc&lt;/li&gt;
&lt;li&gt;Print a warning when a property unexpectedly has several values&lt;/li&gt;
&lt;li&gt;Reduce temporary node allocations during query operations&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv “Object Index” Option Revised</title><link href="https://drobilla.net/2025/11/12/lilv-object-index-option-revised.html" rel="alternate"/><published>2025-11-12T13:58:00-05:00</published><updated>2025-11-12T13:58:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2025-11-12:/2025/11/12/lilv-object-index-option-revised.html</id><content type="html">&lt;p&gt;My previous post, &lt;a href="https://drobilla.net/2025/09/29/improving-lv2-discovery-performance.html"&gt;“Improving LV2 Discovery Performance”&lt;/a&gt;, described adding an option to &lt;a href="https://drobilla.net/software/lilv/"&gt;lilv&lt;/a&gt; that controls whether an additional index is maintained for loaded LV2 data.
While testing those changes for release, I discovered a few things (like &lt;a href="https://git.open-music-kontrollers.ch/~hp/lv2lint"&gt;lv2lint&lt;/a&gt;) that break without the index, which convinced me that disabling it by default wasn't the right decision.&lt;/p&gt;
&lt;p&gt;So, I'm instead enabling it by default, which avoids this “break by default” situation.
The downside is that hosts will need to add code in order to enjoy the performance improvements.
To make this change as simple as possible, I also made &lt;code&gt;lilv_world_set_option&lt;/code&gt; accept a null value to disable boolean options, so most hosts can simply add this line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;lilv_world_set_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;world&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LILV_OPTION_OBJECT_INDEX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This requires the new version, but the same change can be made without bumping the required version by avoiding the niceties:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;LilvNode&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;false_node&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lilv_new_bool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;world&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;lilv_world_set_option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;world&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://drobilla.net/ns/lilv#object-index&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;false_node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;lilv_node_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;false_node&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This will log a warning about the unsupported option on older versions, but otherwise have no effect.&lt;/p&gt;</content><category term="misc"/><category term="Hacking"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/><category term="RDF"/></entry><entry><title>Improving LV2 Discovery Performance</title><link href="https://drobilla.net/2025/09/29/improving-lv2-discovery-performance.html" rel="alternate"/><published>2025-09-29T10:25:00-04:00</published><updated>2025-09-29T10:25:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2025-09-29:/2025/09/29/improving-lv2-discovery-performance.html</id><content type="html">&lt;p&gt;LV2 plugins (and other data, like presets) are discovered by parsing &lt;a href="https://www.w3.org/TR/turtle/"&gt;Turtle&lt;/a&gt; files installed in various bundle directories.
If the host only needs to know &lt;em&gt;which&lt;/em&gt; things are installed, then only &lt;code&gt;manifest.ttl&lt;/code&gt; files need to be loaded.
That takes only a fraction of a second (60 ms on this machine, which has 897 plugins installed), but if the host needs more information (like the plugin's label or what ports it has), then the data files need to be loaded as well, which can take several seconds.
The parser (from &lt;a href="https://drobilla.net/software/serd/"&gt;serd&lt;/a&gt;) is very fast, so the overwhelming majority of this time is spent inserting data into a model.&lt;/p&gt;
&lt;p&gt;I was recently doing some work on &lt;a href="https://drobilla.net/software/lilv/"&gt;lilv&lt;/a&gt; related to discovery, and got sidetracked into investigating how much of this overhead could be eliminated.
Quite a bit, as it turns out, but before explaining how, I'll give a brief summary of the relevant fundamentals so people who don't spend their days in the triple mines can understand what I'm talking about.&lt;/p&gt;
&lt;p&gt;LV2 data is written in the &lt;a href="https://www.w3.org/TR/turtle/"&gt;Turtle&lt;/a&gt; syntax, which can have a lot of structure, but is ultimately just a shorthand for data that is simply a “flat” series of triples.
For example, the abbreviated Turtle&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;&amp;lt;http://example.org/amp&amp;gt;&lt;/span&gt;
    &lt;span class="kt"&gt;a&lt;/span&gt; &lt;span class="nn"&gt;lv2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;Plugin&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nn"&gt;doap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Amplifier&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;represents the two triples&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;&amp;lt;http://example.org/amp&amp;gt;&lt;/span&gt; &lt;span class="nn"&gt;rdf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;  &lt;span class="nn"&gt;lv2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;Plugin&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;&amp;lt;http://example.org/amp&amp;gt;&lt;/span&gt; &lt;span class="nn"&gt;doap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Amplifier&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;which describe a plugin with the name “Amplifier”.&lt;/p&gt;
&lt;p&gt;Two implications of this format are important to understand here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;All data is a set of triples which can be stored in some lexicographical order to be quickly searchable (for example, a set ordered subject-first can be used to quickly find triples that start with a given subject).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;All data can be streamed via a simple “flat” interface (for example a function with three parameters), and is trivial to inspect and/or filter on the fly (much like line-based text in POSIX pipelines).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The data may not be stored as a “literal” ordered set of triples (they're actually &lt;em&gt;quads&lt;/em&gt; in memory for one thing), but this simplified way of thinking about it is good enough for this explanation.&lt;/p&gt;
&lt;p&gt;Which order is best depends on the query.
For example (borrowing a bit of syntax from &lt;a href="https://www.w3.org/TR/sparql11-query/"&gt;SPARQL&lt;/a&gt; where &lt;code&gt;?name&lt;/code&gt; represents a query variable), if the host asks something like “what's the name of this plugin” or&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nl"&gt;&amp;lt;http://example.org/amp&amp;gt;&lt;/span&gt; &lt;span class="nn"&gt;doap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt; &lt;span class="nv"&gt;?name&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;then it needs to find triples that start with the given subject and predicate (&lt;code&gt;&amp;lt;http://example.org/amp&amp;gt;&lt;/code&gt; and &lt;code&gt;doap:name&lt;/code&gt;) to see what object (&lt;code&gt;?name&lt;/code&gt;) they have.
So, a subject-predicate-object or “SPO” index will work well.
If, however, the host asks something like “which things are plugins” or&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;?plugin&lt;/span&gt; &lt;span class="nn"&gt;rdf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt; &lt;span class="nn"&gt;lv2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nt"&gt;Plugin&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;then an SPO index doesn't help because there's no known subject to search for.
Most queries are like this, with either a subject or object wildcard (querying relatively “fixed” predicates is rare), so lilv has always had both an SPO and OPS index to support them.&lt;/p&gt;
&lt;p&gt;This is convenient, but twice the indexing means roughly twice the overhead.
The SPO index is the natural order used in the syntax, and supports most code (which mainly looks up properties of known things), but the OPS index isn't used so much.
Can it be removed entirely to speed things up?
It &lt;em&gt;is&lt;/em&gt; used for many important things, but conveniently, there's only a few fixed cases of those (like finding plugins as above).
So, we can take advantage of the streaming nature of the data to record this information while it's being read, instead of inserting it into an index only to query it out later.&lt;/p&gt;
&lt;p&gt;To do this in the implementation, I introduced the concept of a “skimmer”.
A skimmer inserts triples into a model as usual, but first “skims” them and records items of interest for later use.
For example, a skimmer checks whether a triple has &lt;code&gt;rdf:type lv2:Plugin&lt;/code&gt;, and if so, records the subject in a result set that stores only plugin URIs.
Some cases are a bit trickier, and actually pulling this off cleanly took quite an overhaul, but details aside, it turns out that this approach can be used to eliminate the OPS index entirely without losing any functionality.&lt;/p&gt;
&lt;p&gt;How much of an improvement does this make?
On this machine, using &lt;code&gt;lv2ls -n&lt;/code&gt; as a crude benchmark, the time goes from 3.11 to 1.72 seconds, or about a 45% improvement.
The memory consumption goes down a bit as well, from (even more crudely) a max-RSS of about 138 to 112 MiB, or about a 19% improvement (everything here is an average of three runs).
The improvement will vary dramatically based on what's installed, for example in some earlier tests with a different configuration I saw drops from around 7 to 4 seconds, but in general, not bad!&lt;/p&gt;
&lt;p&gt;Are there any downsides to this?
Yes, primarily two:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As with any significant change, there is the possibility of regression.
   Discovery is a little more restricted than before, so although I've done my best to test things, there is a possibility of things not being discovered anymore.
   Usually the fix for this is adding information to the manifest that should have been there anyway.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Though the implementation itself doesn't make queries that require the OPS index, hosts themselves can since lilv provides generic query functions.
   To support this, there's a new boolean option, &lt;code&gt;LILV_OPTION_OBJECT_INDEX&lt;/code&gt;, which can be used to enable or disable the OPS index.
   Since most hosts don't need it, I decided to disable this by default.
   That will be a regression for hosts that do, however, who need to explicitly opt in to the old behaviour by enabling this option.
   A warning is printed if a query will be slow because of the missing index, so it should at least be obvious if this happens.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These changes are now in the &lt;code&gt;main&lt;/code&gt; branch in git, which will be released soon, probably as version 0.26.0.&lt;/p&gt;</content><category term="misc"/><category term="Hacking"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/><category term="RDF"/></entry><entry><title>Lilv 0.24.26</title><link href="https://drobilla.net/2025/01/19/lilv-0-24-26.html" rel="alternate"/><published>2025-01-19T13:53:00-05:00</published><updated>2025-01-19T13:53:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2025-01-19:/2025/01/19/lilv-0-24-26.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.24.26.tar.xz"&gt;Lilv 0.24.26&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add lint option with project metadata and code quality tests&lt;/li&gt;
&lt;li&gt;Avoid use of VLAs in lv2apply&lt;/li&gt;
&lt;li&gt;Clean up and isolate platform-specific code&lt;/li&gt;
&lt;li&gt;Fix C++ test build on MacOS&lt;/li&gt;
&lt;li&gt;Fix library current_version on MacOS&lt;/li&gt;
&lt;li&gt;Fix test suite when TMPDIR has no trailing slash&lt;/li&gt;
&lt;li&gt;Fully separate library code from programs&lt;/li&gt;
&lt;li&gt;Improve const correctness&lt;/li&gt;
&lt;li&gt;Replace more platform-specific code with use of zix&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.24</title><link href="https://drobilla.net/2024/01/23/lilv-0-24-24.html" rel="alternate"/><published>2024-01-23T19:39:00-05:00</published><updated>2024-01-23T19:39:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2024-01-23:/2024/01/23/lilv-0-24-24.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.24.24.tar.xz"&gt;Lilv 0.24.24&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoid overriding state features passed by the host&lt;/li&gt;
&lt;li&gt;Fix null dereference when trying to load state from a missing file&lt;/li&gt;
&lt;li&gt;Fix potential null dereferences and conversion warnings&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.22</title><link href="https://drobilla.net/2023/10/22/lilv-0-24-22.html" rel="alternate"/><published>2023-10-22T20:14:00-04:00</published><updated>2023-10-22T20:14:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2023-10-22:/2023/10/22/lilv-0-24-22.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.24.22.tar.xz"&gt;Lilv 0.24.22&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow LILV_API to be defined by the user&lt;/li&gt;
&lt;li&gt;Clean up code&lt;/li&gt;
&lt;li&gt;Clean up inconsistent tool command line interfaces&lt;/li&gt;
&lt;li&gt;Convert man pages to mdoc&lt;/li&gt;
&lt;li&gt;Fix crash when plugins pass NULL to the LV2_State_Retrieve_Function&lt;/li&gt;
&lt;li&gt;Fix dependencies in pkg-config file&lt;/li&gt;
&lt;li&gt;Fix potential crash when writing state files fails&lt;/li&gt;
&lt;li&gt;Order plugin classes by URI&lt;/li&gt;
&lt;li&gt;Override pkg-config dependency within meson&lt;/li&gt;
&lt;li&gt;Remove junk files from documentation install&lt;/li&gt;
&lt;li&gt;Replace duplicated dox_to_sphinx script with sphinxygen dependency&lt;/li&gt;
&lt;li&gt;Switch to external zix dependency&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.20</title><link href="https://drobilla.net/2022/09/09/lilv-0-24-20.html" rel="alternate"/><published>2022-09-09T17:28:00-04:00</published><updated>2022-09-09T17:28:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2022-09-09:/2022/09/09/lilv-0-24-20.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.20.tar.xz"&gt;Lilv 0.24.20&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adopt REUSE machine-readable licensing standard&lt;/li&gt;
&lt;li&gt;Update project metadata&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.18</title><link href="https://drobilla.net/2022/08/12/lilv-0-24-18.html" rel="alternate"/><published>2022-08-12T22:15:00-04:00</published><updated>2022-08-12T22:15:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2022-08-12:/2022/08/12/lilv-0-24-18.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.24.18.tar.xz"&gt;Lilv 0.24.18&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow programs to be used from subproject&lt;/li&gt;
&lt;li&gt;Fix default LV2_PATH&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.16</title><link href="https://drobilla.net/2022/07/19/lilv-0-24-16.html" rel="alternate"/><published>2022-07-19T01:16:00-04:00</published><updated>2022-07-19T01:16:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2022-07-19:/2022/07/19/lilv-0-24-16.html</id><content type="html">&lt;p&gt;&lt;a href="https://download.drobilla.net/lilv-0.24.16.tar.xz"&gt;Lilv 0.24.16&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix fallback flock() detection on MacOS&lt;/li&gt;
&lt;li&gt;Switch to meson build system&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.14</title><link href="https://drobilla.net/2022/05/27/lilv-0-24-14.html" rel="alternate"/><published>2022-05-27T01:38:00-04:00</published><updated>2022-05-27T01:38:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2022-05-27:/2022/05/27/lilv-0-24-14.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.14.tar.bz2"&gt;Lilv 0.24.14&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix build issues with newer toolchains&lt;/li&gt;
&lt;li&gt;Fix unused parameter warnings&lt;/li&gt;
&lt;li&gt;Update zix tree&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.12</title><link href="https://drobilla.net/2021/01/07/lilv-0-24-12.html" rel="alternate"/><published>2021-01-07T21:46:00-05:00</published><updated>2021-01-07T21:46:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2021-01-07:/2021/01/07/lilv-0-24-12.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.12.tar.bz2"&gt;Lilv 0.24.12&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow connecting ports to structures in Python&lt;/li&gt;
&lt;li&gt;Fix potential memory error when joining filesystem paths&lt;/li&gt;
&lt;li&gt;Fix saving state with files on Windows&lt;/li&gt;
&lt;li&gt;Fix unlikely undefined behavior when saving state&lt;/li&gt;
&lt;li&gt;Fix writing state manifests on Windows&lt;/li&gt;
&lt;li&gt;Remove the need for a generated configuration header&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.10</title><link href="https://drobilla.net/2020/09/27/lilv-0-24-10.html" rel="alternate"/><published>2020-09-27T12:17:00-04:00</published><updated>2020-09-27T12:17:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2020-09-27:/2020/09/27/lilv-0-24-10.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.10.tar.bz2"&gt;Lilv 0.24.10&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix memory leaks in lv2bench&lt;/li&gt;
&lt;li&gt;Fix various minor warnings and other code quality issues&lt;/li&gt;
&lt;li&gt;Make lilv_world_get() use translations&lt;/li&gt;
&lt;li&gt;Split and clean up test suite&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.8</title><link href="https://drobilla.net/2020/04/26/lilv-0-24-8.html" rel="alternate"/><published>2020-04-26T15:55:00-04:00</published><updated>2020-04-26T15:55:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2020-04-26:/2020/04/26/lilv-0-24-8.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.8.tar.bz2"&gt;Lilv 0.24.8&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow passing strings for URIs in Python API when unambiguous&lt;/li&gt;
&lt;li&gt;Fix cases where incorrect translation is used&lt;/li&gt;
&lt;li&gt;Fix deleting state bundles loaded from the model&lt;/li&gt;
&lt;li&gt;Fix memory leak when dyn-manifest has no plugins (thanks Michael Fisher)&lt;/li&gt;
&lt;li&gt;Implement state:freePath feature&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.6</title><link href="https://drobilla.net/2019/11/10/lilv-0-24-6.html" rel="alternate"/><published>2019-11-10T21:39:00-05:00</published><updated>2019-11-10T21:39:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2019-11-10:/2019/11/10/lilv-0-24-6.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.6.tar.bz2"&gt;Lilv 0.24.6&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add more strict error detection when storing plugin state properties&lt;/li&gt;
&lt;li&gt;Add option to override LV2_PATH in applications&lt;/li&gt;
&lt;li&gt;Don't print errors when saving state if correct links already exist&lt;/li&gt;
&lt;li&gt;Fix GCC8 warnings&lt;/li&gt;
&lt;li&gt;Fix creating directories across drives on Windows&lt;/li&gt;
&lt;li&gt;Fix issues with loading state with saved files from the model&lt;/li&gt;
&lt;li&gt;Fix memory errors and Python 3.4+ compatibility in Python bindings&lt;/li&gt;
&lt;li&gt;Fix unit tests on Windows&lt;/li&gt;
&lt;li&gt;Make Python bindings more Pythonic&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.4</title><link href="https://drobilla.net/2018/07/22/lilv-0-24-4.html" rel="alternate"/><published>2018-07-22T18:42:00-04:00</published><updated>2018-07-22T18:42:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2018-07-22:/2018/07/22/lilv-0-24-4.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.4.tar.bz2"&gt;Lilv 0.24.4&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don't attempt to load remote or non-Turtle files&lt;/li&gt;
&lt;li&gt;Fix saving state when broken links are encountered&lt;/li&gt;
&lt;li&gt;Gracefully handle plugins with missing binary URIs&lt;/li&gt;
&lt;li&gt;Install Python bindings when configured without tests (thanks Clement Skau)&lt;/li&gt;
&lt;li&gt;Remove use of deprecated readdir_r&lt;/li&gt;
&lt;li&gt;lv2apply: Activate plugin before running&lt;/li&gt;
&lt;li&gt;lv2apply: Use default values when they are not nan&lt;/li&gt;
&lt;li&gt;lv2bench: Improve support for plugins with sequence ports&lt;/li&gt;
&lt;li&gt;lv2bench: Support running a single plugin given on the command line&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.2</title><link href="https://drobilla.net/2017/01/04/lilv-0-24-2.html" rel="alternate"/><published>2017-01-04T16:48:00-05:00</published><updated>2017-01-04T16:48:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2017-01-04:/2017/01/04/lilv-0-24-2.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.2.tar.bz2"&gt;Lilv 0.24.2&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix comparison of restored states with paths&lt;/li&gt;
&lt;li&gt;Fix saving state to paths that contain URI delimiters (#, ?, etc)&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.24.0</title><link href="https://drobilla.net/2016/09/20/lilv-0-24-0.html" rel="alternate"/><published>2016-09-20T02:24:00-04:00</published><updated>2016-09-20T02:24:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2016-09-20:/2016/09/20/lilv-0-24-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.24.0.tar.bz2"&gt;Lilv 0.24.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add LILV_URI_ATOM_PORT and LILV_URI_CV_PORT defines&lt;/li&gt;
&lt;li&gt;Add lilv_state_set_metadata() for adding state banks/comments/etc (based on patch from Hanspeter Portner)&lt;/li&gt;
&lt;li&gt;Add lilv_world_get_symbol()&lt;/li&gt;
&lt;li&gt;Add lv2apply utility for applying plugins to audio files&lt;/li&gt;
&lt;li&gt;Add new hand-crafted Pythonic bindings with full test coverage&lt;/li&gt;
&lt;li&gt;Check lv2:binary predicate for UIs&lt;/li&gt;
&lt;li&gt;Do not instantiate plugin when data fails to parse&lt;/li&gt;
&lt;li&gt;Fix crash when NULL predicate is passed to lilv_world_find_nodes()&lt;/li&gt;
&lt;li&gt;Fix crash when state contains non-POD properties&lt;/li&gt;
&lt;li&gt;Fix documentation installation&lt;/li&gt;
&lt;li&gt;Fix loading dyn-manifest from bundles with spaces in their path&lt;/li&gt;
&lt;li&gt;Fix outdated comment references to lilv_uri_to_path()&lt;/li&gt;
&lt;li&gt;Fix state file versioning&lt;/li&gt;
&lt;li&gt;Replace bundles if bundle with newer plugin version is loaded (based on patch from Robin Gareus)&lt;/li&gt;
&lt;li&gt;Support re-loading plugins&lt;/li&gt;
&lt;li&gt;Unload contained resources when bundle is unloaded&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.22.0</title><link href="https://drobilla.net/2015/10/08/lilv-0-22-0.html" rel="alternate"/><published>2015-10-08T19:39:00-04:00</published><updated>2015-10-08T19:39:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2015-10-08:/2015/10/08/lilv-0-22-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.22.0.tar.bz2"&gt;Lilv 0.22.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add lilv_file_uri_parse() for correct URI to path conversion&lt;/li&gt;
&lt;li&gt;Add lilv_free() for systems picky about such things&lt;/li&gt;
&lt;li&gt;Add lilv_node_get_path() for convenient file URI path access&lt;/li&gt;
&lt;li&gt;Add lilv_state_delete() for deleting user saved presets&lt;/li&gt;
&lt;li&gt;Add lilv_state_emit_port_values() for special port value handling&lt;/li&gt;
&lt;li&gt;Add lilv_state_get_uri()&lt;/li&gt;
&lt;li&gt;Configure based on compiler target OS for cross-compilation&lt;/li&gt;
&lt;li&gt;Expose lilv_world_load_specifications() and lilv_world_load_plugin_classes()&lt;/li&gt;
&lt;li&gt;Fix a few minor/unlikely memory errors&lt;/li&gt;
&lt;li&gt;Fix bindings for Python 3&lt;/li&gt;
&lt;li&gt;Fix creation of duplicate manifest entries when saving state&lt;/li&gt;
&lt;li&gt;Fix directory walking on some systems (thanks Matt Fischer)&lt;/li&gt;
&lt;li&gt;Fix lilv_realpath() on pre-POSIX-2008 systems&lt;/li&gt;
&lt;li&gt;Fix lilv_world_ask() to work with wildcards&lt;/li&gt;
&lt;li&gt;Fix loading files with spaces in their path&lt;/li&gt;
&lt;li&gt;Load discovered owl ontologies as specifications&lt;/li&gt;
&lt;li&gt;Minor documentation improvements&lt;/li&gt;
&lt;li&gt;Preserve absolute paths in state if no link directory is given&lt;/li&gt;
&lt;li&gt;Tolerate passing NULL to lilv_state_restore()&lt;/li&gt;
&lt;li&gt;Upgrade to waf 1.8.14&lt;/li&gt;
&lt;li&gt;Windows fixes (thanks John Emmas)&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.20.0</title><link href="https://drobilla.net/2014/08/08/lilv-0-20-0.html" rel="alternate"/><published>2014-08-08T22:21:00-04:00</published><updated>2014-08-08T22:21:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2014-08-08:/2014/08/08/lilv-0-20-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.20.0.tar.bz2"&gt;Lilv 0.20.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add convenient lilv_new_file_uri for creating file URIs&lt;/li&gt;
&lt;li&gt;Add lilv_world_unload_bundle() and lilv_world_unload_resource()&lt;/li&gt;
&lt;li&gt;Call lv2_lib_descriptor separately for different bundle paths (fix loading several dynamic plugins like Ingen at once)&lt;/li&gt;
&lt;li&gt;Don't load files multiple times if they are listed as rdfs:seeAlso for several plugins&lt;/li&gt;
&lt;li&gt;Fix issues with lilv_plugin_get_author_name and friends (thanks Filipe Coelho)&lt;/li&gt;
&lt;li&gt;Fix several minor memory leaks&lt;/li&gt;
&lt;li&gt;Fix use of lv2info -m and -p options to write plugin data (useful for porting plugins bridges with NASPRO)&lt;/li&gt;
&lt;li&gt;Improve test coverage&lt;/li&gt;
&lt;li&gt;Improved/working lv2_apply.py to apply plugin to a .wav (thanks Joe Button)&lt;/li&gt;
&lt;li&gt;Tolerate calling lilv_node_as_uri or lilv_node_as_blank on NULL&lt;/li&gt;
&lt;li&gt;Upgrade to waf 1.7.16&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.18.0</title><link href="https://drobilla.net/2014/01/04/lilv-0-18-0.html" rel="alternate"/><published>2014-01-04T21:06:00-05:00</published><updated>2014-01-04T21:06:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2014-01-04:/2014/01/04/lilv-0-18-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.18.0.tar.bz2"&gt;Lilv 0.18.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add lilv_port_get_node() for using world query functions with ports&lt;/li&gt;
&lt;li&gt;Add support for running plugins from Python by Kaspar Emanuel&lt;/li&gt;
&lt;li&gt;Allow lilv_state_restore() to be used without passing an instance, for restoring port values via a callback only&lt;/li&gt;
&lt;li&gt;Allow passing NULL port_class to lilv_plugin_get_port_by_designation&lt;/li&gt;
&lt;li&gt;Call GetProcAddress with correct calling convention on Windows&lt;/li&gt;
&lt;li&gt;Clean up after test suite so multiple runs are successful&lt;/li&gt;
&lt;li&gt;Fix unlikely memory leak in lilv_plugin_instantiate()&lt;/li&gt;
&lt;li&gt;Support denoting latency ports with lv2:designation lv2:latency&lt;/li&gt;
&lt;li&gt;lilvmm.hpp: Add wrappers for UI API&lt;/li&gt;
&lt;li&gt;lv2info: Don't display invalid control maxes and defaults (patch from Robin Gareus)&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.16.0</title><link href="https://drobilla.net/2013/02/18/lilv-0-16-0.html" rel="alternate"/><published>2013-02-18T21:43:00-05:00</published><updated>2013-02-18T21:43:00-05:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2013-02-18:/2013/02/18/lilv-0-16-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.16.0.tar.bz2"&gt;Lilv 0.16.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add lilv_nodes_merge()&lt;/li&gt;
&lt;li&gt;Add lilv_world_ask() for easily checking if a statement exists&lt;/li&gt;
&lt;li&gt;Add lilv_world_get() and lilv_port_get() for easily getting one value&lt;/li&gt;
&lt;li&gt;Add va_list variant of lilv_plugin_get_num_ports_of_class()&lt;/li&gt;
&lt;li&gt;Correctly depend on serd at build time (fix compilation in odd cases)&lt;/li&gt;
&lt;li&gt;Disable timestamps in HTML documentation for reproducible build&lt;/li&gt;
&lt;li&gt;Fail gracefully when lilv_state_new_from_string() is called on NULL&lt;/li&gt;
&lt;li&gt;Fix several plugin functions that failed to load data if called first&lt;/li&gt;
&lt;li&gt;Ignore state ports with no value instead of printing an error&lt;/li&gt;
&lt;li&gt;Make lilv_plugin_get_port_by_designation() return a const pointer&lt;/li&gt;
&lt;li&gt;Make state loading functions fall back to lv2:default for port values, so a plugin description can be loaded as default state&lt;/li&gt;
&lt;li&gt;Require a URI for lilv_state_to_string() and fail gracefully otherwise&lt;/li&gt;
&lt;li&gt;Support atom:supports in lilv_port_supports_event()&lt;/li&gt;
&lt;li&gt;Update to waf 1.7.8 and autowaf r90 (install docs to versioned directory)&lt;/li&gt;
&lt;li&gt;lilvmm.hpp: Add several missing methods&lt;/li&gt;
&lt;li&gt;lilvmm.hpp: Support varargs for Plugin::get_num_ports_of_class()&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.14.4</title><link href="https://drobilla.net/2012/08/23/lilv-0-14-4.html" rel="alternate"/><published>2012-08-23T05:38:00-04:00</published><updated>2012-08-23T05:38:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2012-08-23:/2012/08/23/lilv-0-14-4.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.14.4.tar.bz2"&gt;Lilv 0.14.4&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add lv2bench utility&lt;/li&gt;
&lt;li&gt;Add option to build utilities as static binaries&lt;/li&gt;
&lt;li&gt;Deprecate old flawed Lilv::Instance constructors&lt;/li&gt;
&lt;li&gt;Do not require a C++ compiler to build&lt;/li&gt;
&lt;li&gt;Fix crash when lv2info is run with an invalid URI argument&lt;/li&gt;
&lt;li&gt;Fix documentation for ui_type parameter of lilv_ui_is_supported()&lt;/li&gt;
&lt;li&gt;Fix various hyper-strict warnings&lt;/li&gt;
&lt;li&gt;Gracefully handle failure to save plugin state and print error message&lt;/li&gt;
&lt;li&gt;Make all 'zix' symbols private to avoid symbol clashes in static builds&lt;/li&gt;
&lt;li&gt;Reduce memory usage (per node)&lt;/li&gt;
&lt;li&gt;Simpler node implementation always backed by a SordNode&lt;/li&gt;
&lt;li&gt;Upgrade to waf 1.7.2&lt;/li&gt;
&lt;li&gt;lilvmm.hpp: Add Lilv::Instance::get_extension_data()&lt;/li&gt;
&lt;li&gt;lilvmm.hpp: Add Lilv::Instance::get_handle()&lt;/li&gt;
&lt;li&gt;lilvmm.hpp: Make Lilv::Instance handle features and failed instantiations&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.14.2</title><link href="https://drobilla.net/2012/04/19/lilv-0-14-2.html" rel="alternate"/><published>2012-04-19T20:11:00-04:00</published><updated>2012-04-19T20:11:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2012-04-19:/2012/04/19/lilv-0-14-2.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.14.2.tar.bz2"&gt;Lilv 0.14.2&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix dynmanifest support&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.14.0</title><link href="https://drobilla.net/2012/04/19/lilv-0-14-0.html" rel="alternate"/><published>2012-04-19T00:06:00-04:00</published><updated>2012-04-19T00:06:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2012-04-19:/2012/04/19/lilv-0-14-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.14.0.tar.bz2"&gt;Lilv 0.14.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add LilvState API for handling plugin state.  This makes it simple to save and restore plugin state both in memory and on disk, as well as save presets in a host-sharable way since the disk format is identical to the LV2 presets format.&lt;/li&gt;
&lt;li&gt;Add lilv_plugin_get_extension_data&lt;/li&gt;
&lt;li&gt;Add lilv_plugin_get_port_by_designation() and lilv_port_get_index() as an improved generic alternative to lilv_plugin_get_latency_port_index().&lt;/li&gt;
&lt;li&gt;Add lilv_plugin_get_project() and get author information from project if it is not given directly on the plugin.&lt;/li&gt;
&lt;li&gt;Add lilv_plugin_get_related to get resources related to plugins that are not directly rdfs:seeAlso linked (e.g. presets)&lt;/li&gt;
&lt;li&gt;Add lilv_world_load_resource for related resources (e.g. presets)&lt;/li&gt;
&lt;li&gt;Fix compilation on BSD&lt;/li&gt;
&lt;li&gt;Fix lilv_world_find_nodes to work with wildcard subjects&lt;/li&gt;
&lt;li&gt;Install man page to DATADIR (e.g. PREFIX/share/man, not PREFIX/man)&lt;/li&gt;
&lt;li&gt;Make Lilv::uri_to_path static inline (fix linking errors)&lt;/li&gt;
&lt;li&gt;Only load dynmanifest libraries once per bundle, not once per plugin&lt;/li&gt;
&lt;li&gt;Print presets in lv2info&lt;/li&gt;
&lt;li&gt;Remove locale smashing kludges and use new serd functions for converting nodes to/from numbers.&lt;/li&gt;
&lt;li&gt;Remove use of wordexp.&lt;/li&gt;
&lt;li&gt;Support compilation as C++ under MSVC++.&lt;/li&gt;
&lt;li&gt;Update old references to lv2_list (now lv2ls)&lt;/li&gt;
&lt;li&gt;Use correct URI for dcterms:replaces (for hiding old plugins): "http://purl.org/dc/terms/replaces"&lt;/li&gt;
&lt;li&gt;Use path variables in pkgconfig files&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.5.0</title><link href="https://drobilla.net/2011/09/29/lilv-0-5-0.html" rel="alternate"/><published>2011-09-29T04:00:00-04:00</published><updated>2011-09-29T04:00:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2011-09-29:/2011/09/29/lilv-0-5-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.5.0.tar.bz2"&gt;Lilv 0.5.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add ability to build static library&lt;/li&gt;
&lt;li&gt;Add lv2core as a pkg-config dependency (for lv2.h header include)&lt;/li&gt;
&lt;li&gt;Obey prefix when installing bash completion script&lt;/li&gt;
&lt;li&gt;Remove glib dependency&lt;/li&gt;
&lt;li&gt;Support integer minimum, maximum, and default port values in lilv_plugin_get_port_ranges_float&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.4.4</title><link href="https://drobilla.net/2011/06/11/lilv-0-4-4.html" rel="alternate"/><published>2011-06-11T15:20:00-04:00</published><updated>2011-06-11T15:20:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2011-06-11:/2011/06/11/lilv-0-4-4.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.4.4.tar.bz2"&gt;Lilv 0.4.4&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix building python bindings&lt;/li&gt;
&lt;li&gt;Fix lilv_ui_is_supported when Lilv is built independently&lt;/li&gt;
&lt;li&gt;Fix parsing extra plugin data files in other bundles&lt;/li&gt;
&lt;li&gt;Make free methods tolerate being called on NULL&lt;/li&gt;
&lt;li&gt;Remove lv2jack (replaced by jalv)&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.4.2</title><link href="https://drobilla.net/2011/05/25/lilv-0-4-2.html" rel="alternate"/><published>2011-05-25T23:00:00-04:00</published><updated>2011-05-25T23:00:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2011-05-25:/2011/05/25/lilv-0-4-2.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.4.2.tar.bz2"&gt;Lilv 0.4.2&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix build system Python 3 compatibility&lt;/li&gt;
&lt;li&gt;Fix compilation issues on some systems&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry><entry><title>Lilv 0.4.0</title><link href="https://drobilla.net/2011/05/25/lilv-0-4-0.html" rel="alternate"/><published>2011-05-25T03:00:00-04:00</published><updated>2011-05-25T03:00:00-04:00</updated><author><name>drobilla</name></author><id>tag:drobilla.net,2011-05-25:/2011/05/25/lilv-0-4-0.html</id><content type="html">&lt;p&gt;&lt;a href="//download.drobilla.net/lilv-0.4.0.tar.bz2"&gt;Lilv 0.4.0&lt;/a&gt; has been released.  Lilv is a C library to make the use of LV2 plugins as simple as possible for applications. For more information, see &lt;a href="http://drobilla.net/software/lilv"&gt;http://drobilla.net/software/lilv&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial version (forked from SLV2)&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Software"/><category term="LAD"/><category term="LV2"/><category term="Lilv"/></entry></feed>