npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

strapi-plugin-content-manager-organizer

v1.0.1

Published

Organize Strapi Content Manager collection types into collapsible grouped sections

Readme

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:

| 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

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

| 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.