{"id":35535720,"url":"https://github.com/dfl/clasp","last_synced_at":"2026-01-29T12:48:28.135Z","repository":{"id":332408647,"uuid":"1127436179","full_name":"dfl/clasp","owner":"dfl","description":"Tooling for fast WCLAP plugin development","archived":false,"fork":false,"pushed_at":"2026-01-04T20:12:40.000Z","size":332,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T19:44:04.849Z","etag":null,"topics":["clap-plugin"],"latest_commit_sha":null,"homepage":"","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/dfl.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-03T22:04:03.000Z","updated_at":"2026-01-04T20:12:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dfl/clasp","commit_stats":null,"previous_names":["dfl/clasp"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dfl/clasp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfl%2Fclasp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfl%2Fclasp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfl%2Fclasp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfl%2Fclasp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfl","download_url":"https://codeload.github.com/dfl/clasp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfl%2Fclasp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28877878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T10:31:27.438Z","status":"ssl_error","status_checked_at":"2026-01-29T10:31:01.017Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["clap-plugin"],"created_at":"2026-01-04T03:19:52.457Z","updated_at":"2026-01-29T12:48:28.120Z","avatar_url":"https://github.com/dfl.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# clasp - Tooling for Fast WCLAP Plugin Development\n\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/version-1.0.0--beta-green.svg)](https://github.com/dfl/clasp)\n[![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-lightgrey.svg)](https://github.com/dfl/clasp)\n\n\u003e **Rapid iteration tools for WCLAP audio plugin development**\n\n**clasp** provides tooling for building [WCLAP](https://github.com/user/wclap) audio plugins with fast iteration cycles:\n\n- **thunder.clap** - A dev-oriented meta-host with hot-reload for rapid iteration\n- **clasp-create** - CLI tool for scaffolding new WCLAP projects\n- **clasp-gui** - WebView library for building plugin UIs with HTML/CSS/JS\n- **Templates** - Batteries-included project templates with DSP + WebView UI\n\n---\n\n## Download\n\nPre-built binaries available on the [Releases](https://github.com/dfl/clasp/releases) page.\n\nInstall `thunder.clap` to your CLAP plugins folder:\n- **macOS**: `~/Library/Audio/Plug-Ins/CLAP/`\n- **Windows**: `%LOCALAPPDATA%\\Programs\\Common\\CLAP\\`\n- **Linux**: `~/.clap/`\n\n---\n\n## Quick Start\n\n### 1. Build thunder.clap (optional)\n\n```bash\n# Clone with submodules\ngit clone --recursive https://github.com/dfl/clasp.git\ncd clasp\n\n# Build\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake\n\n# Install to your CLAP plugins folder\nmake install\n```\n\n### 2. Create a New Plugin\n\n```bash\n# Install clasp-create\ncd packages/clasp-create\nnpm install \u0026\u0026 npm run build\nnpm link\n\n# Create a new WCLAP effect (C++)\nclasp-create \"My Gain\" --type effect --lang cpp --vendor \"My Company\"\n\n# Or create an instrument\nclasp-create \"My Synth\" --type instrument --lang cpp\n\ncd my_gain\n\n# Build (wasi-sdk will be downloaded automatically if not found)\nmkdir build \u0026\u0026 cd build\ncmake .. \u0026\u0026 make \u0026\u0026 make install\n\n# Or specify a custom path if you already have it\ncmake .. -DWASI_SDK_PREFIX=/path/to/wasi-sdk \u0026\u0026 make \u0026\u0026 make install\n```\n\n### 3. Load in Your DAW\n\n1. Copy your `.wclap` bundle to `~/.wclap/plugins/`\n2. Open your DAW and scan for plugins\n3. Look for your plugin with the \"(thunder)\" suffix\n\n---\n\n## WCLAP Bundle Structure\n\nA `.wclap` bundle is a directory containing:\n\n```\nMyPlugin.wclap/\n├── module.wasm      # CLAP plugin compiled to WASM (standard CLAP ABI)\n└── ui/              # Optional web-based UI\n    ├── index.html\n    └── clasp.js     # Communication library\n```\n\nThe `module.wasm` implements the standard CLAP ABI - the same interface as native CLAP plugins, but compiled to WebAssembly.\n\n---\n\n## Development Features\n\n### Hot Reload\n\n**thunder.clap** automatically reloads your plugin when files change - no configuration needed! This enables rapid iteration during development.\n\n\u003e **Note**: Hot reload is always active in `thunder.clap`. For production use without hot reload, use [wclap-bridge](https://github.com/user/wclap-bridge) instead.\n\n### Debug Mode \u0026 Logging\n\n**thunder.clap** is built for development with always-on debugging features:\n\n- **Browser Dev Tools**: Right-click in the WebView UI to access the browser console, network inspector, and DOM tools\n- **Centralized Logging**: All logs are automatically sent to:\n  - **stderr** (visible when running DAW from terminal)\n  - **WebView console** (visible in browser dev tools)\n  - **Log file** (`~/.clasp/logs/thunder_YYYYMMDD_HHMMSS.log`)\n\n**Using the Logger from C++:**\n\n```cpp\n#include \"clasp/logger.h\"\n\n// Use CLAP standard severity levels\nCLASP_LOG_DEBUG(\"Detailed debugging information\");\nCLASP_LOG_INFO(\"General information\");\nCLASP_LOG_WARNING(\"Warning message\");\nCLASP_LOG_ERROR(\"Error occurred\");\nCLASP_LOG_FATAL(\"Fatal error\");\n\n// Or use the logger directly\nclasp::Logger::instance().log(CLAP_LOG_INFO, \"Custom message\");\n```\n\n**Viewing Logs:**\n\n- **Terminal**: Launch your DAW from terminal to see stderr output\n- **Browser Console**: Right-click in plugin UI → Inspect Element → Console tab\n- **Log Files**: Check `~/.clasp/logs/` for persistent logs with timestamps\n\n### WebView UI\n\nthunder.clap implements the [CLAP WebView Draft Extension](https://github.com/free-audio/clap/blob/main/include/clap/ext/draft/webview.h):\n\n- **Host-Managed**: Modern hosts provide the WebView, enabling tighter integration\n- **Self-Contained**: Falls back to built-in WebView (via clasp-gui) in other hosts\n\n### clasp.js Communication\n\nInclude `clasp.js` in your UI to communicate with the plugin:\n\n```javascript\n// Subscribe to parameter changes\nclasp.on('paramChange', (id, value) =\u003e {\n    console.log(`Param ${id} = ${value}`);\n});\n\n// Change a parameter\nclasp.call('setParam', paramId, value);\n\n// Get plugin info\nclasp.call('getPluginInfo').then(info =\u003e {\n    console.log(info.name, info.parameters);\n});\n\n// Subscribe to MIDI\nclasp.on('noteOn', (channel, key, velocity) =\u003e { ... });\nclasp.on('noteOff', (channel, key) =\u003e { ... });\nclasp.on('midiCC', (channel, cc, value) =\u003e { ... });\n```\n\n---\n\n## Project Structure\n\n```\nclasp/\n├── src/                    # thunder.clap source\n│   ├── plugin_entry.cpp    # CLAP entry point\n│   ├── plugin_factory.cpp  # Plugin factory \u0026 wrapper\n│   ├── plugin_instance.cpp # WclapPluginInstance implementation\n│   ├── scanner.cpp         # .wclap bundle discovery\n│   ├── wclap_runtime.cpp   # Wasmtime integration\n│   └── gui.cpp             # WebView GUI wrapper\n├── include/clasp/          # Headers\n├── extern/\n│   ├── clap/               # CLAP SDK\n│   ├── clap-helpers/       # CLAP helper utilities\n│   ├── clasp-gui/          # WebView library (submodule)\n│   ├── wclap-cpp/          # WASM boundary helpers (submodule)\n│   └── choc/               # CHOC utilities\n├── packages/\n│   └── clasp-create/       # Node.js CLI for scaffolding\n├── templates/\n│   └── gain/               # Gain effect template (C++ + WebView UI)\n└── tests/                  # Unit tests\n```\n\n---\n\n## Related Projects\n\n- [WCLAP](https://github.com/user/wclap) - WebAssembly CLAP specification\n- [wclap-bridge](https://github.com/user/wclap-bridge) - Production meta-host for WCLAP plugins (stable, no hot reload)\n- [wclap-cpp](https://github.com/user/wclap-cpp) - Header-only C++ library for WASM boundary marshalling\n- [clasp-gui](https://github.com/dfl/clasp-gui) - Decoupled WebView + Protocol library\n\n---\n\n## Contributing\n\nContributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## Author\n\n**[David Lowenfels](https://github.com/dfl)**\n\n## License\n\nMIT License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfl%2Fclasp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfl%2Fclasp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfl%2Fclasp/lists"}