Strapi Market Guidelines

Make Strapi Awesome

dots
triangle


Quick links
Why building on Strapi?
Review Process
Guidelines
Submit your plugin

bricks.png

Why building on Strapi?

Strapi is the leading open-source headless CMS used by millions of people all over the world. The needs of the community are becoming more diverse and complex. To unleash this potential we want to create and support a strong plugin ecosystem.

How to create Strapi plugins?

Build any plugin thanks to the redefined Plugin API coming with the v4. Easily design the plugin interface using the Strapi Design System and UI kit.

What's Strapi Market?

Strapi Market is the official and trusted place where people can access all the submitted plugins. Anyone is free to add their plugin to the marketplace. Our team will review the plugins and highlight the verified ones to give them maximum visibility. This is a foundational step to empower developers to get paid for their contributions in the future.



bag.png

Review Process

Finding the right balance between openness and trust is not an easy task. We aim to reach for the middle with an open and free marketplace and quality control to provide the best tools and security to Strapi users.

Steps

  1. You submit your plugin with all the information required on our form.
  2. A quick legal and security check is made before listing your plugin on Strapi Market.
  3. A few days later your plugin should be fully validated. A "verified" badge will be displayed next to your plugin's name to increase its visibility.

Timing

You can expect the first review of your plugin within 7 business days. You'll receive a notification when your plugin is live on Strapi Market. We'll let you know as well if you need to make some changes.



puzzle.png

Guidelines

Strapi strongly encourages plugins developed by the community. All plugins will undergo a review process and will only be approved if all of the rules are followed. Please review these rules before beginning development to ensure your plugin is approved and published on Strapi Market as quickly as possible.

πŸ’Ό Business

1. Make your code accessible through npm Your plugin has to be hosted in a public npm registry.

2. Give your plugin a clear and representative name Please avoid naming your projects anything that implies Strapi's endorsement. This also applies to domain names.

3. Add a logo or image Add a representative image or logo, to make your plugin easily identifiable. The image must be in JPG and be 160px x 160px.

4. Add an icon The icon you will choose will help the users identify your plugin in Strapi's administration panel.

5. Provide a short and clear description Briefly explain what your plugin does, and how it can help others in the community. Your description must contain between 50 and 150 characters. Please use capital letters sparingly.

6. Choose the MIT license Please make sure your plugin is under MIT License.

7. Agree to the Terms & Conditions You must agree to Strapi Terms & Conditions to submit your plugin.

πŸ’» Tech

General

  • The plugin MUST be publicly available on npm. Learn how to publish a package on npm.
  • The plugin MUST contain a README.md file that clearly explains how to install and use the plugin. The README MUST be written in English.
  • The plugin MUST alert the user if it is tracking any usage data and it MUST provide a way to opt-out.
  • The plugin MUST be completely free to use. The plugin, or any of its features, cannot be blocked by an offsite or third-party paywall. (Paid plugins will be available in the future with additional guidelines)
  • Plugins MUST be compatible with Strapi v3 or v4.
  • New plugins SHOULD be built for Strapi v4 (Learn more on migrating plugins from v3 to v4).
  • Plugins compatible with Strapi v4 MUST use the Strapi Design System for the UI.
  • Plugins compatible with Strapi v3 SHOULD use the Buffet Component Library for the UI.
  • Plugins compatible with Strapi v3 MUST have strapi as a peerDependency in their package.json
  • Plugins compatible with Strapi v4 MUST have @strapi/strapi as a peerDependency in their package.json
  • The code MUST be readable and easy to understand.
  • The owner of the plugin MUST provide instructions for submitting issues.

Security

  • A plugin MUST not collect any secrets or credentials from Strapi.
  • If the plugin stores its own credentials, such as passwords, then these credentials MUST be handled appropriately as described on the Open Web Application Security Project.
  • The plugin MUST be protected from common web security vulnerabilities, including but not limited to the OWASP top 10 vulnerabilities.
  • The plugin's dependencies SHOULD be up to date and not contain any known vulnerabilities. Run npm audit or yarn audit to check for vulnerabilities.
  • A plugin MUST NOT expose sensitive APIs through unprotected endpoints.

🎨 Design

Driving principles

  • Clarity: keep it simple. Use non-tech language. Remove the fluff and keep the essence of what your plugin does.
  • Consistency: make your plugin part of the whole Strapi experience. It should feel like an extension of it, not a foreign piece of functionality shoved in. Strapi's Design System provides more specific guidelines on that topic.
  • Trust: at the end of the day, users need to trust your plugin with their data and, by extension, their business. Be upfront with what your plugin does and how it does it with clear copy and simple interactions.

User Interfaces

The different screens in Strapi a plugin could be displayed on.

https://github.com/rgesulfo/rfcs/raw/plugin-design-guidelines/rfcs/00xx%20-%20plugin-design-guidelines/assets/ui-diagram.png

Plugin Settings

https://github.com/rgesulfo/rfcs/raw/plugin-design-guidelines/rfcs/00xx%20-%20plugin-design-guidelines/assets/settings.png

  • By default, every plugin has a settings page.
  • The plugin configuration should be done as much as possible through the UI to make it more accessible.
  • If a plugin requires more than settings, tabs can be added to organize the content (a list of generated indexes for instance).

Content Manager

Content-types

https://github.com/rgesulfo/rfcs/raw/plugin-design-guidelines/rfcs/00xx%20-%20plugin-design-guidelines/assets/content-manager.png

Plugins managing content for end-users should add collection and single types to the Content Manager. Clues will remind the users that these content-types are coming from a plugin. A screen can either be similar to regular content-types (ex: Mux) or custom (ex: Navigation Builder).

Injection Zones

https://github.com/rgesulfo/rfcs/raw/plugin-design-guidelines/rfcs/00xx%20-%20plugin-design-guidelines/assets/injection-zones.png

To display additional information or allow specific actions in the Content Manager, a plugin should use injection zones to embed simple components, such as a card with texts, or a button.

List View

  • Actions (top-right corner): This zone is dedicated to buttons, filters, or select inputs. Example: Locale select (Internationalization).
  • Column(s) (in the table): This zone is dedicated to short texts or icon button(s). Example: SEO score (Yoast)

Edit View

  • Actions (top-right corner): This is zone is dedicated to buttons. Example: preview button (Netlify)
  • Sidebar (on the right below the information card): This zone is dedicated to any component that fits in a card of the width of the sidebar. Don't try to put too much in it and focus on the key feature of the plugin. Example: Writing style (Grammarly)

Navigation

https://github.com/rgesulfo/rfcs/raw/plugin-design-guidelines/rfcs/00xx%20-%20plugin-design-guidelines/assets/navigations.png

As part of the v4 release, many improvements will follow up shortly. Some of them are the way the plugins integrate with the different navigations. Here are the planned changes:

  • Plugin settings will be removed from the settings navigation. They will be accessible from the Plugins screen.
  • An icon shows content-types generated by plugins in the Content Manager for more clarity.
  • Only users can add plugin shortcuts to the main navigation from the plugin settings. This will prevent unwanted cluttered navigation and adapt to users' preferred configuration.

Strapi Design System

Strapi's design system provides well-documented design tokens (ex: colors), components (ex: buttons), and patterns (ex: modals) to build a plugin following the best practices in terms of user experience.

Note: Buffet.js is deprecated in v4.


Ready to share your work with the world?

Strapi logo surrounded by thematic icons