VS Code extension that loads workspace tasks into the status bar — with category grouping support.
Inspired by earlier task-button status bar extensions, TaskBari goes further by letting you collapse related tasks into group buttons. Clicking a group opens a QuickPick menu listing all tasks in that category, saving valuable status bar space.
- Individual task buttons on the status bar like other extensions which inspired this one
- Group buttons that collapse multiple related tasks into a single status bar button
- QuickPick submenus that appear when you click a group button
- Opt-in "Run all" option in group QuickPick menus (enabled per group with
runAll: true) - Free button ordering — groups and single-click tasks share one priority scale, so you can arrange them in any sequence
- Configurable group labels, icons, colors, and sort priority
- Full backward compatibility with existing
tasks.jsonconfigurations
TaskBari is published to the Open VSX Registry.
Editors that use Open VSX — such as Cursor, Windsurf, VSCodium, and Gitpod — can install it directly from their built-in extension panel by searching for TaskBari.
For editors that do not use Open VSX, download taskbari.vsix from the latest release workflow run and install it manually:
code --install-extension taskbari.vsixOr use Extensions: Install from VSIX… in the command palette.
Add tasks to your .vscode/tasks.json as usual. To group tasks, add a group property inside options.statusbar:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Debug",
"type": "shell",
"command": "make debug",
"options": {
"statusbar": {
"group": "Build"
}
}
},
{
"label": "Build Release",
"type": "shell",
"command": "make release",
"options": {
"statusbar": {
"group": "Build"
}
}
},
{
"label": "Lint",
"type": "shell",
"command": "npm run lint"
}
]
}This creates two status bar items instead of three: a "Build (2)" group button and a "Lint" individual button. Clicking "Build (2)" opens a QuickPick with "Build Debug" and "Build Release".
Tip — let your coding agents do the setup: Paste the following link into your agent prompt and ask it to create or optimize your tasks.json for TaskBari:
https://raw.githubusercontent.com/schbz/taskbari/refs/heads/master/agent-instruct.txt
The file contains configuration references, group rules, recommended category taxonomies for different project types, and a full working example.
For more control, use an object instead of a string:
{
"label": "Build Debug",
"type": "shell",
"command": "make debug",
"options": {
"statusbar": {
"group": {
"id": "Build",
"label": "Build",
"icon": "tools",
"color": "#22C1D6",
"priority": 10,
"runAll": true
}
}
}
}| Property | Type | Description |
|---|---|---|
id |
string | Required. Group identifier — tasks with the same id are grouped together. |
label |
string | Display label for the group button. Defaults to the id. |
icon |
string | Codicon ID (e.g. tools, beaker, cloud-upload). Rendered as $(icon) prefix. |
color |
string | Foreground color — hex value or theme color name. |
priority |
number | Sort order for groups. Higher values appear first. Default: 0. |
runAll |
boolean | Show a "Run all" option at the top of the group's QuickPick menu. Default: false. |
Only the first task in a group that specifies these properties "wins" — subsequent tasks in the same group only need "group": "Build".
All standard status bar options are supported:
"options": {
"statusbar": {
"label": "$(beaker) Test",
"color": "#22C1D6",
"detail": "Run unit tests",
"hide": false,
"filePattern": "test_.*",
"priority": 7
}
}| Property | Type | Description |
|---|---|---|
priority |
number | Sort order for this button. Higher values appear further left. Shares one scale with group priority — see Button Order. |
Group buttons and single-click task buttons are sorted on a single shared
scale, so you can arrange them in whatever sequence you like. Give a task a
priority inside options.statusbar and it slots in among the groups:
{
"label": "Dev Server",
"type": "shell",
"command": "npm run dev",
"options": {
"statusbar": {
"label": "$(play) Dev",
"priority": 7
}
}
}With groups at Build: 8 and Deploy: 3, that produces:
[Build (2)] [$(play) Dev] [Deploy (3)] ...
Sorting rules, in order:
- Priority, descending — higher numbers sit further left.
- On a tie, group buttons come before task buttons.
- Two groups with equal priority sort alphabetically by id.
- Two tasks with equal priority keep their
tasks.jsonorder.
A task that does not set priority keeps the pre-1.2 position: after every
group and every prioritized task, in tasks.json order. This is exactly the
old layout rule, so existing tasks.json files render identically after
upgrading — nothing to migrate. Add priorities only to the buttons you
actually want to move.
Mixing is fine. Given groups Deploy: 6, tasks Dev: 10 and Lint: 4, and
unprioritized Clean and Format:
[$(play) Dev] [Deploy (3)] [Lint] [Clean] [Format]
On a task that also sets group, priority orders that entry within the
group's QuickPick menu instead (the task has no button of its own). Entries
without a priority keep tasks.json order, after the prioritized ones. The
tasks.statusbar.groups.sortAlphabetically setting still overrides this.
| Setting | Type | Default | Description |
|---|---|---|---|
tasks.statusbar.default.hide |
boolean | false |
Hide all tasks by default |
tasks.statusbar.default.color |
string | "" |
Default foreground color |
tasks.statusbar.limit |
integer | null | null |
Max visible status bar buttons (overflow goes to "..." picker) |
tasks.statusbar.select.label |
string | "..." |
Label for the overflow picker button |
tasks.statusbar.select.color |
string | "" |
Color for the overflow picker button |
tasks.statusbar.groups.showTaskCount |
boolean | true |
Show (N) count on group buttons |
tasks.statusbar.groups.sortAlphabetically |
boolean | false |
Sort tasks alphabetically in group QuickPick |
This repo includes an agent-instruct.txt file that teaches AI coding agents (Cursor, GitHub Copilot, Aider, etc.) how to set up and optimize your tasks.json for TaskBari.
How to use it:
- Copy
agent-instruct.txtinto your project, or reference it directly https://raw.githubusercontent.com/schbz/taskbari/refs/heads/master/agent-instruct.txt. - In your AI agent's chat, mention the file to give it context:
- Example prompts:
- "@agent-instruct.txt Please set up a tasks.json for this Node.js project with build, test, and deploy groups."
- "@agent-instruct.txt Migrate my existing tasks.json to use TaskBari groups."
- "@agent-instruct.txt Add a new test coverage task to the Test group."
The file contains configuration references, group rules, recommended category taxonomies for different project types, migration steps, and a full working example.
npm install
npm run compile
# Press F5 in VS Code to launch Extension Development HostPublishing runs in GitHub Actions when you push a version tag matching v* (for example v1.2.0 after setting "version": "1.2.0" in package.json). The workflow packages taskbari.vsix, uploads it as a build artifact, and publishes it to Open VSX.
You can also run the Publish Extension workflow manually from the Actions tab (workflow_dispatch). Use that only when the package.json version is not already published.
Configure this repository secret:
| Secret | Purpose |
|---|---|
OVSX_PAT |
Personal access token from open-vsx.org user settings for publishing to Open VSX (publishing guide) |
Publishing to the VS Code Marketplace is currently disabled — its Azure DevOps PATs expire yearly and the rotation was not worth the upkeep. To restore it, add back a Publish to VS Code Marketplace step running npx vsce publish --packagePath taskbari.vsix --skip-duplicate with a VSCE_PAT secret.
Inspired by the ecosystem of VS Code task-button extensions that came before it.