# LV2 Specifications

Version | 1.16.0
Date | 2019-02-03
Discuss | devel@lists.lv2plug.in (subscribe)

- Index
- History

All official LV2 specifications.

Specification | API | Description | Version | Status
--- | --- | --- | --- | ---
Atom | atom | A generic value container and several data types. | 2.2 | Stable
Buf Size | buf-size | Access to, and restrictions on, buffer sizes. | 1.4 | Stable
Data Access | data-access | Provides access to LV2_Descriptor::extension_data(). | 1.6 | Stable
Dynamic Manifest | dynmanifest | Support for dynamic data generation. | 1.6 | Stable
Event | event | A port-based real-time generic event interface. | 1.12 | Deprecated
Instance Access | instance-access | Provides access to the LV2_Handle of a plugin. | 1.6 | Stable
Log | log | A feature for writing log messages. | 2.4 | Stable
LV2 | core | An audio plugin interface specification. | 16.0 | Stable
MIDI | midi | A normalised definition of raw MIDI. | 1.10 | Stable
Morph | morph | Ports that can dynamically change type. | 1.0 | Stable
Options | options | Instantiation time options. | 1.4 | Stable
Parameters | parameters | Common parameters for audio processing. | 1.4 | Stable
Patch | patch | Messages for accessing and manipulating properties. | 2.6 | Stable
Port Groups | port-groups | Multi-channel groups of LV2 ports. | 1.2 | Stable
Port Properties | port-props | Various port properties. | 1.2 | Stable
Presets | presets | Presets for LV2 plugins. | 2.8 | Stable
Resize Port | resize-port | Dynamically sized LV2 port buffers. | 1.0 | Stable
State | state | An interface for LV2 plugins to save and restore state. | 2.4 | Stable
Time | time | Properties for describing time. | 1.6 | Stable
UI | ui | LV2 plugin UIs of any type. | 2.20 | Stable
Units | units | Units for LV2 values. | 5.12 | Stable
URI Map | uri-map | A feature for mapping URIs to integers. | 1.6 | Deprecated
URID | urid | Features for mapping URIs to and from integers. | 1.4 | Stable
Worker | worker | Support for a non-realtime plugin worker method. | 1.2 | Stable

## History

Version 1.16.0 (2019-02-03)
  - Add core/attributes.h utility header.
  - eg-sampler: Add waveform display to UI.
  - eg-midigate: Respond to "all notes off" MIDI message.
  - Simplify use of lv2specgen.
  - Add lv2_validate utility.
  - Install headers to simpler paths.
  - Aggressively deprecate uri-map and event extensions.
  - Upgrade build system and fix building with Python 3.7.
  - atom: Add lv2_atom_object_get_typed() for easy type-safe access to object properties.
  - core: Add lv2:MIDIPlugin class.
  - core: Rework port restrictions so that presets can be validated.
  - midi: Fix incorrect range of midi:chunk.
  - options: Relax range of opts:requiredOption and opts:supportedOption
  - patch: Add patch:accept property.
  - patch: Add patch:context property.
  - state: Add state:StateChanged for notification events.
  - time: Clarify time:beat origin.
  - units: Fix outdated port description in documentation.
  - units: Remove overly restrictive domain from units:unit.
Version 1.14.0 (2016-09-19)
  - eg-scope: Don't feed back UI state updates.
  - eg-sampler: Fix handling of state file paths.
  - eg-sampler: Support thread-safe state restoration.
  - buf-size: Add bufsz:nominalBlockLength option.
  - buf-size: Add bufsz:coarseBlockLength feature.
  - core: Add lv2_util.h with lv2_features_data() and lv2_features_query().
  - core: Add lv2:enabled designation.
  - log: Add lv2_log_logger_set_map() for changing the URI map of an existing logger.
  - state: Add LV2_STATE_ERR_NO_SPACE status flag.
  - state: Add state:threadSafeRestore feature for dropout-free state restoration.
  - time: Define LV2_TIME_PREFIX.
  - ui: Improve documentation.
  - ui: Add missing property labels.
  - worker: Improve documentation.
