{"id":13605724,"url":"https://github.com/free-audio/clap","last_synced_at":"2025-04-12T05:34:20.698Z","repository":{"id":23118619,"uuid":"26473165","full_name":"free-audio/clap","owner":"free-audio","description":"Audio Plugin API","archived":false,"fork":false,"pushed_at":"2024-11-01T14:08:14.000Z","size":5434,"stargazers_count":1790,"open_issues_count":29,"forks_count":102,"subscribers_count":54,"default_branch":"main","last_synced_at":"2024-11-01T14:31:25.949Z","etag":null,"topics":["audio","clap","daw","plugin"],"latest_commit_sha":null,"homepage":"https://cleveraudio.org/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/free-audio.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-11-11T06:49:32.000Z","updated_at":"2024-10-24T19:45:11.000Z","dependencies_parsed_at":"2023-10-11T17:19:11.140Z","dependency_job_id":"1fe47ac6-25b2-412a-a5b1-7a948fbe671d","html_url":"https://github.com/free-audio/clap","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/free-audio%2Fclap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/free-audio%2Fclap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/free-audio%2Fclap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/free-audio%2Fclap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/free-audio","download_url":"https://codeload.github.com/free-audio/clap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223498000,"owners_count":17155237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","clap","daw","plugin"],"created_at":"2024-08-01T19:01:02.043Z","updated_at":"2025-04-12T05:34:20.688Z","avatar_url":"https://github.com/free-audio.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"\u003cp align=center\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/free-audio/clap/main/artwork/clap-full-logo-white.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/free-audio/clap/main/artwork/clap-full-logo-black.png\"\u003e\n    \u003cimg alt=\"CLAP\" title=\"Clever Audio Plugin\" src=\"https://raw.githubusercontent.com/free-audio/clap/main/artwork/clap-full-logo-black.png\" width=200\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n- [Learn about CLAP](#learn-about-clap)\n  - [Entry point](#entry-point)\n  - [Extensions](#extensions)\n  - [Fundamental extensions](#fundamental-extensions)\n  - [Support extensions](#support-extensions)\n  - [Deeper Host integration](#deeper-host-integration)\n  - [Third-party extensions](#third-party-extensions)\n- [Adapters](#adapters)\n- [Resources](#resources)\n  - [Examples](#examples)\n  - [Community related projects](#community-related-projects)\n  - [Programming Language Bindings](#programming-language-bindings)\n  - [Artwork](#artwork)\n\n# Learn about CLAP\n\nCLAP stands for **CL**ever **A**udio **P**lugin. It is an interface that\nprovides a stable ABI to define a standard for *Digital Audio Workstations* and\naudio plugins (synthesizers, audio effects, ...) to work together.\n\nThe ABI, or **A**pplication **B**inary **I**nterface, serves as a means of\ncommunication between a host and a plugin. It provides backwards compatibility,\nthat is, a plugin binary compiled with CLAP 1.x can be loaded by any other\nCLAP 1.y.\n\nTo work with CLAP, include [clap/clap.h](include/clap/clap.h).\nTo also include the draft extensions, include [clap/all.h](include/clap/all.h).\n\nThe two most important objects are `clap_host` and `clap_plugin`.\n\n[src/plugin-template.c](src/plugin-template.c) is a very minimal example which demonstrates how to wire a CLAP plugin.\n\n## Entry point\n\nThe entry point is declared in [entry.h](include/clap/entry.h).\n\n## Extensions\n\nMost features come from extensions, which are in fact C interfaces.\n```C\n// host extension\nconst clap_host_log *log = host-\u003eextension(host, CLAP_EXT_LOG);\nif (log)\n   log-\u003elog(host, CLAP_LOG_INFO, \"Hello World! ;^)\");\n\n// plugin extension\nconst clap_plugin_params *params = plugin-\u003eextension(plugin, CLAP_EXT_PARAMS);\nif (params)\n{\n   uint32_t paramsCount = params-\u003ecount(plugin);\n   // ...\n}\n```\n\nThe extensions are defined in the [ext](include/clap/ext) folder.\n\nSome extensions are still in the progress of being designed and they are in\nthe [draft](include/clap/ext/draft) folder.\n\nAn extension comes with:\n- a header `#include \u003cclap/ext/xxx.h\u003e`\n- an extension identifier: `#define CLAP_EXT_XXX \"clap/XXX\"`\n- host interfaces are named like: `struct clap_host_xxx`\n- plugin interfaces are named like: `struct clap_plugin_xxx`\n- each method must have a clear thread specification\n\nYou can create your own extensions and share them. Make sure that the extension identifier:\n- includes versioning in case the ABI breaks\n- is a unique identifier\n\n**All strings are valid UTF-8**.\n\n## Fundamental extensions\n\nThis is a list of the extensions that you most likely want to implement\nand use to get a basic plugin experience:\n- [state](include/clap/ext/state.h), save and load the plugin state\n  - [state-context](include/clap/ext/state-context.h), same as state but with additional context info (preset, duplicate, project)\n  - [resource-directory](include/clap/ext/draft/resource-directory.h), host provided folder for the plugin to save extra resource like multi-samples, ... (draft)\n- [params](include/clap/ext/params.h), parameters management\n- [note-ports](include/clap/ext/note-ports.h), define the note ports\n- [audio-ports](include/clap/ext/audio-ports.h), define the audio ports\n  - [surround](include/clap/ext/surround.h), inspect surround channel mapping\n  - [ambisonic](include/clap/ext/draft/ambisonic.h), inspect ambisonic channel mapping\n  - [configurable-audio-ports](include/clap/ext/configurable-audio-ports.h), request the plugin to apply a given configuration\n  - [audio-ports-config](include/clap/ext/audio-ports-config.h), simple list of pre-defined audio ports configurations, meant to be exposed to the user\n  - [audio-ports-activation](include/clap/ext/audio-ports-activation.h), activate and deactivate a given audio port\n  - [extensible-audio-ports](include/clap/ext/draft/extensible-audio-ports.h), let the host add audio ports to the plugin, this is useful for dynamic number of audio inputs (draft)\n- [render](include/clap/ext/render.h), renders realtime or offline\n- [latency](include/clap/ext/latency.h), report the plugin latency\n- [tail](include/clap/ext/tail.h), processing tail length\n- [gui](include/clap/ext/gui.h), generic gui controller\n- [voice-info](include/clap/ext/voice-info.h), let the host know how many voices the plugin has, this is important for polyphonic modulations\n- [track-info](include/clap/ext/track-info.h), give some info to the plugin about the track it belongs to\n- [tuning](include/clap/ext/draft/tuning.h), host provided microtuning (draft)\n- [triggers](include/clap/ext/draft/triggers.h), plugin's triggers, similar to parameters but stateless\n\n## Support extensions\n\n- [thread-check](include/clap/ext/thread-check.h), check which thread you are currently on, useful for correctness validation\n- [thread-pool](include/clap/ext/thread-pool.h), use the host thread pool\n- [log](include/clap/ext/log.h), lets the host aggregate plugin logs\n- [timer-support](include/clap/ext/timer-support.h), lets the plugin register timer handlers\n- [posix-fd-support](include/clap/ext/posix-fd-support.h), lets the plugin register I/O handlers\n\n## Deeper Host integration\n\n- [remote-controls](include/clap/ext/remote-controls.h), bank of controls that can be mapped on a controlles with 8 knobs\n- [preset-discovery](include/clap/factory/preset-discovery.h), let the host index the plugin's preset in their native file format\n- [preset-load](include/clap/ext/preset-load.h), let the host ask the plugin to load a preset\n- [param-indication](include/clap/ext/param-indication.h), let the plugin know when a physical control is mapped to a parameter and if there is automation data\n- [note-name](include/clap/ext/note-name.h), give a name to notes, useful for drum machines\n- [transport-control](include/clap/ext/draft/transport-control.h), let the plugin control the host's transport (draft)\n- [context-menu](include/clap/ext/context-menu.h), exchange context menu entries between host and plugin, let the plugin ask the host to popup its own context menu\n\n## Third-party extensions\n\n- [`cockos.reaper_extension`](https://github.com/justinfrankel/reaper-sdk/blob/main/reaper-plugins/reaper_plugin.h#L138), access the [REAPER](http://reaper.fm) API\n\n# Adapters\n\n- [clap-wrapper](https://github.com/free-audio/clap-wrapper), wrappers for using CLAP in other plugin environments\n\n# Resources\n\n- [clap-validator](https://github.com/robbert-vdh/clap-validator), a validator and automatic test suite for CLAP plugins.\n- [clapdb](https://clapdb.tech), a list of plugins and DAWs which supports CLAP\n\n## Examples\n\n- [clap-host](https://github.com/free-audio/clap-host), very simple host\n- [clap-plugins](https://github.com/free-audio/clap-plugins), very simple plugins\n\n## Community related projects\n\n- [clap-juce-extension](https://github.com/free-audio/clap-juce-extension), juce add-on\n- [MIP2](https://github.com/skei/MIP2), host and plugins\n- [Avendish](https://github.com/celtera/avendish), a reflection-based API for media plug-ins in C++ which supports Clap\n- [NIH-plug](https://github.com/robbert-vdh/nih-plug), an API-agnostic, Rust-based plugin framework aiming to reduce boilerplate without getting in your way\n- [iPlug2](https://iplug2.github.io), a liberally licensed C++ audio plug-in framework that supports Clap\n\n## Programming Language Bindings\n\n- [clap-sys](https://github.com/glowcoil/clap-sys), rust binding\n- [CLAP-for-Delphi](https://github.com/Bremmers/CLAP-for-Delphi), Delphi binding\n- [clap-zig-bindings](https://sr.ht/~interpunct/clap-zig-bindings/), Zig bindings\n- [CLAP for Ada](https://github.com/ficorax/cfa), Ada 2012 binding\n\n## Artwork\n\n - [CLAP Logo Pack.zip](https://github.com/free-audio/clap/files/8805281/CLAP.Logo.Pack.zip)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffree-audio%2Fclap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffree-audio%2Fclap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffree-audio%2Fclap/lists"}