{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigsy4f5bnprcay25ioi47dvy6ut2sbsplnrdnfu6xtwnfxnt2jtqi",
"uri": "at://did:plc:2u26gaflouttm3uj6jkgroyz/app.bsky.feed.post/3mgee653g4q62"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreifkp2lcanw3cs2sh5gmx3jatjjdegiyz4ylubbj7jzstqlbenqacy"
},
"mimeType": "image/png",
"size": 1315031
},
"description": "A while back I wrote about how to start developing audio apps and plugins on macOS using the JUCE-Plugin-Starter I created. I've since turned that workflow into a Claude Code plugin called juce-dev.",
"path": "/2026/03/06/a-claude-code-plugin-for-building-juce-audio-plugins/",
"publishedAt": "2026-03-06T03:20:12.000Z",
"site": "https://danielraffel.me",
"tags": [
"**juce-dev**",
"how to start developing audio apps and plugins on macOS",
"JUCE-Plugin-Starter",
"DiagnosticKit",
"Visage",
"Metal",
"my Visage fork",
"iOS touch support",
"**juce-visage**",
"JUCE",
"Apple Developer"
],
"textContent": "> **TL;DR:** If you want to build audio apps/plugins on macOS (with GPU UIs via Metal), try the **juce-dev** Claude Code plugin. It automates all the boilerplate so you can go from zero to a compiling plugin with one command.\n\nA while back I wrote about how to start developing audio apps and plugins on macOS using the JUCE-Plugin-Starter I created. That template automates a lot of the tedious setup — dependency installation, project scaffolding, code signing, Xcode project generation — through a set of shell scripts.\n\nI've since turned that workflow into a Claude Code plugin called **juce-dev**. Instead of running scripts in your terminal and answering prompts, you type `/juce-dev:create \"My Plugin\"` in Claude Code and it walks you through the whole thing interactively.\n\n## What it does\n\nThe plugin's `create` command handles the full project setup:\n\n * Checks that your Mac has the required tools (Xcode CLT, Homebrew, CMake) and offers to install anything missing\n * Finds your JUCE-Plugin-Starter template and checks if your JUCE version is current\n * Pulls your developer settings (Apple ID, Team ID, certificates) from the template's `.env` so you don't re-enter them for every project\n * Generates all the derived values — class names, bundle IDs, 4-letter JUCE plugin codes — from the plugin name you provide\n * Creates a new project folder, replaces template placeholders, initializes git, and optionally creates a public or private GitHub repo\n * Optionally sets up DiagnosticKit a Swift app that can collect user bugs and publish diagnostics with attachments via GitHub Issues (and walks you through configuring the token you'll need to configure that repo)\n\n\n\nThere are also commands for building (`/juce-dev:build`) and adding Visage or iOS targets to existing projects.\n\n## Visage GPU UI\n\nThe plugin has built-in support for Visage, a GPU-accelerated UI framework that renders via Metal. Pass `--visage` when creating a project and the plugin will clone my Visage fork (which includes iOS touch support and several DAW compatibility patches), copy the JUCE↔Visage bridge files, wire up CMake, and give you a project that renders with Metal out of the box.\n\nThe plugin includes a companion skill called **juce-visage** that provides detailed guidance for working with Visage inside JUCE — things like embedding an MTKView in a plugin window, bridging keyboard and mouse events between JUCE and Visage, handling focus in DAW hosts, building popups and modals inside the GPU layer, and managing the tricky destruction ordering that Metal's display link requires.\n\n## Who this is for\n\nPrimarily people who are developing macOS or iOS audio apps and:\n\n * Want to build an audio plugin but haven't set up their Mac for it yet\n * Have never worked with JUCE before and want to skip the boilerplate\n * Want to get from zero to a compiling, running plugin as quickly as possible\n\n\n\nYou don't need an Apple Developer account to build and test locally. If you do have one, the plugin will configure code signing and notarization so your builds are ready to distribute.\n\nIf you already know JUCE well, the plugin still saves time on the repetitive project setup — generating Xcode projects, managing `.env` configurations, and wiring up optional dependencies like Visage.\n\n## Codex users\n\nThe plugin is for Claude Code, but if you use OpenAI's Codex CLI, there's a standalone **juce-visage** skill you can install. It provides the same Visage integration guidance (Metal embedding, event bridging, iOS touch handling, etc.) but not the automated project creation commands.\n\nInstall it with a sparse checkout:\n\n\n mkdir -p ~/.codex/skills\n cd ~/.codex/skills\n\n git clone --no-checkout --depth 1 --filter=blob:none --sparse \\\n https://github.com/danielraffel/generous-corp-marketplace.git tmp-juce-visage\n cd tmp-juce-visage\n\n git sparse-checkout set skills/codex/juce-visage\n git checkout\n\n mv skills/codex/juce-visage ~/.codex/skills/\n\n cd ~/.codex/skills\n rm -rf tmp-juce-visage\n",
"title": "A Claude Code Plugin for Building JUCE Audio Plugins",
"updatedAt": "2026-03-06T03:20:13.677Z"
}