Version 1.12.0 (2015-04-07)
  - eg-sampler: Support patch:Get, and request initial state from UI.
  - eg-sampler: Add gain parameter.
  - Fix merging of version histories in specification documentation.
  - Improve API documentation.
  - Simplify property restrictions by removing redundancy.
  - core: Relax domain of lv2:minimum lv2:maximum and lv2:default so they can be used to describe properties/parameters as well.
  - core: Add extern C and visibility attribute to LV2_SYMBOL_EXPORT.
  - core: Add lv2:isSideChain port property.
  - parameters: Add range to parameters so hosts know how to control them.
  - patch: Define patch:Get with no subject to implicitly apply to reciever. This can be used by UIs to get an initial description of a plugin.
  - patch: Add patch:Copy method.
  - units: Fix non-existent port type in examples.
  - units: Add lv2:Parameter to domain of units:unit.
Version 1.10.0 (2014-08-08)
  - lv2specgen: Display deprecated warning on classes marked owl:deprecated.
  - Fix -Wconversion warnings in headers.
  - Upgrade to waf 1.7.16.
  - atom: Deprecate Blank and Resource in favour of just Object.
  - atom: Add lv2_atom_forge_is_object_type() and lv2_atom_forge_is_blank() to ease backwards compatibility.
  - atom: Add lv2_atom_forge_key() for terser object writing.
  - atom: Add lv2_atom_sequence_clear() and lv2_atom_sequence_append_event() helper functions.
  - core: Clarify lv2_descriptor() and lv2_lib_descriptor() documentation.
  - event: Minor documentation improvements.
  - patch: Add patch:sequenceNumber for associating replies with requests.
  - ui: Add show interface so UIs can gracefully degrade to separate windows if hosts can not use their widget directly.
  - ui: Fix identifier typos in documentation.
Version 1.8.0 (2014-01-04)
  - Add scope example plugin from Robin Gareus.
  - lv2specgen: Fix links to externally defined terms.
  - Install lv2specgen for use by other projects.
  - atom: Make lv2_atom_*_is_end() arguments const.
  - core: Add lv2:prototype for property inheritance.
  - log: Add missing include string.h to logger.h for memset.
  - ui: Fix LV2_UI_INVALID_PORT_INDEX identifier in documentation.
Version 1.6.0 (2013-08-09)
  - Fix port indices of metronome example.
  - Fix lv2specgen usage from command line.
  - Upgrade to waf 1.7.11.
  - atom: Fix crash in forge.h when pushing atoms to a full buffer.
  - ui: Add idle interface so native UIs and foreign toolkits can drive their event loops.
  - ui: Add ui:updateRate property.
Version 1.4.0 (2013-02-17)
  - Add metronome example plugin to demonstrate sample accurate tempo sync.
  - Generate book-style HTML documentation from example plugins.
  - atom: Fix lv2_atom_sequence_end().
  - atom: Remove atom:stringType in favour of owl:onDatatype so generic tools can understand and validate atom literals.
  - atom: Improve atom documentation.
  - buf-size: Fix typo in bufsz:sequenceSize label.
  - core: Add lv2:EnvelopePlugin class.
  - core: Add lv2:control for designating primary event-based control ports.
  - core: Set range of lv2:designation to lv2:Designation.
  - core: Make lv2:Parameter rdfs:subClassOf rdf:Property.
  - core: Reserve minor version 0 for unstable development plugins.
  - event: Fix incorrect return type in lv2_event_get().
  - log: Add logger convenience API.
  - options: Set the range of opts:requiredOption and opts:supportedOption to opts:Option.
  - patch: Make patch:Set a compact message for setting one property.
  - patch: Add patch:readable and patch:writable for describing available properties.
  - state: Add state:loadDefaultState feature so plugins can have their default state loaded without hard-coding default state as a special case.
  - ui: Fix incorrect linker flag in ui:makeSONameResident documentation.
