Components showcase
Page summary:This is a demo page for designers. It renders every general-purpose component and rendering case used in the docs, grouped by category. For API-specific components, see the API components showcase.
This page groups components by category, mirroring how the documentation is organized. Use the table of contents to jump to a section.
Identity cards
The identity card summarizes the key facts about a feature or a plugin at the top of a page.
Identity card for a feature:
Identity card for a plugin:
@strapi/plugin-users-permissionsBreaking change ID card, with both answers set to "Yes" and an informational note:
Breaking change ID card variant, with both answers set to "No" and no note:
Text & inline elements
This category covers the plain Markdown primitives: text formatting, headings, lists, and tables.
Text formatting
The paragraph below mixes the inline styles most often used in the docs.
Regular paragraph text with bold and inline code. Here is a plain link, and here is a link wrapping inline code. You can also reference an internal page like the REST API introduction.
To reference a button in the interface, use an icon followed by its bold label, like the Filters button or the Configure the view button.
An inline annotation inside a sentence.
Headings
Headings structure a page. The showcase shows levels 3 to 5, since levels 1 and 2 are reserved for the page title and section titles.
Heading level 4
This is the text that follows a level 4 heading.
Heading level 5
This is the text that follows a level 5 heading.
Lists
Lists come in three flavors: unordered, ordered, and nested.
Bullet list:
- First item
- Second item with
inline code - Third item with a link
- Nested bullet
- Nested bullet with bold
- Deeper nested bullet
Numbered list (procedure):
- First step
- Second step with
inline code - Third step
- Nested numbered step
- Nested numbered step
Tables
Tables are used for reference information such as parameters or availability matrices.
| Feature | Availability | Notes |
|---|---|---|
| REST API | ✅ | Enabled by default |
| GraphQL | ✅ | Via @strapi/plugin-graphql |
| Document Service API | ✅ | See docs |
Admonitions
Every admonition type is shown below, each containing text, a bullet list, a link, inline code, a link wrapping inline code, and a fenced code block, to demonstrate rich rendering inside.
This is a note admonition with inline code, a plain link, and a link with inline code.
- A bullet inside a note
- Another bullet
// A code block inside a note
const strapi = require('@strapi/strapi');
This is a tip admonition with inline code, a plain link, and a link with inline code.
- Bullet one
- Bullet two
yarn strapi develop
This is an info admonition with inline code, a plain link, and a link with inline code.
{ "enabled": true }
This is a caution admonition with inline code, a plain link, and a link with inline code.
- Watch out for this
- And this
const x: number = 42;
This is a danger admonition with inline code, a plain link, and a link with inline code.
rm -rf ./build
This is the custom strapi-branded admonition with inline code, a plain link, and a link with inline code.
- Strapi-specific note
- Another bullet
export default { /* config */ };
This prerequisites admonition contains inline code, a plain link, and a link with inline code.
- Node.js installed (see requirements)
- A running Strapi project created with
npx create-strapi-app - Basic knowledge of
RESTorGraphQL
Code & tabs
Code can be shown as standalone blocks or grouped inside tabs.
Code blocks
A short code block without a title:
const port = env.int('PORT', 1337);
A code block with a title but no line highlighting:
'use strict';
/**
* A custom `article` controller that extends the default core controller
* and overrides the `find` method to inject a default sort.
*/
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::article.article', ({ strapi }) => ({
async find(ctx) {
ctx.query = {
...ctx.query,
sort: ctx.query.sort || 'publishedAt:desc',
};
const { data, meta } = await super.find(ctx);
return { data, meta };
},
}));
The exact same block, now with highlighted lines (the injected sort and the call to the core controller):
'use strict';
/**
* A custom `article` controller that extends the default core controller
* and overrides the `find` method to inject a default sort.
*/
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::article.article', ({ strapi }) => ({
async find(ctx) {
ctx.query = {
...ctx.query,
sort: ctx.query.sort || 'publishedAt:desc',
};
const { data, meta } = await super.find(ctx);
return { data, meta };
},
}));
A terminal block, used when the reader has commands to run in a terminal (a bash, sh, or powershell language renders as a terminal):
yarn strapi develop
Tabs
Simple tabs:
- REST
- GraphQL
Content of the REST tab, with inline code and a link.
Content of the GraphQL tab.
Tabs containing different kinds of content, one per tab (a table, a list with an admonition, and a code block):
- Table
- List & admonition
- Code
| Parameter | Type | Description |
|---|---|---|
locale | String | Locale to fetch documents for |
status | Enum | published or draft |
sort | String | Field and order, e.g. title:asc |
Steps to enable the feature:
- Open the admin panel
- Go to Settings
- Toggle the feature on
The feature is available on all plans.
module.exports = {
'my-plugin': {
enabled: true,
config: { apiKey: process.env.MY_PLUGIN_API_KEY },
},
};
JavaScript / TypeScript tabs, with a title bar on each code block:
- JavaScript
- TypeScript
module.exports = ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
});
export default ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
});
Tabs nested inside tabs, with admonitions and titled code blocks inside:
- macOS / Linux
- Windows
Choose your package manager:
- yarn
- npm
Run the following in your project root:
yarn install && yarn develop
npm install && npm run develop
- yarn
- npm
yarn install; yarn develop
npm install; npm run develop
Steps, progress & checklists
Steps and checklists guide the reader through a procedure.
StepDetails (collapsible steps):
Step 1: Create a collection type
Use the Content-Type Builder to create a new collection type.
Nested admonition inside a step.
yarn strapi develop
Step 2: Add fields
Add a title field of type Text and a description field of type Rich text.
Checklist:
Cards & navigation
Doc cards link to related pages. They can be shown in a static grid or in an expandable grid.
Custom doc cards:
Back-end customization
Routes, policies, controllers, services, and more.
Admin panel customization
Logos, themes, and menu configuration.
REST API
Interact with your content via REST.
Expandable doc cards (collapses after the first few, then reveals the rest):
Layout
Layout components arrange content in columns.
Two-column layout with Columns:
Content in the left column, with inline code and a bullet list:
- Item A
- Item B
Content in the right column, with a link.
Side-by-side layout:
Explanation text on the left, describing what the code on the right does.
const entries = await strapi.documents('api::article.article').findMany();
Expandable content
ExpandableContent collapses long content beyond a set height and lets the reader expand it with a "Show more" toggle.
Wrapping a long code block, so the reader can expand it only if they need the full example:
Media & miscellaneous
Media components embed diagrams, walkthroughs, and interactive tools.
External link: Strapi website — it appends an icon to signal that the reader is leaving the documentation site.
Mermaid diagram (via MermaidWithFallback, with a light/dark image fallback):
Guideflow interactive walkthrough:
Interactive query builder: