audacity / audacity/audacity

Automation Epic: Extensions Manager

Open
#11,858 0 comments 0 reactions 0 assignees View on GitHub
Task
Dominant language
C++
Stars
18.4k
Forks
2.7k
Avg merge
3d 1h
Merged PRs (30d)
78

Description

# Extension Manager

Image

https://www.figma.com/design/Gt4wJqWpinqjk6c1qE125O/19---Preferences?node-id=3569-32170

A preference section listing extensions currently installed, letting the user enable / disable or install / uninstall them. Installing is done by drag-dropping or browsing for a zip file.

## The table

A table view, listing installed extensions. The user sees name, version, category, and a checkbox for enabling or disabling.

- One row per installed extension, with an "Enabled" checkbox
- Columns off the manifest: name, version, category
- Reload
- Error state

### Installing and uninstalling

- Drag-drop extension file, or click "Install extension"
- Shows a meaningful progress bar of registered actions
- Install a same-or-newer extension succeeds without complaint
- Installing an older version prompts the user "You're installing MyCoolExtension version 1.2, which is older than the installed version 1.3. Install anyway? [Cancel] [Install]"

### Enabling and disabling

- Disabling an extension stops its entries from appearing in menus and toolbars

## Acceptance criteria

- An installed extension appears, with its name and version.
- Uninstalling an extension cleans up its files

## Open questions

- How does the user understand what artifacts (menu commands, actions) the extension just added?
- Should extensions be allowed to request (or maybe suggest) shortcuts?
- Should anything be mandatory? An extension that registers only an Action without name or icon could be considered malformed.
- Localization for extension artifacts (menu items, button captions)

## Claude says

- The framework's panel is a grid of thumbnail cards, MuseScore's shape. Audacity embeds it at `src/appshell/qml/Audacity/AppShell/HomePage/PluginsPage.qml`, built into the QML module with nothing routing to it. A table means keeping the model under it and dropping the view.
- That model carries what the columns need: name, version, description, category, enabled, shortcut, removable. It also exposes enable, remove, reload and shortcut editing.
- Extensions cannot trigger actions today. The extension API is an allowlist and the dispatcher entry is switched off. Belongs to [AU41-2](AU41-2-macro-manager.md) and the layer under it.

Contributor guide

Open the contributing guide

Research direction

Review the Figma design and the referenced `src/appshell/qml/Audacity/AppShell/HomePage/PluginsPage.qml`, then trace the extension API and the layer referenced by AU41-2-macro-manager.md. Resolve the open questions around extension artifacts, shortcuts, malformed extensions, and localization before implementation. Done means installed extensions show their name and version, and uninstalling cleans up their files.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.