Version 1.2.0 (2012-10-14)
  - Move all project metadata for extensions (e.g. change log) to separate files to spare hosts from loading them during discovery.
  - Use stricter datatype definitions conformant with the XSD and OWL specifications for better validation.
  - atom: Fix implicit conversions in forge.h that are invalid in C++11.
  - atom: Fix lv2_atom_object_next() on 32-bit platforms.
  - atom: Add lv2_atom_object_body_get().
  - atom: Fix outdated documentation in forge.h.
  - atom: Use consistent label style.
  - atom: Add LV2_ATOM_CONTENTS_CONST and LV2_ATOM_BODY_CONST.
  - buf-size: Initial release.
  - core: Use consistent label style.
  - dynmanifest: Use consistent label style.
  - event: Make event iterator gracefully handle optional ports.
  - event: Remove asserts from event-helper.h.
  - event: Use more precise domain and range for EventPort properties.
  - event: Use consistent label style.
  - midi: Use consistent label style.
  - midi: Add midi:binding and midi:channel predicates.
  - midi: Add midi:HexByte datatype for status bytes and masks.
  - midi: Remove non-standard midi:Tick message type.
  - midi: Add C definitions for message types and standard controllers.
  - midi: Fix definition of SystemExclusive status byte.
  - morph: Initial release.
  - options: Initial release.
  - parameters: Use consistent label style.
  - parameters: Add param:sampleRate.
  - parameters: Add parameters.h of URI defines for convenience.
  - port-groups: Use consistent label style.
  - port-props: Use consistent label style.
  - presets: Use consistent label style.
  - presets: Add preset banks.
  - state: Use consistent label style.
  - time: Use consistent label style.
  - ui: Add types for WindowsUI, CocoaUI, and Gtk3UI.
  - ui: Use consistent label style.
  - ui: Add missing LV2_SYMBOL_EXPORT declaration for lv2ui_descriptor prototype.
  - units: Remove units:name in favour of rdfs:label.
  - units: Use consistent label style.
  - urid: Fix typo in urid:unmap documentation.
Version 1.0.0 (2012-04-16)
  - Initial release as a unified project. Projects can now simply depend on the pkg-config package 'lv2' for all official LV2 APIs.
  - New extensions: atom, log, parameters, patch, port-groups, port-props, resize-port, state, time, worker.
  - atom: Initial release.
  - core: Fix LV2_SYMBOL_EXPORT and lv2_descriptor prototype for Windows.
  - core: Add metadata concept of a designation, a channel or parameter description which can be assigned to ports for more intelligent use by hosts.
  - core: Add new discovery API which allows libraries to read bundle files during discovery, makes library construction/destruction explicit, and adds extensibility to prevent future breakage.
  - core: Relax the range of lv2:index so it can be used for things other than ports.
  - core: Remove lv2:Resource, which turned out to be meaningless.
  - core: Add lv2:CVPort.
  - core: Merge with unified LV2 package.
  - data-access: Merge with unified LV2 package.
  - dynmanifest: Merge with unified LV2 package.
  - event: Fix bug in lv2_event_reserve().
  - event: Fix incorrect ranges of some properties.
  - event: Merge with unified LV2 package.
  - instance-access: Merge with unified LV2 package.
  - log: Initial release.
  - midi: Add class definitions for various message types.
  - midi: Document how to serialise a MidiEvent to a string.
  - midi: Merge with unified LV2 package.
  - parameters: Initial release.
  - patch: Initial release.
  - port-groups: Initial release.
  - port-props: Initial release.
  - presets: Add pset:preset property for describing the preset currently applied to a plugin instance.
  - presets: Remove pset:appliesTo property, use lv2:appliesTo instead.
  - presets: Merge with unified LV2 package.
  - resize-port: Initial release.
  - state: Initial release.
  - time: Initial release.
  - ui: Add ui:parent and ui:resize.
  - ui: Add support for referring to ports by symbol.
  - ui: Add ui:portMap for accessing ports by symbol, allowing for UIs to be distributed separately from plugins.
  - ui: Add port protocols and a dynamic notification subscription mechanism, for more flexible communication, and audio port metering without control port kludges.
  - ui: Add touch feature to notify the host that the user has grabbed a control.
  - ui: Merge with unified LV2 package.
  - units: Add unit for audio frames.
  - units: Add header of URI defines.
  - units: Merge with unified LV2 package.
  - uri-map: Merge with unified LV2 package.
  - urid: Add feature struct names.
  - urid: Merge with unified LV2 package.
  - worker: Initial release.