Content Manager Organizer
Group Strapi Content Manager collection types into collapsible sidebar sections
strapi-plugin-content-manager-organizer
🎯 Why Content Manager Organizer?
When your Strapi project grows to 20, 30, or 50+ content types, the default sidebar becomes a long, unmanageable list. Content Manager Organizer solves this by letting you:
| Problem | Solution |
|---|---|
| 50+ content types in one list | Group into logical sections |
| Alphabetical order not useful | Custom ordering within groups |
| Can't find content types fast | Collapse irrelevant groups |
| Config lost on redeploy | Saved to database |
Screenshots
Plugin in Settings
Configure Groups
Grouped Sidebar — Dark Mode
✨ Features
- 📁 Group content types into named, collapsible sections
- 🔢 Custom ordering — drag items up/down within groups
- 💾 Persisted to database — survives redeploys (SQLite, PostgreSQL, MySQL)
- 🌙 Dark/Light theme — auto-detects Strapi theme
- ♿ Accessible — ARIA attributes on all interactive elements
- ⚡ Zero config required — works out of the box
- 🎛️ Visual Settings UI — no code changes needed
🚀 Installation
npm
npm install strapi-plugin-content-manager-organizeryarn
yarn add strapi-plugin-content-manager-organizerpnpm
pnpm add strapi-plugin-content-manager-organizer🎛️ How It Works
┌─────────────────────────────────────────────────┐
│ First launch (no config in DB) │
│ → Shows default Strapi sidebar order │
└──────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ User configures via Settings > Content Manager Organizer │
│ → Config saved to database │
└──────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ Every subsequent visit │
│ → DB config loaded → grouped sidebar shown │
│ → Survives redeploys ✓ │
└─────────────────────────────────────────────────┘Database Storage
The plugin creates a hidden content type content-manager-configuration
that stores your config as JSON. It's hidden from the Content Manager
and Content-Type Builder — you'll never accidentally see it.
plugin::content-manager-organizer.content-manager-configuration
├── key: "main" (always "main", one record)
└── config: { ... } (your full group config as JSON)Supported Databases
| Database | Supported |
|---|---|
| SQLite | ✅ Yes |
| PostgreSQL | ✅ Yes |
| MySQL | ✅ Yes |
| MariaDB | ✅ Yes |
📋 Settings Page Reference
Groups Panel
| Control | Description |
|---|---|
| Group name input | Rename the group |
| ↑ ↓ arrows | Reorder groups |
| 🗑️ trash | Delete group |
| Expanded by default | Whether group starts open |
| ↑ ↓ on items | Reorder items within group |
| 🗑️ on items | Remove item from group |
| Add content type | Dropdown of ungrouped types |
Ungrouped Panel
Shows all content types not yet assigned to any group. These still appear in the sidebar under an "Other" group at the bottom.
🔐 Permissions
The plugin registers two permissions under Plugins → Content Manager Organizer:
| Permission | Description |
|---|---|
settings.read | View the settings page |
settings.update | Save configuration changes |
Assign these in Settings → Roles to control who can configure the plugin.
🔄 Config Lifecycle
Admin visits Content Manager
│
▼
Plugin fetches config from API
│
┌────┴────┐
│DB has │ Yes → Use DB config → Group sidebar
│config? │
└────┬────┘
│ No
▼
Use empty default → Show normal Strapi sidebar
│
▼
Admin goes to Settings → Content Manager Organizer
│
▼
Creates groups, assigns content types, saves
│
▼
Config saved to DB → Sidebar updates instantly
│
▼
Next time any admin visits → DB config used ✓🛠️ Advanced: Pre-seeding Config via Code
If you want to ship a default config for your team (without UI configuration), you can seed the database on bootstrap:
// src/index.ts (your Strapi project, not the plugin)
export default {
async bootstrap({ strapi }) {
// Only seed if no config exists
const existing = await strapi.db
.query('plugin::content-manager-organizer.content-manager-configuration')
.findOne({ where: { key: 'main' } });
if (!existing) {
await strapi.db
.query('plugin::content-manager-organizer.content-manager-configuration')
.create({
data: {
key: 'main',
config: {
stripNumericPrefix: true,
groups: [
{
id: 'products',
label: 'Products',
defaultExpanded: true,
items: ['product', 'category'],
},
{
id: 'blog',
label: 'Blog',
defaultExpanded: false,
items: ['article', 'tag', 'author'],
},
],
},
},
});
}
},
};📄 License
MIT © Chetan Hasarmani
🙏 Acknowledgements
Built with Strapi Plugin SDK and Strapi Design System.
Install now
npm install strapi-plugin-content-manager-organizer
Create your own plugin
Check out the available plugin resources that will help you to develop your plugin or provider and get it listed on the marketplace.