Higher Quality, Stronger Performance, Increased Stability, Better Developer Experience, discover everything we've shipped recently!

Strapi plugin logo for Content Manager Organizer

Content Manager Organizer

Group Strapi Content Manager collection types into collapsible sidebar sections

thumbnail for Content Manager Organizer

strapi-plugin-content-manager-organizer

npm version npm downloads Strapi version License: MIT

A Strapi v5 plugin that lets you organize the Content Manager sidebar into collapsible, labeled groups — configured entirely through a visual Settings UI with no code changes required.

Content Manager Organizer Demo


🎯 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:

ProblemSolution
50+ content types in one listGroup into logical sections
Alphabetical order not usefulCustom ordering within groups
Can't find content types fastCollapse irrelevant groups
Config lost on redeploySaved to database

Screenshots

Plugin in Settings

Settings

Configure Groups

Configure

Grouped Sidebar — Dark Mode

Dark


✨ 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-organizer

yarn

yarn add strapi-plugin-content-manager-organizer

pnpm

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

DatabaseSupported
SQLite✅ Yes
PostgreSQL✅ Yes
MySQL✅ Yes
MariaDB✅ Yes

📋 Settings Page Reference

Groups Panel

ControlDescription
Group name inputRename the group
↑ ↓ arrowsReorder groups
🗑️ trashDelete group
Expanded by defaultWhether group starts open
↑ ↓ on itemsReorder items within group
🗑️ on itemsRemove item from group
Add content typeDropdown 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:

PermissionDescription
settings.readView the settings page
settings.updateSave 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

STATS

2 GitHub stars15 weekly downloads

Last updated

7 days ago

Strapi Version

5.46.0 and above

Author

github profile image for Chetan Hasarmani
Chetan Hasarmani

Useful links

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.