Getting Started with the Ableton Extension SDK
Ableton recently released the Extension SDK — a new way to build tools that interact directly with your Live Set using JavaScript and Node.js. Extensions live in Live’s right-click context menu and can manipulate tracks, clips, MIDI notes, devices, tempo, and more. Here’s what you need to know to get started.
What Are Extensions?
Extensions are small Node.js programs that run inside Live 12 Suite (Beta, version 12.4.5 or later). They are triggered from the context menu when you right-click on tracks, clips, or other items in your Set. After selecting an Extension, a pop-up appears where you can adjust parameters before running it. The Extension executes once, performs its task, and stops.
Unlike Max for Live — which is a deep patching environment for synthesis and custom instruments — Extensions are about workflow and structure: manipulating your arrangement, analyzing audio, generating MIDI, or connecting to external services.
What You Can Build
The SDK opens up a wide range of possibilities:
- Transform MIDI: Remap notes, generate chords, create arpeggiation patterns
- Analyze audio: Detect silence, transients, pitch, or spectral content
- Automate repetitive tasks: Batch-rename tracks, reorder clips, normalize gain
- Generate patterns: Algorithmic drum fills, evolving melodies, probabilistic sequences
- Process audio clips: For example, BBenCut applies the BBCut breakbeat cutting algorithms to AudioClips in the Arrangement View
- Connect to external services: Fetch chord progressions or lyrics from an API
- Even play games: The SDK is flexible enough that someone built a game inside Live
Requirements
To develop Extensions, you need:
- Live 12 Suite Beta, version 12.4.5 or later (not available in Standard, Intro, or Lite)
- Node.js v24.16.0 (LTS)
- The Ableton Extensions SDK package (
@ableton-extensions/sdk)
Project Structure
An Extension is a standard Node.js/TypeScript project with a manifest.json:
| |
The entry field points to your compiled JavaScript. The minimumApiVersion ensures compatibility with the SDK runtime inside Live. You write your code in TypeScript and compile it before loading it into Live via Settings → Extensions.
A Simple Extension: Context Menu Action
Here’s the minimal example — registering a command that runs when you right-click a clip slot:
| |
The key pattern: registerContextMenuAction tells Live where the Extension appears (on which item type), and registerCommand defines what happens when it’s selected. The item types include ClipSlot, MidiTrack.ArrangementSelection, AudioTrack.ArrangementSelection, and others — each specifying which right-click context triggers your extension.
Working with Arrangement Selections
A more useful Extension reacts to the user’s selection in the Arrangement View. The SDK provides the selection’s time range and selected tracks:
| |
This Extension creates a new MIDI clip on every selected MIDI track or take lane, spanning the user’s time selection. The selection.selected_lanes array gives you handles to the tracks, and time_selection_start / time_selection_end provide beat-time boundaries.
Audio Analysis: The Strip Silence Extension
One of the official examples is Strip Silence — it analyzes the audio on selected tracks, detects silent regions, and removes them. Here’s the core analysis logic:
| |
The Extension renders the pre-FX audio of each selected track to a temporary WAV file, decodes it into float samples, computes RMS values in sliding windows, and identifies regions below a configurable threshold. Then it removes those regions in a single transaction:
| |
The withinTransaction call wraps all clip deletions into one undo step — a clean pattern for batch operations that should be atomic.
Progress Dialogs and UI
Long-running operations can show a progress dialog using the built-in UI helpers:
| |
The abortSignal lets users cancel the operation, and update() provides both a status message and a percentage.
Extensions vs. Max for Live
| Extensions | Max for Live | |
|---|---|---|
| Language | JavaScript / TypeScript | Visual patching (Max) |
| Runtime | Node.js | Max engine |
| Focus | Set structure, data, workflow | Synthesis, signal processing, instruments |
| Trigger | Right-click context menu | Device chain, automation |
| Execution | Run once, then stop | Continuous / real-time |
They complement each other: Max for Live handles the audio signal path and real-time DSP, while Extensions handle the arrangement, metadata, and structural manipulation.
Getting Started
- Install Node.js v24.16.0
- Create a new Extension project with
npm init, add@ableton-extensions/sdkas a dependency - Write a
manifest.jsonand your extension code insrc/extension.ts - Compile with TypeScript (
tscor a bundler) - Load it in Live via Settings → Extensions → Install Extension
The SDK comes with several example Extensions — Strip Silence, Arrangement Selection, Context Menu, Progress Dialog, Modal Dialog, Audio Clips, and Warp Mode — each demonstrating a different aspect of the API. The full API documentation covers all available classes and functions in detail.
AI-Assisted Development
The SDK is built on standard web technologies that AI coding assistants handle well. The official FAQ even mentions that “if you can clearly describe your idea for an Extension, you may be able to build a working Extension with AI assistance, without any coding experience.” The Strip Silence example was reportedly written with Copilot — showing that the API is approachable enough for AI tools to generate functional code.

