aione314159339 downloadsGroup the buttons in the left ribbon into labeled, color-coded sections, and reorder them by dragging.

An Obsidian plugin that splits the left ribbon into labeled, color-coded groups — and lets you drag buttons between them on the ribbon itself.
Once you have a dozen plugins installed, the ribbon turns into one long column of unrelated icons. This plugin lets you split it into blocks such as "Writing", "Sync" and "Dev", separated by color.
📥 Download · 💡 Features · ⚙️ Usage · 🔄 Drag on the ribbon · 🐞 Report an issue

Obsidian 1.8.7 or later, on desktop or mobile.
A group can be switched off without being deleted: uncheck the box next to its name in settings, or right-click it on the ribbon and choose "Hide group". Its buttons keep their places, and turning it back on restores the group exactly as it was.
"Hide ungrouped buttons" does the same for everything you have not sorted yet. Together they turn the ribbon into a list of only what you chose to put there.
Hidden buttons are not removed from Obsidian — they still work from the command palette, and they come back the moment you switch the group on again.
Press a ribbon button and move it. Past a few pixels the button fades, the group under the pointer is outlined, and a line shows where it will be inserted. Release to drop it there.
Dragging a button out of every group drops it back into the ungrouped area. When all of your buttons are grouped there is no ungrouped block on screen to aim at, so one appears for the duration of the gesture and goes away afterwards.
A press that never moves is still a plain click, so buttons keep doing what they always did.
Press Esc during a drag to cancel it.
Obsidian has its own ribbon drag, which reparents the button the moment the pointer moves. That fights with the grouping, so this plugin suppresses it while it is loaded and handles the gesture instead.
Obsidian has no public API for listing or reordering ribbon buttons. addRibbonIcon()
only adds your own button; it cannot touch anyone else's. This plugin reads the private
app.workspace.leftRibbon object plus the ribbon's own DOM.
That means: if Obsidian changes that internal structure, this plugin will break and will need a fix to follow along.
It will not fail silently. The settings tab shows "Ribbon not found" together with the structure it actually detected, and a button to copy that diagnostic text so you can file an issue.
Disabling the plugin restores the ribbon to its original state — no restart needed.
This plugin makes no network requests, collects no telemetry, and requires no account.
All settings live in data.json inside the plugin's own folder in your vault.
Settings you paste into the import box are validated before they are used: group colors are
restricted to literal color syntax, so an imported file cannot smuggle in a url() that
would make your ribbon fetch something.
The settings tab has an "Open" button that reveals that folder in your system file manager. It only ever points at the plugin's own folder inside the vault, and it is hidden when the vault is not backed by a local file system (for example on mobile).
Settings → Community plugins → Browse → search for "Open Ribbon Groups".
Copy main.js, styles.css and manifest.json from the latest
release into
<vault>/.obsidian/plugins/ribbon-groups/, then enable it under
Settings → Community plugins.
Settings → Open Ribbon Groups:
folder-open⠿ handle on the left to reorder groups
Changes apply immediately; there is nothing to save.
Clicking a group title in the ribbon collapses it, and the collapsed state is remembered.
Its button disappears from the ribbon, but its position is kept in the settings. Re-enable that plugin and the button returns to its original group — no need to rearrange anything.
If you are sure you are done with it, the settings tab shows "N buttons are no longer on the ribbon" at the top; click "Clear" to drop them.
npm install
npm run build # produces dist/{main.js, styles.css, manifest.json}
npm run dev # watch mode
npm test # vitest
npm run typecheck
Tests cover the group data operations (deduplication, where buttons go when a group is
deleted, what an import is allowed to contain) and the whole drop decision — which zone a
release lands in and at which index, on the ribbon as well as in the settings pane. DOM
manipulation and the settings UI are out of scope; those are verified through the diagnostic
output in ribbonDom.ts.