pakabl index¶
pakabl list shows what's in pakabl/index.json. That file is
generated — never edit it by hand.
pakabl/sources.json ──► scripts/pakabl-crawl.ts ──► pakabl/index.json (what pakabl lists)
(approved repos, (daily workflow or pakabl/candidates.json (found, not approved yet)
edited by hand) run locally) │
opens a PR ──► you merge ──► `pakabl update` in Live
For every approved repo the crawler finds the newest .ablx (latest GitHub Release asset or a
committed .ablx file), downloads it, and reads the manifest.json inside for name, author
and version. The extension id is <author-slug>.<name-slug> (lowercase letters, digits and single dashes
in each slug). The cmdAbl client ignores index entries whose id does not have that shape or
whose download URL is not https://. The crawler also searches GitHub for the
topics ableton-extension and ableton-extensions; repos that ship an .ablx and aren't
approved yet go to candidates.json.
One-time repo setup¶
Settings → Actions → General → Workflow permissions → tick Allow GitHub Actions to create and approve pull requests. Without it the workflow can't open its PR.
Workflow A — an approved extension has a new version¶
Fully automatic until the merge:
- The
pakabl indexworkflow runs daily (04:17 UTC), or run it now: Actions → pakabl index → Run workflow (main), orgh workflow run pakabl-index.yml. - If anything changed, it opens a PR "pakabl: refresh extension index" from the branch
pakabl/index-update. If nothing changed, no PR is opened. - Open the PR and check the diff: the extension's
versionandurllines changed. - Merge it on GitHub (merge button, or
gh pr merge <number> --squash --delete-branch). The branch is deleted automatically. - In Live:
pakabl update, thenpakabl list. (GitHub's raw-file cache can take a few minutes.)
You don't have to approve the CI run on that PR. GitHub marks runs started for bot-created PRs
action_required; the PR only changes generated JSON, so the check adds nothing.
Workflow B — adding a new extension¶
- Find it in
pakabl/candidates.json(it appears in the next index PR), or pick any GitHub repo that publishes an.ablx. - Open a PR that adds one line to
pakabl/sources.json:Use{ "repo": "<owner>/<repo>" }"exclude": ["<extension-id>"]to skip one extension of a repo. Don't touch the generated files. - Merge it.
- Run the pakabl index workflow (or wait for the daily run) — it opens an index PR that
adds the extension and removes it from
candidates.json. - Merge that PR, then
pakabl update/pakabl listin Live.
A repo is only accepted if its .ablx has a valid manifest.json with name, author,
version and a minimumApiVersion starting with 1.; otherwise the crawler skips it and
prints why in the workflow log.
Only approve repos you've looked at: an installed extension runs inside Live's Extension Host, and a crash in one takes down all of them.
Running the crawler locally¶
Needs Node 24, unzip, and a GitHub token (search is rate-limited without one):
GITHUB_TOKEN=$(gh auth token) npx tsx scripts/pakabl-crawl.ts
git diff pakabl/
It rewrites index.json and candidates.json and refuses to overwrite the index with an
empty result. Commit the result via a PR like any other change.
Known quirk¶
candidates.json records each repo's star count and last-push date. Those change often, so the
scheduled run can open a refresh PR even when no approved extension changed. Merge or close it;
it's harmless.