diff --git a/.github/workflows/auto-label-doc6.yml b/.github/workflows/auto-label-doc6.yml
new file mode 100644
index 0000000000..8fe47145be
--- /dev/null
+++ b/.github/workflows/auto-label-doc6.yml
@@ -0,0 +1,23 @@
+name: Auto Label PRs
+on:
+ pull_request:
+ types:
+ - opened
+
+jobs:
+ auto-label:
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
+
+ steps:
+ - name: Add label to PR
+ uses: actions/github-script@v7
+ with:
+ script: |
+ await github.rest.issues.addLabels({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ labels: ['temp: port to doc6']
+ });
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 142bb03ccb..ae45bc481a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -45,6 +45,8 @@ The Strapi Documentation team has created a complete style guide for you to make
💁 While writing, please consider the [12 Rules of Technical Writing](https://handbook.strapi.io/user-success-manual/12-rules-of-technical-writing) that the Strapi Documentation team will use to assess the quality and consistency of the contribution. 😊
+⚠️ **Important: Please disable any linter or automatic formatting tool(s)** before saving and submitting your files. Not doing so could, at best, add unnecessary formatting changes to the submitted PR or, at worst, prevent Docusaurus from properly rendering some pages.
+
### Working locally: Set up the project
To set up the Docusaurus project on your machine, perform the following steps from a terminal instance:
diff --git a/LICENSE b/LICENSE
index db018546b5..145839b7df 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2,9 +2,7 @@ Copyright (c) 2015-present Strapi Solutions SAS
Portions of the Strapi software are licensed as follows:
-* All software that resides under an "ee/" directory (the “EE Software”), if that directory exists, is licensed under the license defined in "ee/LICENSE".
-
-* All software outside of the above-mentioned directories or restrictions above is available under the "MIT Expat" license as set forth below.
+* All software is available under the "MIT Expat" license as set forth below.
MIT Expat License
diff --git a/docusaurus/docs/cloud/account/account-billing.md b/docusaurus/docs/cloud/account/account-billing.md
index 6d504acdb6..ac41927a4a 100644
--- a/docusaurus/docs/cloud/account/account-billing.md
+++ b/docusaurus/docs/cloud/account/account-billing.md
@@ -16,11 +16,11 @@ import InvoiceStatus from '/docs/snippets/invoices-statuses.md'
# Account billing & invoices
-Through the *Profile* page, accessible by clicking on your profile picture on the top right hand corner of the interface then clicking on **Profile**, you can access the [ *Billing*](#account-billing) and [ *Invoices*](#account-invoices) tabs.
+Through the *Profile* page, accessible by clicking on your profile picture on the top right hand corner of the interface then clicking on **Profile**, you can access the [*Billing*](#account-billing) and [*Invoices*](#account-invoices) tabs.
## Account billing
-The  *Billing* tab displays and enables you to modify the billing details and payment method set for the account.
+The *Billing* tab displays and enables you to modify the billing details and payment method set for the account.
-The *Payment method* section of the  *Billing* tab allows you to manage the credit cards that can be used for the Strapi Cloud projects. The *Billing details* section requires to be filled in, at least for the mandatory fields, as this information will be the default billing details for all Strapi Cloud projects related to your account.
+The *Payment method* section of the *Billing* tab allows you to manage the credit cards that can be used for the Strapi Cloud projects. The *Billing details* section requires to be filled in, at least for the mandatory fields, as this information will be the default billing details for all Strapi Cloud projects related to your account.
### Adding a new credit card
-1. In the *Payment method* section of the  *Billing* tab, click on the **Add card** button.
+1. In the *Payment method* section of the *Billing* tab, click on the **Add card** button.
2. Fill in the following fields:
| Field name | Description |
@@ -46,14 +46,15 @@ The *Payment method* section of the  icon, then **Switch as primary**.
+- The first credit card to be added as payment method will be by default the primary card. You can change the role by clicking on the icon, then **Set as primary** on another card.
+- Be aware that you also have the possibility to use a dedicated card at projects-level. It will allow you to use different cards for different projects (see [Project Settings > Billing & Usage](/cloud/projects/settings#billing--usage)).
:::
### Deleting a credit card
To remove a credit card from the list of payment methods for the account:
-1. Click on the  icon of the credit card you wish to delete.
+1. Click on the icon of the credit card you wish to delete.
2. Click **Remove card**. The card is immediately deleted.
:::note
@@ -62,7 +63,7 @@ You cannot delete the primary card as at least one credit card must be available
## Account invoices
-The  *Invoices* tab displays the complete list of invoices for all your Strapi Cloud projects.
+The *Invoices* tab displays the complete list of invoices for all your Strapi Cloud projects.
+For GitLab, Groups and Subgroups organizations are not supported at the moment.
+:::
+
### Deleting Strapi Cloud account
You can delete your Strapi Cloud account, but it will be permanent and irreversible. All associated projects and their data will be deleted as well and the subscriptions for the projects will automatically be canceled.
-1. In the *Delete account* section of the  *General* tab, click on the **Delete account** button.
+1. In the *Delete account* section of the *General* tab, click on the **Delete account** button.
2. In the dialog, type `DELETE` in the textbox.
3. Confirm the deletion of your account by clicking on the **Delete** button.
-
-## Preferences
-
-The  *Preferences* tab enables you to choose the appearance of your Strapi Cloud dashboard: either the Light or Dark theme.
-
-
diff --git a/docusaurus/docs/cloud/advanced/database.md b/docusaurus/docs/cloud/advanced/database.md
index c5d7def61f..27e5648796 100644
--- a/docusaurus/docs/cloud/advanced/database.md
+++ b/docusaurus/docs/cloud/advanced/database.md
@@ -30,9 +30,12 @@ While it's possible to use an external database with Strapi Cloud, you should do
- Strapi can't provide security or support with external databases used with Strapi Cloud.
:::
-
## Configuration
+:::caution
+To ensure a smooth deployment, it is recommended to not change the names of the environment variables.
+:::
+
The project `./config/database.js` or `./config/database.ts` file must match the configuration found in the [environment variables in database configurations](https://docs.strapi.io/dev-docs/configurations/database#environment-variables-in-database-configurations) section.
Before pushing changes, add environment variables to the Strapi Cloud project:
@@ -54,10 +57,6 @@ Before pushing changes, add environment variables to the Strapi Cloud project:
4. Click **Save**.
-:::caution
-To ensure a smooth deployment, it is recommended to not change the names of the environment variables.
-:::
-
## Deployment
To deploy the project and utilize the external database, push the changes from earlier. This will trigger a rebuild and new deployment of the Strapi Cloud project.
diff --git a/docusaurus/docs/cloud/advanced/email.md b/docusaurus/docs/cloud/advanced/email.md
index b8613a5e26..c4e40eafb6 100644
--- a/docusaurus/docs/cloud/advanced/email.md
+++ b/docusaurus/docs/cloud/advanced/email.md
@@ -42,7 +42,11 @@ Using either `npm` or `yarn`, install the provider plugin in your local Strapi p
### Configure the Provider
-In your Strapi project, create a `./config/env/production/plugins.js` or `./config/env/production/plugins.ts` file with the following content:
+:::caution
+The file structure must match the below path **exactly**, or the configuration will not be applied to Strapi Cloud.
+:::
+
+To configure a 3rd-party email provider in your Strapi project, create or edit the plugins configuration file for your production environment `./config/env/production/plugins.js|ts` by adding upload configuration options as follows:
@@ -84,10 +88,6 @@ export default ({ env }) => ({
-:::caution
-The file structure must match the above path exactly, or the configuration will not be applied to Strapi Cloud.
-:::
-
Each provider will have different configuration settings available. Review the respective entry for that provider in the [Marketplace](https://market.strapi.io/providers).
**Example:**
diff --git a/docusaurus/docs/cloud/advanced/upload.md b/docusaurus/docs/cloud/advanced/upload.md
index 6ddc24043a..b61dbbe5f8 100644
--- a/docusaurus/docs/cloud/advanced/upload.md
+++ b/docusaurus/docs/cloud/advanced/upload.md
@@ -44,6 +44,10 @@ Using either `npm` or `yarn`, install the provider plugin in your local Strapi p
### Configure the Provider
+:::caution
+The file structure must match the below path **exactly**, or the configuration will not be applied to Strapi Cloud.
+:::
+
To configure a 3rd-party upload provider in your Strapi project, create or edit the plugins configuration file for your production environment `./config/env/production/plugins.js|ts` by adding upload configuration options as follows:
@@ -85,10 +89,6 @@ upload: {
-:::caution
-The file structure must match the above path exactly, or the configuration will not be applied to Strapi Cloud.
-:::
-
Each provider will have different configuration settings available. Review the respective entry for that provider in the [Marketplace](https://market.strapi.io/providers).
**Example:**
diff --git a/docusaurus/docs/cloud/cli/cloud-cli.md b/docusaurus/docs/cloud/cli/cloud-cli.md
index 8b957f57fe..e0249375f4 100644
--- a/docusaurus/docs/cloud/cli/cloud-cli.md
+++ b/docusaurus/docs/cloud/cli/cloud-cli.md
@@ -9,7 +9,7 @@ tags:
pagination_next: cloud/advanced/database
---
-# Command Line Interface (CLI)
+# Command Line Interface (CLI)
Strapi Cloud comes with a Command Line Interface (CLI) which allows you to log in and out, and to deploy a local project without it having to be hosted on a remote git repository. The CLI works with both the `yarn` and `npm` package managers.
@@ -41,14 +41,20 @@ Deploy a new local project (< 100MB) in Strapi Cloud.
strapi deploy
```
-This command must be used after the `login` one. It deploys a local Strapi project on Strapi Cloud, without having to host it on a remote git repository beforehand. The terminal will inform you when the project is successfully deployed on Strapi Cloud.
+This command must be used after the `login` one. It deploys a local Strapi project on Strapi Cloud, without having to host it on a remote git repository beforehand.
-Once the project is first deployed on Strapi Cloud with the CLI, the `deploy` command can be reused to trigger a new deployment of the same project.
-
-:::caution
-The `deploy` command can only be used by new users who have never created a Strapi Cloud project, and for which the free trial is still available. Once a project is deployed with the CLI, it isn't possible to deploy another project on the same Strapi Cloud account with the CLI.
+:::note
+If you have any free trial available, the deploy command will create automatically a new project on Strapi Cloud, unless you previously link your local project to an existing project by using the `strapi link` command.
:::
+When you use this command, you’ll be asked to select a target environment. To skip this prompt, you can either:
+- Use the `--env` flag (e.g., `strapi deploy --env `)
+- Set a default environment with `strapi cloud environment link` [command](#cloud-environment-link), so deployments automatically go to that environment.
+
+The terminal will inform you when the project is successfully deployed on Strapi Cloud.
+
+Once the project is first deployed on Strapi Cloud with the CLI, the `deploy` command can be reused to trigger a new deployment of the same project.
+
:::note
Once you deployed your project, if you visit the Strapi Cloud dashboard, you may see some limitations as well as impacts due to creating a Strapi Cloud project that is not in a remote repository and which was deployed with the CLI.
@@ -56,19 +62,23 @@ Once you deployed your project, if you visit the Strapi Cloud dashboard, you may
- Some buttons, such as the **Trigger deploy** button, will be greyed out and unclickable since, unless you have [connected a git repository to your Strapi Cloud project](/cloud/getting-started/deployment-cli#automatically-deploying-subsequent-changes).
:::
-## strapi link
+## strapi link
**Alias:** `strapi cloud:link`
Links project in current folder to an existing project in Strapi Cloud.
+:::note
+Linking a project to Strapi Cloud doesn't limit it to Strapi Cloud alone; you can still deploy and manage it in your own self-hosted environment as needed.
+:::
+
```bash
strapi link
```
This command connects your local project in the current directory with an existing project on your Strapi Cloud account. You will be prompted to select the project you wish to link from a list of available projects hosted on Strapi Cloud.
-## strapi projects
+## strapi projects
**Alias:** `strapi cloud:projects`
@@ -78,7 +88,34 @@ Lists all Strapi Cloud projects associated with your account.
strapi projects
```
-This command retrieves and displays a list of all projects hosted on your Strapi Cloud account.
+
+```bash
+strapi link
+```
+
+This command connects your local project in the current directory with an existing project on your Strapi Cloud account. You will be prompted to select the project you wish to link from a list of available projects hosted on Strapi Cloud.
+
+## strapi cloud environments {#cloud-environments}
+
+**Alias:** `strapi cloud environment list`
+
+Lists all environments associated with your Strapi Cloud Project.
+
+```bash
+strapi cloud environments
+```
+
+This command retrieves and displays a list of all environments belonging to your Strapi Cloud project.
+
+## strapi cloud environment link {#cloud-environment-link}
+
+Links your local project to a specific environment in your Strapi Cloud project.
+
+```bash
+strapi cloud environment link
+```
+
+This command shows a list of all environments in your Strapi Cloud project and lets you choose one. The selected environment will then be the default for direct deployments.
## strapi logout
diff --git a/docusaurus/docs/cloud/getting-started/cloud-fundamentals.md b/docusaurus/docs/cloud/getting-started/cloud-fundamentals.md
index 98a5469f80..65e54b90b8 100644
--- a/docusaurus/docs/cloud/getting-started/cloud-fundamentals.md
+++ b/docusaurus/docs/cloud/getting-started/cloud-fundamentals.md
@@ -14,9 +14,9 @@ Before going any further into this Strapi Cloud documentation, we recommend you
- **Hosting Platform** Strapi Cloud is a hosting platform that allows to deploy already existing Strapi projects created with Strapi CMS (Content Management System). Strapi Cloud is *not* the SaaS (Software as a Service) version of Strapi CMS. Feel free to refer to the [Developer Documentation](https://docs.strapi.io/dev-docs/intro) and [User Guide](https://docs.strapi.io/user-docs/intro) to learn more about Strapi CMS.
-- **Strapi Cloud Pricing Plans** As a Strapi Cloud user you have the choice between 3 tiers: Developer, Pro and Team. Depending on the tier, you have access to different functionalities, support and customization options (see [Pricing page](https://strapi.io/pricing-cloud) for more details). In this Strapi Cloud documentation, the , , and badges can be displayed beside a section's title to indicate for which tier the feature is available.
+- **Strapi Cloud Pricing Plans** As a Strapi Cloud user you have the choice between 3 tiers: Developer, Pro and Team. Depending on the tier, you have access to different functionalities, support and customization options (see [Pricing page](https://strapi.io/pricing-cloud) for more details). In this Strapi Cloud documentation, the , , and badges can be displayed below a section's title to indicate for which tier the feature is available.
-- **Strapi CMS Enterprise features** Some of Strapi features, usually accessible via the Enterprise Edition of Strapi CMS, are included in some Strapi Cloud tiers (see [Pricing page](https://strapi.io/pricing-cloud) and [Information on billing & usage](/cloud/getting-started/usage-billing) for more details). These features, highlighted with an badge, are documented in the [User Guide](https://docs.strapi.io/user-docs/intro) and the [Developer Documentation](https://docs.strapi.io/dev-docs/intro).
+- **Strapi CMS features** The Strapi Cloud plans include some Strapi CMS features (see [Pricing page](https://strapi.io/pricing-cloud) for more details). These features, highlighted with a or an badge, are documented in the [User Guide](https://docs.strapi.io/user-docs/intro) and the [Developer Documentation](https://docs.strapi.io/dev-docs/intro).
- **Types of Strapi Cloud users** There can be 2 types of users on a Strapi Cloud project: owners and maintainers. The owner is the one who has created the project and has therefore access to all features and options for the project. Maintainers are users who have been invited to contribute to an already created project by its owner. Maintainers, as documented in the [Collaboration](/cloud/projects/collaboration) page, cannot view and access all features and options from the Strapi Cloud dashboard.
diff --git a/docusaurus/docs/cloud/getting-started/deployment-cli.md b/docusaurus/docs/cloud/getting-started/deployment-cli.md
index cbe29b1086..5f83e9449e 100644
--- a/docusaurus/docs/cloud/getting-started/deployment-cli.md
+++ b/docusaurus/docs/cloud/getting-started/deployment-cli.md
@@ -17,8 +17,8 @@ This is a step-by-step guide for deploying your project on Strapi Cloud for the
:::prerequisites
Before you can deploy your Strapi application on Strapi Cloud using the Command Line Interface, you need to have the following prerequisites:
-- Be a first-time Strapi Cloud user: you must never have deployed a project with Strapi Cloud before, and your free trial must still be available.
-- Have a Google, GitHub or GitLab account.
+- Have remaining free trials.
+- Have a Google, GitHub or GitLab account. For GitLab, Groups and Subgroups organizations are not supported at the moment.
- Have an already created Strapi project (see [Installing from CLI in the Developer Documentation](/dev-docs/installation/cli)), stored locally. The project must be less than 100MB.
- Have available storage in your hard drive where the temporary folder of your operating system is stored.
:::
@@ -89,7 +89,7 @@ Another option is to enable automatic deployment through a git repository. To do
Automatic deployment is compatible with all other deployment methods, so once a git repository is connected, you can trigger a new deployment to Strapi Cloud [from the Cloud dashboard](/cloud/projects/deploys), [from the CLI](/cloud/cli/cloud-cli#strapi-deploy), or by pushing new commits to your connected repository.
:::
-## ⏩ What to do next?
+## What to do next?
Now that you have deployed your project via the Command Line Interface, we encourage you to explore the following ideas to have an even more complete Strapi Cloud experience:
diff --git a/docusaurus/docs/cloud/getting-started/deployment.md b/docusaurus/docs/cloud/getting-started/deployment.md
index 1ce25f7973..bbd1e31d81 100644
--- a/docusaurus/docs/cloud/getting-started/deployment.md
+++ b/docusaurus/docs/cloud/getting-started/deployment.md
@@ -14,7 +14,7 @@ tags:
- Strapi Cloud plan
---
-# Project deployment with the Cloud dashboard
+# Project deployment with the Cloud dashboard
This is a step-by-step guide for deploying your project on Strapi Cloud for the first time, using the Cloud dashboard.
@@ -24,7 +24,9 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
* Strapi version `4.8.2` or higher
* Project database must be compatible with PostgreSQL. Strapi does not support and does not recommend using any external databases, though it's possible to configure one (see [advanced database configuration](/cloud/advanced/database)).
* Project(s) source code hosted on [GitHub](https://github.com) or [GitLab](https://about.gitlab.com/). The connected repository can contain multiple Strapi applications. Each Strapi app must be in a separate directory.
-* Specifically for GitLab: at least have "[Maintainer](https://docs.gitlab.com/ee/user/permissions.html)" permissions for the project to import on Strapi Cloud.
+* Specifically for GitLab:
+ * at least have "[Maintainer](https://docs.gitlab.com/ee/user/permissions.html)" permissions for the project to import on Strapi Cloud.
+ * Groups and Subgroups organizations are not supported at the moment.
:::
## Logging in to Strapi Cloud
@@ -58,8 +60,8 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
@@ -144,10 +146,10 @@ Before you can deploy your Strapi application on Strapi Cloud using the Cloud da
| Setting name | Instructions |
|--------------|---------------------------------------------------------------------------------------------------------|
- | Display name | Write the name of your Strapi app, this is fetched from the repository name but can be edited. It is automatically converted to slug format (`my-strapi-app`). |
+ | Display name | Write the name of your Strapi app, this is fetched from the repository name but can be edited. It is automatically converted to slug format (`my-strapi-app`). |
| Git branch | Choose from the drop-down the default branch to use for this deployment. This uses the default branch of the repository. |
| Deploy on push | Check the box to automatically deploy the latest changes from the selected branch. When disabled, you will need to manually deploy the latest changes. |
- | Region | Choose the geographic location of the servers where your Strapi application is hosted. Selected region can either be New York in North America (default) or Amsterdam in Europe. |
+ | Region | Choose the geographic location of the servers where your Strapi application is hosted. Selected region can either be New York in North America (default), Amsterdam in Europe, Singapore in Asia or Sydney in Oceania. |
:::note
The Git branch and "Deploy on push" settings can be modified afterwards through the project's setting, however the project name and hosting region setting can only be chosen during the creation of the project (see [Project Settings](/cloud/projects/settings)).
@@ -182,7 +184,7 @@ If you chose the free trial, this billing step will be skipped as you will not b
During the free trial, will be kept informed of the number of remaining free days. You will then be notified by email and via the Strapi Cloud dashboard whenever it is time to fill in your billing information to move to a paid plan.
-👉 Skip to step 5 of the section below to finalise the creation of your project.
+ Skip to step 5 of the section below to finalise the creation of your project.
:::
1. Click on the **Continue to billing** button. You will directly be redirected to the second and final project deployment interface. There you can review all your new project setup information, enter payment & billing details and receive your invoice.
@@ -195,7 +197,7 @@ During the free trial, will be kept informed of the number of remaining free day
}}
/>
-2. Review your project: make sure the plan and setup information are correct. If needed, click the  **Edit** button to be redirected to the first interface of the project creation and fix any mistake.
+2. Review your project: make sure the plan and setup information are correct. If needed, click the **Edit** button to be redirected to the first interface of the project creation and fix any mistake.
3. In the Payment section, fill in at least all mandatory elements for *Payment method* and *Billing information*.
@@ -207,7 +209,7 @@ During the free trial, will be kept informed of the number of remaining free day
Create your Admin user after the initial deployment is complete. Do not share your application URL with anyone until you have created your Admin user.
:::
-## ⏩ What to do next?
+## What to do next?
Now that you have deployed your project via the Cloud dashboard, we encourage you to explore the following ideas to have an even more complete Strapi Cloud experience:
diff --git a/docusaurus/docs/cloud/getting-started/intro.md b/docusaurus/docs/cloud/getting-started/intro.md
index 1a4f36d376..7e87ce3a68 100644
--- a/docusaurus/docs/cloud/getting-started/intro.md
+++ b/docusaurus/docs/cloud/getting-started/intro.md
@@ -13,15 +13,14 @@ pagination_next: cloud/getting-started/cloud-fundamentals
# Welcome to the Strapi Cloud Docs!
-
-
+:::callout Developer Docs, User Guide, and Strapi Cloud documentation
The documentation for Strapi contains 3 main sections, accessible from the top navigation bar:
-- 🧑💻 The **[Developer Docs](/dev-docs/intro)** contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
-- 🧑🏫 The **[User Guide](/user-docs/intro)** is all about using Strapi's admin panel.
-- ☁️ The **Strapi Cloud** documentation that you're currently reading is about deploying your Strapi application to Strapi Cloud and managing your Strapi Cloud projects and settings.
+- The **[Developer Docs](/dev-docs/intro)** contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
+- The **[User Guide](/user-docs/intro)** is all about using Strapi's admin panel.
+- ️ The **Strapi Cloud** documentation that you're currently reading is about deploying your Strapi application to Strapi Cloud and managing your Strapi Cloud projects and settings.
+:::
-
This documentation contains all technical documentation related to the setup, deployment, update and customization of your Strapi Cloud account and applications.
diff --git a/docusaurus/docs/cloud/getting-started/usage-billing.md b/docusaurus/docs/cloud/getting-started/usage-billing.md
index c0676af03c..264bc65913 100644
--- a/docusaurus/docs/cloud/getting-started/usage-billing.md
+++ b/docusaurus/docs/cloud/getting-started/usage-billing.md
@@ -19,7 +19,7 @@ Strapi Cloud offers a free 14 days trial for all new accounts, and 3 paid plans:
| Feature | Free Trial | Developer | Pro | Team |
| --- | --- | --- | --- | --- |
-| **Seats** | 10 (up to 10 extra) | 1 (up to 3 extra) | 5 (up to 20 extra) | 10 (up to 50 extra) |
+| **Seats** | 10 | 1 (up to 2 extra) | 5 (up to 15 extra) | 10 (up to 40 extra) |
| **Database Entries** | 1,000 | 1,000 | 100,000 | 1,000,000 |
| **Assets Storage** | 5GB | 15GB | 150GB | 500GB |
| **Assets Bandwidth** | 50GB | 50GB per month | 500GB per month | 1,000GB per month |
@@ -60,7 +60,7 @@ The usage limits of additional environments are the same as for the project's pr
Seats represent the maximum number of users that can access the Strapi admin panel. Each plan comes with a default number of seats.
-You can add more seats either by upgrading to a higher plan, or manually adding individual seats as desired. Seats can be added from the  *Billing & Usage* tab of a project's settings (see [Managing project's number of seats](/cloud/projects/settings#managing-projects-number-of-seats)).
+You can add more seats either by upgrading to a higher plan, or manually adding individual seats as desired. Seats can be added from the *Billing & Usage* tab of a project's settings (see [Managing project's number of seats](/cloud/projects/settings#managing-projects-number-of-seats)).
There is however a maximum number of seats that can be added per plan:
@@ -104,7 +104,7 @@ If you do not resolve the issue within 30 days, your suspended project will be d
#### Project suspension after subscription cancellation
-If you don't pay the invoice, the subscription of your project will automatically be cancelled and the project will be suspended. You can reactivate the subscription through the billing modal (see [Edit subscription](/cloud/account/account-billing#account-billing)).
+If you don't pay the invoice, the subscription of your project will automatically be cancelled and the project will be suspended. You can reactivate the subscription through the billing modal (see [Edit subscription](/cloud/account/account-billing)).
1. Log into the billing modal and go to the *Subscription details* of the subscription associated with the suspended project. You should see a warning message confirming that the subscription was canceled for the following reason: "Not Paid".
2. Go back to the homepage of the billing modal, listing subscriptions and billing options.
diff --git a/docusaurus/docs/cloud/projects/collaboration.md b/docusaurus/docs/cloud/projects/collaboration.md
index 5244ef9bb5..ee3f27089f 100644
--- a/docusaurus/docs/cloud/projects/collaboration.md
+++ b/docusaurus/docs/cloud/projects/collaboration.md
@@ -20,6 +20,7 @@ Users invited to collaborate on a project, called maintainers, do not have the s
- Cannot share the project themselves to someone else
- Cannot delete the project from the project settings
- Cannot access the *Billing* section of project settings
+- Cannot adjust repository settings, including reconnecting repositories
## Sharing a project
diff --git a/docusaurus/docs/cloud/projects/deploys-history.md b/docusaurus/docs/cloud/projects/deploys-history.md
index 7ab710f5e8..698b281a96 100644
--- a/docusaurus/docs/cloud/projects/deploys-history.md
+++ b/docusaurus/docs/cloud/projects/deploys-history.md
@@ -41,7 +41,7 @@ Each card displays the following information:
## Accessing deployment details & logs
-From the *Deployments* tab, you can hover a deployment card to make the  **Show details** button appear. Clicking on this button will redirect you to the *Deployment details* page which contains the deployment's detailed logs.
+From the *Deployments* tab, you can hover a deployment card to make the **Show details** button appear. Clicking on this button will redirect you to the *Deployment details* page which contains the deployment's detailed logs.
-In the *Build logs* and *Deployment logs* sections of the page you can click on the arrow buttons   to show or hide the build and deployment logs of the deployment.
+In the *Build logs* and *Deployment logs* sections of the page you can click on the arrow buttons to show or hide the build and deployment logs of the deployment.
:::tip
-Click the  **Copy to clipboard** button to copy the log contents.
+Click the **Copy to clipboard** button to copy the log contents.
:::
In the right side of the *Deployment details* page is also displayed the following information:
diff --git a/docusaurus/docs/cloud/projects/deploys.md b/docusaurus/docs/cloud/projects/deploys.md
index dd20d2a6cb..6f483f2989 100644
--- a/docusaurus/docs/cloud/projects/deploys.md
+++ b/docusaurus/docs/cloud/projects/deploys.md
@@ -42,7 +42,7 @@ If for any reason you want to cancel an ongoing and unfinished deployment:
2. Click on the **Cancel deployment** button in the top right corner. The status of the deployment will automatically change to *Cancelled*.
:::tip
-You can also cancel a deployment from the *Deployments* tab which lists the deployments history. The card of ongoing deployment with the *Building* status will display a  button for cancelling the deployment.
+You can also cancel a deployment from the *Deployments* tab which lists the deployments history. The card of ongoing deployment with the *Building* status will display a button for cancelling the deployment.
:::
in the top navigation of the Cloud dashboard.
It displays a list of the latest notifications for all your existing projects. Clicking on a notification card from the list will redirect you to the *Log details* page of the corresponding deployment (more information in [Deploy history & logs](/cloud/projects/deploys-history#accessing-deployment-details--logs)).
diff --git a/docusaurus/docs/cloud/projects/overview.md b/docusaurus/docs/cloud/projects/overview.md
index 1862003933..8021e9a08a 100644
--- a/docusaurus/docs/cloud/projects/overview.md
+++ b/docusaurus/docs/cloud/projects/overview.md
@@ -32,7 +32,7 @@ Each project card displays the following information:
* *Suspended*, if the project has been suspended (refer to [Project suspension](/cloud/getting-started/usage-billing#project-suspension) to reactivate the project)
* *Incompatible version*, if the project is using a Strapi version that is not compatible with Strapi Cloud
-Each project card also displays a  menu icon to access the following options:
+Each project card also displays a menu icon to access the following options:
* **Visit App**: to be redirected to the application
* **Go to Deployments**: to be redirected to the [*Deploys*](/cloud/projects/deploys) page
* **Go to Settings**: to be redirected to the [*Settings*](/cloud/projects/settings) page
@@ -50,17 +50,20 @@ From the *Projects* page, click on any project card to access is dashboard. It d
/>
From the dashboard's header of a chosen project, you can:
-- use the **Share** button to invite users to collaborate on the project (see [Collaboration](/cloud/projects/collaboration)) and see the icons of those who have already been invited ,
-- use the  **Settings** button to access the settings of the project and its existing environments ,
-- choose which environment to visualise for the project ,
-- trigger a new deployment (see [Deployments management](/cloud/projects/deploys)) and visit your application .
+- use the navigation path to navigate between your projects and environments ,
+- use the **Share** button to invite users to collaborate on the project (see [Collaboration](/cloud/projects/collaboration)) and see the icons of those who have already been invited ,
+- use the  **Settings** button to access the settings of the project and its existing environments ,
+- choose which environment to visualise for the project or add a new environment ,
+- trigger a new deployment (see [Deployments management](/cloud/projects/deploys)) and visit your application .
Your project's dashboard also displays:
-- the *Deployments* and *Runtime logs* tabs, to see the deployments history (more details in [Deploy history and logs](/cloud/projects/deploys-history)) and the runtime logs of the project (see [dedicated documentation page](/cloud/projects/runtime-logs))
-- the project and environment details in a box on the right of the interface , including:
+- the *Deployments* and *Runtime logs* tabs, to see the deployments history (more details in [Deploy history and logs](/cloud/projects/deploys-history)) and the runtime logs of the project (see [dedicated documentation page](/cloud/projects/runtime-logs))
+- the project and environment details in a box on the right of the interface , including:
+ - a Manage button to be redirected to the environment’s settings,
- the number of API calls and database entries,
- the current usage for assets bandwidth and storage,
- - the name of the branch and a **Manage** button to be redirect to the branch settings (see [Modifying git repository & branch](/cloud/projects/settings#modifying-git-repository--branch)),
+ - the name of the branch,
- the name of the base directory,
- - the Strapi version number.
+ - the Strapi version number,
+ - the application url.
diff --git a/docusaurus/docs/cloud/projects/runtime-logs.md b/docusaurus/docs/cloud/projects/runtime-logs.md
index e4cb2fd759..f4b3cc43e9 100644
--- a/docusaurus/docs/cloud/projects/runtime-logs.md
+++ b/docusaurus/docs/cloud/projects/runtime-logs.md
@@ -9,8 +9,6 @@ tags:
- Strapi Cloud
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Runtime logs
From a chosen project's dashboard, the *Runtime logs* tab displays the live logs of the project.
diff --git a/docusaurus/docs/cloud/projects/settings.md b/docusaurus/docs/cloud/projects/settings.md
index 6a71a2f58b..debdbb1779 100644
--- a/docusaurus/docs/cloud/projects/settings.md
+++ b/docusaurus/docs/cloud/projects/settings.md
@@ -16,25 +16,25 @@ import InvoiceStatus from '/docs/snippets/invoices-statuses.md'
# Project settings
-From a chosen project's dashboard, the  **Settings** button, located in the header, enables you to manage the configurations and settings for your Strapi Cloud project and its environments.
+From a chosen project's dashboard, the **Settings** button, located in the header, enables you to manage the configurations and settings for your Strapi Cloud project and its environments.
The settings' menu on the left side of the interface is separated into 2 categories: the settings for the entire project and the settings specific to any configured environment for the project.
## Project-level settings
There are 5 tabs available for the project's settings:
--  [*General (project)*](#general),
--  [*Environments*](#environments),
--  [*Billing & Usage*](#billing--usage),
--  [Plans](#plans),
-- and  [Invoices](#invoices).
+- [*General*](#general),
+- [*Environments*](#environments),
+- [*Billing & Usage*](#billing--usage),
+- [Plans](#plans),
+- and [Invoices](#invoices).
-### General (project) {#general}
+### General
-The  *General* tab for the project-level settings enables you to check and update the following options for the project:
+The *General* tab for the project-level settings enables you to check and update the following options for the project:
- *Basic information*, to see:
- - the name of your Strapi Cloud project, used to identify the project on the Cloud Dashboard, Strapi CLI, and deployment URLs. The project name is set at project creation (see [Project creation](/cloud/getting-started/deployment)) and cannot be modified afterwards.
+ - the name of your Strapi Cloud project — used to identify the project on the Cloud Dashboard, Strapi CLI, and deployment URLs — and change it (see [Renaming project](#renaming-project)).
- the chosen hosting region for your Strapi Cloud project, meaning the geographical location of the servers where the project and its data and resources are stored. The hosting region is set at project creation (see [Project creation](/cloud/getting-started/deployment)) and cannot be modified afterwards.
- the app's internal name for the project, which can be useful for debug & support purposes.
- *Connected Git repository*: to change the repository and branch used for your project (see [Modifying git repository & branch](#modifying-git-repository--branch)). Also allows to enable/disable the "deploy on push" option.
@@ -48,6 +48,14 @@ The  *General* tab for the project-
}}
/>
+#### Renaming project
+
+The project name is set at project creation (see [Project creation](/cloud/getting-started/deployment)) and can be modified afterwards via the project's settings.
+
+1. In the *Basic information* section of the *General* tab, click on the edit button.
+2. In the dialog, write the new project name of your choice in the *Project name* textbox.
+3. Click on the **Rename** button to confirm the project name modification.
+
#### Modifying git repository & branch
The GitHub or GitLab repository, branch and base directory for a Strapi Cloud project are by default chosen at the creation of the project (see [Creating a project](/cloud/getting-started/deployment)). After the project's creation, via the project's settings, it is possible to update the project's repository or switch to another git provider.
@@ -56,7 +64,7 @@ The GitHub or GitLab repository, branch and base directory for a Strapi Cloud pr
Updating the git repository could result in the loss of the project and its data, for instance if the wrong repository is selected or if the data schema between the old and new repository doesn't match.
:::
-1. In the *Connected git repository* section of the  *General* tab, click on the **Update repository** button. You will be redirected to another interface.
+
2. (optional) If you wish to not only update the repository but switch to another git provider, click on the **Switch Git provider** button at the top right corner of the interface. You will be redirected to the chosen git provider's authorization settings before getting back to the *Update repository* interface.
3. In the *Update repository* section, fill in the 2 available settings:
@@ -65,7 +73,7 @@ Updating the git repository could result in the loss of the project and its data
| Account | Choose an account from the drop-down list. |
| Repository | Choose a repository from the drop-down list. |
-4. In the *Select Git branches* section, fill in the available settings for any of your environments. Note that the branch can be edited per environment via its own settings, see [General (environment)](#general-environment).
+4. In the *Select Git branches* section, fill in the available settings for any of your environments. Note that the branch can be edited per environment via its own settings, see [General (environment)](#environments).
| Setting name | Instructions |
| --------------- | ------------------------------------------------------------------------ |
@@ -74,13 +82,13 @@ Updating the git repository could result in the loss of the project and its data
| Auto-deploy | Tick the box to automatically trigger a new deployment whenever a new commit is pushed to the selected branch. Untick it to disable the option. |
5. Click on the **Update repository** button at the bottom of the *Update repository* interface.
-6. In the *Manage repository* dialog, confirm your changes by clicking on the **Relink repository** button.
+6. In the *Update repository* dialog, confirm your changes by clicking on the **Confirm** button.
#### Deleting Strapi Cloud project
You can delete any Strapi Cloud project, but it will be permanent and irreversible. Associated domains, deployments and data will be deleted as well and the subscription for the project will automatically be cancelled.
-1. In the *Delete project* section of the  *General* tab, click on the **Delete project** button.
+1. In the *Delete project* section of the ! *General* tab, click on the **Delete project** button.
2. In the dialog, select the reason why you are deleting your project. If selecting "Other" or "Missing feature", a textbox will appear to let you write additional information.
3. Confirm the deletion of your project by clicking on the **Delete project** button at the bottom of the dialog.
@@ -89,7 +97,7 @@ You can delete any Strapi Cloud project, but it will be permanent and irreversib
The  *Environments* tab allows to see all configured environments for the Strapi Cloud project, as well as to create new ones. Production is the default environment, which cannot be deleted. Other environments can be created (depending on the subscription plan for your project) to work more safely on isolated instances of your Strapi Cloud project (e.g. a staging environment where tests can be made before being available on production).
:::tip
-Clicking on the **Manage** button for any environment will redirect you to the environment's own general settings, where it is possible to change the Node version, edit the git branches and delete or reset the environment. Please [refer to the dedicated documentation](#general-environment) for more information.
+Clicking on the **Manage** button for any environment will redirect you to the environment's own general settings, where it is possible to change the Node version, edit the git branches and delete or reset the environment. Please [refer to the dedicated documentation](#environments) for more information.
:::
+:::tip
+A new environment can also be added from the [project dashboard](/cloud/projects/overview#accessing-a-projects-dashboard).
+:::
+
To create a new environment:
+
1. Click on the **Add a new environment** button.
2. In the dialog that opens, you can see the price for the new environment and the date of the next invoice.
3. Fill in the available settings:
+
| Setting name | Instructions |
| ---------------- | ------------------------------------------------------------------------ |
| Environment name | (mandatory) Write a name for your project's new environment. |
| Git branch | (mandatory) Select the right branch for your new environment. |
| Base directory | Write the name of the base directory of your new environment. |
+ | Import variables | Tick the box to import variable names from an existing environment. Values will not be imported, and all variables will remain blank. |
| Auto-deploy | Tick the box to automatically trigger a new deployment whenever a new commit is pushed to the selected branch. Untick it to disable the option. |
4. Click on the **Add environment** button to create your project's new environment. A new deployment will automatically be triggered.
@@ -121,16 +136,20 @@ If the creation of a new environment fails but you are still charged, try creati
### Billing & Usage
-The  *Billing & Usage* displays your next estimated payment, all information on the current subscription plan and a detailed summary of the project's and its environments' usage. It also allows you to directly [manage the number of seats](#managing-projects-number-of-seats) and add new environments (please [refer to the documentation in the Environments section](#environments)) for your project.
+The *Billing & Usage* displays your next estimated payment, all information on the current subscription plan and a detailed summary of the project's and its environments' usage. It also allows you to directly [manage the number of seats](#managing-projects-number-of-seats) and add new environments (please [refer to the documentation in the Environments section](#environments)) for your project.
Through this tab, you also have the possibility to:
-- click the **Change** button to be redirected to the  *Plans* tab, where you can change you subscription plan ([see related documentation](#plans)),
-- click the **Edit** button to be redirected to the  *Billing* tab of your profile page, where you can edit the payment method (see [related documentation](/cloud/account/account-billing)).
+- click the **Change** button to be redirected to the *Plans* tab, where you can change you subscription plan ([see related documentation](#plans)),
+- click the **Edit** button in order to set a new payment method (see [related documentation](/cloud/account/account-billing)).
+
+:::note
+You can attach a dedicated card to your project by choosing the payment method directly from this page. In that way, you can manage your subscriptions with different cards.
+:::
:::tip
-In the Usage section of the  *Billing & Usage* tab, you can see the current monthly usage of your project compared to the maximum usage allowed by your project's subscription. Use the arrows in the top right corner to see the project's usage for any chosen month.
+In the Usage section of the *Billing & Usage* tab, you can see the current monthly usage of your project compared to the maximum usage allowed by your project's subscription. Use the arrows in the top right corner to see the project's usage for any chosen month.
-Note also that if your usage indicates that another subscription plan would fit better for your project, a message will be displayed in the  *Billing & Usage* tab to advise which plan you could switch to.
+Note also that if your usage indicates that another subscription plan would fit better for your project, a message will be displayed in the *Billing & Usage* tab to advise which plan you could switch to.
:::
*Billing & Usage* tab of your project's settings, click on the **Manage** button next to the displayed number of seats.
2. In the window that opens, select with the drop-down the number of Additional seats of your choice. The cost of the additional seats is automatically calculated and displayed in the window.
3. (optional) Click **I have a discount code**, enter your discount code in the field, and click on the **Apply** button.
4. Click the **Save** button to confirm. You will automatically be billed with the payment method defined in your profile.
##### Removing seats from the project
-1. In the  *Billing & Usage* tab of your project's settings, click on the **Manage** button next to the displayed number of seats.
+1. In the *Billing & Usage* tab of your project's settings, click on the **Manage** button next to the displayed number of seats.
2. In the window that opens, select with the drop-down the number of *Billed seats* you want to keep.
3. Click the **Save button** to confirm. The new, lower number of seats will not be effective until the next month.
### Plans
-The  *Plans* tab displays an overview of the available Strapi Cloud plans and allows you to upgrade or downgrade from your current plan to another.
+The *Plans* tab displays an overview of the available Strapi Cloud plans and allows you to upgrade or downgrade from your current plan to another.
:::note
If you are using the free trial, the *Plan* tab shows a countdown of how many days you have left, as well as indications of the next steps. For more information about the free trial and project suspension, please refer to [Information on billing & usage](/cloud/getting-started/usage-billing).
@@ -184,7 +203,7 @@ When using the free trial, the buttons to upgrade to another plan are greyed out
To upgrade your current plan to a higher one:
-1. In the  *Plans* tab of your project's settings, click on the **Upgrade** button of the plan you want to upgrade to.
+1. In the *Plans* tab of your project's settings, click on the **Upgrade** button of the plan you want to upgrade to.
2. In the window that opens, check the payment details that indicate how much you will have to pay immediately after confirming the upgrade, and the available options.
a. (optional) Click the **Edit** button to select another payment method.
@@ -204,7 +223,7 @@ Note also that you cannot downgrade if you have additional environments (i.e. ex
To downgrade your current plan to a lower one:
-1. In the  *Plans* tab of your project's settings, click on the **Downgrade** button of the plan you want to downgrade to.
+1. In the *Plans* tab of your project's settings, click on the **Downgrade** button of the plan you want to downgrade to.
2. In the window that opens, check the information related to downgrading.
3. Click on the **Downgrade** button to confirm the downgrade of your Strapi project's plan.
@@ -214,7 +233,7 @@ Downgrades are effective from the 1st of the following month. Before that date,
### Invoices
-The  *Invoices* tab displays the full list of invoices for your Strapi Cloud project as well as their status.
+The *Invoices* tab displays the full list of invoices for your Strapi Cloud project as well as their status.
Invoices* tab, you will find the complete list of invoices for
In the project's environments' settings, you first need to select the environment whose settings you would like to configure, using the dropdown. Depending on the chosen environment, there are 3 to 4 tabs available:
--  [*General (environment)*](#general),
--  [*Backups*](#backups), which are only available for the production environment,
--  [*Domains*](#domains),
-- and  [*Variables*](#variables).
+- [*Configuration*](#configuration),
+- [*Backups*](#backups), which are only available for the production environment,
+- [*Domains*](#domains),
+- and [*Variables*](#variables).
-### General (environment)
+### Configuration
-The  *General* tab for the environment-level settings enables you to check and update the following options for the project:
+The *Configuration* tab for the environment-level settings enables you to check and update the following options for the project:
- *Basic information*, to see:
- the name of your Strapi Cloud project's environment. The environment name is set when it is created and cannot be modified afterwards.
- the Node version of the environment: to change the Node version of the project (see [Modifying Node version](#modifying-node-version)).
- the app's internal name for the environment, which can be useful for debug & support purposes.
-- *Connect branch*: to change the branch of the GitHub repository used for your environment (see [Editing Git branch](#editing-git-branch)). Also allows to enable/disable the "deploy on push" option.
+- *Connected branch*: to change the branch of the GitHub repository used for your environment (see [Editing Git branch](#editing-git-branch)). Also allows to enable/disable the "deploy on push" option.
- *Danger zone*: to reset or permanently delete your Strapi Cloud project's environment (see [Resetting & Deleting environment](#resetting--deleting-environment)).
*Configuration* tab, click on the *Node version*'s edit button.
2. Using the *Node version* drop-down in the dialog, click on the version of your choice.
3. Click on the **Save** button.
4. Trigger a new deployment in the environment for which you changed the Node version. If the deployment fails, it is because the Node version doesn't match the version of your Strapi project. You will have to switch to the other Node version and re-deploy your project again.
#### Editing Git branch
-1. In the *Connected git repository* section of the  *General* tab, click on the **Edit branch** button.
-2. In the *Edit branch* dialog, edit the available settings. Note that the branch can be edited for all environments at the same time via the project's settings, see [General (project)](#general).
+
+2. In the *Edit branch* dialog, edit the available settings. Note that the branch can be edited for all environments at the same time via the project's settings, see [General](#general).
| Setting name | Instructions |
| --------------- | ------------------------------------------------------------------------ |
@@ -289,38 +308,41 @@ You can reset or delete any additional environment of your Strapi Cloud project,
Resetting an environment deletes all environments data and resets the variables to their default. To do so:
-1. In the *Danger zone* section of the  *General* tab, click on the **Reset environment** button.
+1. In the *Danger zone* section of the *Configuration* tab, click on the **Reset environment** button.
2. In the dialog that opens, click on the **Continue** button to confirm the environment reset.
3. Fill in the available fields to reset the environment:
+
| Setting name | Instructions |
| --------------- | ------------------------------------------------------------------------ |
| Environment name | (mandatory) Write a name for your project's new environment. |
| Git branch | (mandatory) Choose a branch from the drop-down list. |
| Base directory | Write the path of the base directory in the textbox. |
- | Deploy the project on every commit pushed to this branch | Tick the box to automatically trigger a new deployment whenever a new commit is pushed to the selected branch. Untick it to disable the option. |
+ | Import variables | Tick the box to import variable names from an existing environment. Values will not be imported, and all variables will remain blank. |
+ | Auto-deploy | Deploy the project on every commit pushed to this branch | Tick the box to automatically trigger a new deployment whenever a new commit is pushed to the selected branch. Untick it to disable the option. |
4. Click on the **Reset** button.
##### Deleting an environment
-1. In the *Danger zone* section of the  *General* tab, click on the **Delete environment** button.
+1. In the *Danger zone* section of the *Configuration* tab, click on the **Delete environment** button.
2. Write in the textbox your *Environment name*.
3. Click on the **Delete environment** button to confirm the deletion.
-### Backups {#backups}
+### Backups {#backups}
+
-The  *Backups* tab informs you of the status and date of the latest backup of your Strapi Cloud projects. The databases associated with all existing Strapi Cloud projects are indeed automatically backed up (weekly for Pro plans and daily for Team plans). Backups are retained for a 28-day period. Additionally, you can create a single manual backup.
+The *Backups* tab informs you of the status and date of the latest backup of your Strapi Cloud projects. The databases associated with all existing Strapi Cloud projects are indeed automatically backed up (weekly for Pro plans and daily for Team plans). Backups are retained for a 28-day period. Additionally, you can create a single manual backup.
:::note Notes
- The backup feature is not available for Strapi Cloud projects using the free trial or the Developer plan. You will need to upgrade to either the Pro or Team plan to have your project automatically backed up and to have access to manual backups.
-
+
- The manual backup option should become available shortly after project's first succesful deployment.
-- The backup feature is only available for the default, production environment. Other additional environment's settings will not show the  *Backups* tab.
+- The backup feature is only available for the default, production environment. Other additional environment's settings will not show the *Backups* tab.
:::
:::tip
@@ -337,7 +359,7 @@ For projects created before the release of the Backup feature in October 2023, t
#### Creating a manual backup
-To create a manual backup, in the  *Backups* section, click on the **Create backup** button.
+To create a manual backup, in the *Backups* section, click on the **Create backup** button.
The manual backup should start immediately, and restoration or creation of other backups will be disabled until backup is complete.
@@ -349,13 +371,14 @@ When creating a new manual backup, any existing manual backup will be deleted. Y
If you need to restore a backup of your project:
-1. In the  *Backups* section, click on the **Restore backup** button.
+1. In the *Backups* section, click on the **Restore backup** button.
2. In the dialog, choose one of the available backups (automatic or manual) of your project in the *Choose backup* drop-down.
-3. Click on the **Restore** button of the dialog. Once the restoration finished, your project will be back to the state it was at the time of the chosen backup.
+3. Click on the **Restore** button of the dialog. Once the restoration finished, your project will be back to the state it was at the time of the chosen backup. You will be able to see the restoration timestamp and the backup restored in the *Backups* tab.
+4. The timestamp of the last completed restoration will be displayed to help you track when the project was last restored.
### Domains
-The  *Domains* tab enables you to manage domains and connect new ones.
+The *Domains* tab enables you to manage domains and connect new ones.
-All existing domains for your Strapi Cloud project are listed in the  *Domains* tab. For each domain, you can:
+All existing domains for your Strapi Cloud project are listed in the *Domains* tab. For each domain, you can:
- see its current status:
- -  Active: the domain is currently confirmed and active
- -  Pending: the domain transfer is being processed, waiting for DNS changes to propagate
- -  Failed: the domain change request did not complete as an error occured
-- click the  edit button to access the settings of the domain
-- click the  delete button to delete the domain
+ - Active: the domain is currently confirmed and active
+ -  Pending: the domain transfer is being processed, waiting for DNS changes to propagate
+ - Failed: the domain change request did not complete as an error occured
+- click the edit button to access the settings of the domain
+- click the delete button to delete the domain
#### Connecting a custom domain
@@ -402,8 +425,8 @@ Environment variables (more information in the [Developer Documentation](../../d
}}
/>
-In the  *Variables* tab, you can:
+In the *Variables* tab, you can:
- click the **Add variable** button to create a new variable
- edit any variable, each being composed of a *Name* and a *Value*
-- click the  delete button associated with any non-default variable to delete it
+- click the delete button associated with any non-default variable to delete it
- click the **Save** button to save any change made on the page
diff --git a/docusaurus/docs/dev-docs/admin-panel-customization/extension.md b/docusaurus/docs/dev-docs/admin-panel-customization/extension.md
index 5f8df33e56..dc605b3f05 100644
--- a/docusaurus/docs/dev-docs/admin-panel-customization/extension.md
+++ b/docusaurus/docs/dev-docs/admin-panel-customization/extension.md
@@ -21,11 +21,11 @@ There are 2 use cases where you might want to extend the admin panel:
- As a Strapi plugin developer, you want to develop a Strapi plugin that extends the admin panel **everytime it's installed in any Strapi application**.
- 👉 This can be done by taking advantage of the [Admin Panel API for plugins](/dev-docs/plugins/admin-panel-api).
+ This can be done by taking advantage of the [Admin Panel API for plugins](/dev-docs/plugins/admin-panel-api).
- As a Strapi developer, you want to develop a unique solution for a Strapi user who only needs to extend a specific instance of a Strapi application.
- 👉 This can be done by directly updating the `/src/admin/app.[tsx|js]` file, which can import any file located in `/src/admin/extensions`.
+ This can be done by directly updating the `/src/admin/app.[tsx|js]` file, which can import any file located in `/src/admin/extensions`.
:::strapi Additional resources
* If you're searching for ways of replacing the default WYSIWYG editor, please refer to the [corresponding page](/dev-docs/admin-panel-customization/wysiwyg-editor).
diff --git a/docusaurus/docs/dev-docs/admin-panel-customization/options.md b/docusaurus/docs/dev-docs/admin-panel-customization/options.md
index 03496d9b32..466fccc874 100644
--- a/docusaurus/docs/dev-docs/admin-panel-customization/options.md
+++ b/docusaurus/docs/dev-docs/admin-panel-customization/options.md
@@ -444,5 +444,60 @@ To extend the theme, use either:
- the `config.theme.dark` key for the Dark mode
:::strapi Strapi Design System
-The default [Strapi theme](https://github.com/strapi/design-system/tree/main/packages/strapi-design-system/src/themes) defines various theme-related keys (shadows, colors…) that can be updated through the `config.theme.light` and `config.theme.dark` keys in `./admin/src/app.js`. The [Strapi Design System](https://design-system.strapi.io/) is fully customizable and has a dedicated [StoryBook](https://design-system-git-main-strapijs.vercel.app) documentation.
+The default [Strapi theme](https://github.com/strapi/design-system/tree/main/packages/design-system/src/themes) defines various theme-related keys (shadows, colors…) that can be updated through the `config.theme.light` and `config.theme.dark` keys in `./admin/src/app.js`. The [Strapi Design System](https://design-system.strapi.io/) is fully customizable and has a dedicated [StoryBook](https://design-system-git-main-strapijs.vercel.app) documentation.
:::
+
+
+Example: Customizing some admin panel colors:
+
+With the following code example, buttons and links that would use some primary colors will be displayed in red, as shown in the example screenshot:
+
+
+
+
+
+```tsx title="/src/admin/app.js"
+export default {
+ config: {
+ theme: {
+ light: {
+ colors: {
+ primary600: "red",
+ buttonPrimary500: "red",
+ buttonPrimary600: "red",
+ },
+ },
+ },
+ },
+ bootstrap() {},
+};
+```
+
+
+
+
+
+```tsx title="/src/admin/app.ts"
+import type { StrapiApp } from "@strapi/strapi/admin";
+
+export default {
+ config: {
+ theme: {
+ light: {
+ colors: {
+ primary600: "red",
+ buttonPrimary500: "red",
+ buttonPrimary600: "red",
+ },
+ };
+ },
+ },
+ bootstrap (app: StrapiApp) {},
+}
+```
+
+
+
+
+
+
diff --git a/docusaurus/docs/dev-docs/advanced-features.md b/docusaurus/docs/dev-docs/advanced-features.md
index baaf5163a0..65d430c4ee 100644
--- a/docusaurus/docs/dev-docs/advanced-features.md
+++ b/docusaurus/docs/dev-docs/advanced-features.md
@@ -1,7 +1,7 @@
---
title: Advanced features
description: Learn more about Strapi 5 advanced features
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/api/content-api
pagination_next: dev-docs/customization
tags:
diff --git a/docusaurus/docs/dev-docs/api/content-api.md b/docusaurus/docs/dev-docs/api/content-api.md
index d7b3dc4437..4ca8b6c103 100644
--- a/docusaurus/docs/dev-docs/api/content-api.md
+++ b/docusaurus/docs/dev-docs/api/content-api.md
@@ -1,7 +1,7 @@
---
title: Content API
description: Learn more about Strapi 5's Content API
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/setup-deployment
pagination_next: dev-docs/advanced-features
tags:
@@ -27,22 +27,13 @@ REST and GraphQL APIs represent the top-level layers of the Content API exposed
- The [Document Service API](/dev-docs/api/document-service) is the recommended API to interact with your application's database within the [backend server](/dev-docs/customization) or through [plugins](/dev-docs/plugins). The Document Service is the layer that handles **documents** as well as Strapi's complex data structures like components and dynamic zones.
- The Query Engine API interacts with the database layer at a lower level and is used under the hood to execute database queries. It gives unrestricted internal access to the database layer, but is not aware of any advanced Strapi features that Strapi 5 can handle, like Draft & Publish, Internationalization, Content History, and more. ⚠️ In most, if not all, use cases, you should use the Document Service API instead.
-```mermaid
- flowchart BT
- database[(Database)] <--> queryEngine[Query Engine API]
- subgraph Strapi backend
- direction BT
- queryEngine <--> documentService[Document Service API]
- documentService <--> content([Your content])
- content <--> rest[REST API]
- content <--> graphql[GraphQL API]
- end
- rest <==> frontend{{Your frontend application}}
- graphql <==> frontend
- click rest "/dev-docs/api/rest"
- click graphql "/dev-docs/api/graphql"
- click documentService "/dev-docs/api/document-service"
-```
+
diff --git a/docusaurus/docs/dev-docs/api/document-service.md b/docusaurus/docs/dev-docs/api/document-service.md
index d38efbf3e3..2d4a08a5f9 100644
--- a/docusaurus/docs/dev-docs/api/document-service.md
+++ b/docusaurus/docs/dev-docs/api/document-service.md
@@ -1,7 +1,7 @@
---
title: Document Service API
description: The Document Service API is the recommended way to interact with your content from the back-end server or from plugins.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
@@ -49,7 +49,7 @@ If only a `documentId` is passed without any other parameters, `findOne()` retur
```js
-await strapi.documents('api:restaurant.restaurant').findOne({
+await strapi.documents('api::restaurant.restaurant').findOne({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm'
})
```
@@ -634,7 +634,7 @@ If no `locale` parameter is passed, `discardDraft()` discards draft data and ove
```js
-strapi.documents.discardDraft({
+strapi.documents('api::restaurant.restaurant').discardDraft({
documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
});
```
diff --git a/docusaurus/docs/dev-docs/api/document-service/fields.md b/docusaurus/docs/dev-docs/api/document-service/fields.md
index 6a102d1eb0..ab31fad44e 100644
--- a/docusaurus/docs/dev-docs/api/document-service/fields.md
+++ b/docusaurus/docs/dev-docs/api/document-service/fields.md
@@ -1,7 +1,7 @@
---
title: Using fields with the Document Service API
description: Use Strapi's Document Service API to select the fields to return with your queries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
@@ -24,7 +24,7 @@ import IdsInResponse from '/docs/snippets/id-in-responses.md'
By default the [Document Service API](/dev-docs/api/document-service) returns all the fields of a document but does not populate any fields. This page describes how to use the `fields` parameter to return only specific fields with the query results.
-:::time.p
+:::tip
You can also use the `populate` parameter to populate relations, media fields, components, or dynamic zones (see the [`populate` parameter](/dev-docs/api/document-service/populate) documentation).
:::
diff --git a/docusaurus/docs/dev-docs/api/document-service/filters.md b/docusaurus/docs/dev-docs/api/document-service/filters.md
index 98cb233421..4b0b6447c5 100644
--- a/docusaurus/docs/dev-docs/api/document-service/filters.md
+++ b/docusaurus/docs/dev-docs/api/document-service/filters.md
@@ -1,7 +1,7 @@
---
title: Using filters with the Document Service API
description: This document provides information about the filters available in the Document Service API.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/document-service/locale.md b/docusaurus/docs/dev-docs/api/document-service/locale.md
index 8e05147dd8..5cfab8bcca 100644
--- a/docusaurus/docs/dev-docs/api/document-service/locale.md
+++ b/docusaurus/docs/dev-docs/api/document-service/locale.md
@@ -1,7 +1,7 @@
---
title: Using the locale parameter with the Document Service API
description: Use Strapi's Document Service API to work with locale versions with your queries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/document-service/middlewares.md b/docusaurus/docs/dev-docs/api/document-service/middlewares.md
index b77288b446..41cbd36f22 100644
--- a/docusaurus/docs/dev-docs/api/document-service/middlewares.md
+++ b/docusaurus/docs/dev-docs/api/document-service/middlewares.md
@@ -2,7 +2,7 @@
title: Extending the Document Service behavior
description: This document provides information about the middlewares in the Document Service API.
toc_max_heading_level: 4
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
---
# Document Service API: Middlewares
@@ -347,7 +347,7 @@ Failing to do this will break the Strapi application.
```js
const applyTo = ['api::article.article'];
-strapi.documents.use((context, next) => {
+strapi.documents.use(async (context, next) => {
// Only run for certain content types
if (!applyTo.includes(context.uid)) {
return next();
diff --git a/docusaurus/docs/dev-docs/api/document-service/populate.md b/docusaurus/docs/dev-docs/api/document-service/populate.md
index 6c0c8ff32a..541a05a5ff 100644
--- a/docusaurus/docs/dev-docs/api/document-service/populate.md
+++ b/docusaurus/docs/dev-docs/api/document-service/populate.md
@@ -1,7 +1,7 @@
---
title: Using Populate with the Document Service API
description: Use Strapi's Document Service API to populate or select some fields.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- Components
- Content API
@@ -314,7 +314,8 @@ To populate while updating documents:
```js
-strapi.documents("api::article.article").update("cjld2cjxh0000qzrmn831i7rn", {
+strapi.documents("api::article.article").update({
+ documentId: "cjld2cjxh0000qzrmn831i7rn",
data: {
title: "Test Article Update",
},
@@ -351,7 +352,8 @@ To populate while publishing documents (same behavior with `unpublish()` and `di
```js
-strapi.documents("api::article.article").publish("cjld2cjxh0000qzrmn831i7rn", {
+strapi.documents("api::article.article").publish({
+ documentId: "cjld2cjxh0000qzrmn831i7rn",
populate: ["headerImage"],
});
```
diff --git a/docusaurus/docs/dev-docs/api/document-service/sort-pagination.md b/docusaurus/docs/dev-docs/api/document-service/sort-pagination.md
index 262444b702..9ef99c56a1 100644
--- a/docusaurus/docs/dev-docs/api/document-service/sort-pagination.md
+++ b/docusaurus/docs/dev-docs/api/document-service/sort-pagination.md
@@ -1,7 +1,7 @@
---
title: Using Sort & Pagination with the Document Service API
description: Use Strapi's Document Service API to sort and paginate query results
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/document-service/status.md b/docusaurus/docs/dev-docs/api/document-service/status.md
index 3de0f4d49a..1779c28d26 100644
--- a/docusaurus/docs/dev-docs/api/document-service/status.md
+++ b/docusaurus/docs/dev-docs/api/document-service/status.md
@@ -1,7 +1,7 @@
---
title: Using Draft & Publish with the Document Service API
description: Use Strapi's Document Service API to return either the draft or the published version of a document
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
@@ -198,8 +198,8 @@ To automatically publish a document while updating it, add `status: 'published'`
```js
await strapi.documents('api::restaurant.restaurant').update({
+ documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
data: {
- documentId: 'a1b2c3d4e5f6g7h8i9j0klm',
name: "Biscotte Restaurant (closed)",
},
status: 'published',
diff --git a/docusaurus/docs/dev-docs/api/document.md b/docusaurus/docs/dev-docs/api/document.md
index 64b2a081ed..9dfc38f004 100644
--- a/docusaurus/docs/dev-docs/api/document.md
+++ b/docusaurus/docs/dev-docs/api/document.md
@@ -1,7 +1,7 @@
---
title: Documents
description: Learn what a Document is in Strapi v5
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/api/content-api
tags:
- API
@@ -35,175 +35,45 @@ The following diagrams represent all the possible variations of content dependin
-```mermaid
-flowchart LR
-stX("Single type X (e.g., homepage)")
-docX("Document X (e.g., the homepage)")
-docA(Document A)
-docB(Document B)
-docC("Document C (e.g., a restaurant, 'Biscotte Restaurant')")
-ctA(Collection type A)
-ctB("Collection type B (e.g., restaurants)")
-fieldA(Field A)
-fieldB(Field B)
-fieldC("Field C (e.g., 'name')")
-
-content --- stX --- docX
-content --- ctA
-content --- ctB
-
-ctB --- docA
-ctB --- docB
-ctB --- docC
-
-docC --- fieldA
-docC --- fieldB
-docC --- fieldC
-
-classDef notHighlighted fill:transparent,stroke:none
-classDef highlighted fill:transparent,stroke:#8D5AF3,stroke-width:2px
-class content,stX,docX,docA,docB,ctA,ctB,docLocA,docLocB,docLocC,draftA,draftB,draftC,pubA,pubB,pubC,fieldA,fieldB,fieldC notHighlighted
-linkStyle default stroke:#8D5AF3
-class docC highlighted
-```
+
-```mermaid
-flowchart LR
-stX("Single type X (e.g., homepage)")
-docX("Document X (e.g., the homepage)")
-docA(Document A)
-docB(Document B)
-docC("Document C (e.g., a restaurant, 'Biscotte Restaurant')")
-draftC(Draft Version)
-pubC(Published Version)
-ctA(Collection type A)
-ctB("Collection type B (e.g., restaurants)")
-fieldA(Field A)
-fieldB(Field B)
-fieldC("Field C (e.g., 'name')")
-
-content --- stX --- docX
-content --- ctA
-content --- ctB
-
-ctB --- docA
-ctB --- docB
-ctB --- docC
-
-docC --- draftC
-docC --- pubC
-
-pubC --- fieldA
-pubC --- fieldB
-pubC --- fieldC
-
-classDef notHighlighted fill:transparent,stroke:none
-classDef highlighted fill:transparent,stroke:#8D5AF3,stroke-width:2px
-class content,stX,docX,docA,docB,ctA,ctB,docLocA,docLocB,docLocC,draftA,draftB,draftC,pubA,pubB,pubC,fieldA,fieldB,fieldC notHighlighted
-linkStyle default stroke:#8D5AF3
-class docC highlighted
-```
+
-```mermaid
-flowchart LR
-stX("Single type X (e.g., homepage)")
-docX("Document X (e.g., the homepage)")
-docA(Document A)
-docB(Document B)
-docC("Document C (e.g., a restaurant, 'Biscotte Restaurant')")
-docLocA("Document Locale A (e.g., 'en')")
-docLocB("Document Locale B
")
-docLocC(Document Locale C)
-ctA(Collection type A)
-ctB("Collection type B (e.g., restaurants)")
-fieldA(Field A)
-fieldB(Field B)
-fieldC("Field C (e.g., 'name')")
-
-content --- stX --- docX
-content --- ctA
-content --- ctB
-
-ctB --- docA
-ctB --- docB
-ctB --- docC
-
-docC --- docLocA
-docC --- docLocB
-docC --- docLocC
-
-docLocC --- fieldA
-docLocC --- fieldB
-docLocC --- fieldC
-
-classDef notHighlighted fill:transparent,stroke:none
-classDef highlighted fill:transparent,stroke:#8D5AF3,stroke-width:2px
-class content,stX,docX,docA,docB,ctA,ctB,docLocA,docLocB,docLocC,fieldA,fieldB,fieldC notHighlighted
-linkStyle default stroke:#8D5AF3
-class docC highlighted
-```
+
-```mermaid
-flowchart LR
-stX("Single type X (e.g., homepage)")
-docX("Document X (e.g., the homepage)")
-docA(Document A)
-docB(Document B)
-docC("Document C (e.g., a restaurant, 'Biscotte Restaurant')")
-docLocA("Document Locale A (e.g., 'en')")
-docLocB(Document Locale B)
-docLocC(Document Locale C)
-draftA(Draft Version)
-draftB(Draft Version)
-draftC(Draft Version)
-pubA(Published Version)
-pubC(Published Version)
-ctA(Collection type A)
-ctB("Collection type B (e.g., restaurants)")
-fieldA(Field A)
-fieldB(Field B)
-fieldC("Field C (e.g., 'name')")
-
-content --- stX --- docX
-content --- ctA
-content --- ctB
-
-ctB --- docA
-ctB --- docB
-ctB --- docC
-
-docC --- docLocA
-docC --- docLocB --- draftB
-docC --- docLocC
-
-docLocA --- draftA
-docLocA --- pubA
-
-docLocC --- draftC
-docLocC --- pubC
-
-pubC --- fieldA
-pubC --- fieldB
-pubC --- fieldC
-
-classDef notHighlighted fill:transparent,stroke:none
-classDef highlighted fill:transparent,stroke:#8D5AF3,stroke-width:2px
-class content,stX,docX,docA,docB,ctA,ctB,docLocA,docLocB,docLocC,draftA,draftB,draftC,pubA,pubB,pubC,fieldA,fieldB,fieldC notHighlighted
-linkStyle default stroke:#8D5AF3
-class docC highlighted
-```
+
diff --git a/docusaurus/docs/dev-docs/api/entity-service.md b/docusaurus/docs/dev-docs/api/entity-service.md
index 70f2d1dd10..79af1182e3 100644
--- a/docusaurus/docs/dev-docs/api/entity-service.md
+++ b/docusaurus/docs/dev-docs/api/entity-service.md
@@ -1,13 +1,12 @@
---
title: Entity Service API
description: The Entity Service is the layer that handles Strapi's complex data structures like components and dynamic zones, and uses the Query Engine API under the hood to execute database queries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
unlisted: true
---
import EntityQueryKnex from '/docs/snippets/entity-query-knex.md'
import BackendIntroCrosslink from '/docs/snippets/backend-custom-intro-crosslink.md'
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ESdeprecated from '/docs/snippets/entity-service-deprecated.md'
# Entity Service API
diff --git a/docusaurus/docs/dev-docs/api/entity-service/components-dynamic-zones.md b/docusaurus/docs/dev-docs/api/entity-service/components-dynamic-zones.md
index f187fca05e..835921d2ab 100644
--- a/docusaurus/docs/dev-docs/api/entity-service/components-dynamic-zones.md
+++ b/docusaurus/docs/dev-docs/api/entity-service/components-dynamic-zones.md
@@ -1,7 +1,7 @@
---
title: Components and Dynamic Zones
description: Use Strapi's Entity Service to create and update components and dynamic zones.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
unlisted: true
---
diff --git a/docusaurus/docs/dev-docs/api/entity-service/crud.md b/docusaurus/docs/dev-docs/api/entity-service/crud.md
index 127d2aee70..aa4dc984d0 100644
--- a/docusaurus/docs/dev-docs/api/entity-service/crud.md
+++ b/docusaurus/docs/dev-docs/api/entity-service/crud.md
@@ -1,7 +1,7 @@
---
title: CRUD operations
description: Use Strapi's Entity Service API to perform CRUD (create, read, update, delete) operations on your content.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
unlisted: true
---
import ManagingRelations from '/docs/snippets/managing-relations.md'
diff --git a/docusaurus/docs/dev-docs/api/entity-service/filter.md b/docusaurus/docs/dev-docs/api/entity-service/filter.md
index 013fabf735..b10f94ac8d 100644
--- a/docusaurus/docs/dev-docs/api/entity-service/filter.md
+++ b/docusaurus/docs/dev-docs/api/entity-service/filter.md
@@ -1,7 +1,7 @@
---
title: Filtering with the Entity Service API
description: Use Strapi's Entity Service API to filter your queries results.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
unlisted: true
---
diff --git a/docusaurus/docs/dev-docs/api/entity-service/order-pagination.md b/docusaurus/docs/dev-docs/api/entity-service/order-pagination.md
index 742de1a88c..ac15d75d0a 100644
--- a/docusaurus/docs/dev-docs/api/entity-service/order-pagination.md
+++ b/docusaurus/docs/dev-docs/api/entity-service/order-pagination.md
@@ -1,7 +1,7 @@
---
title: Ordering & Pagination with the Entity Service API
description: Use Strapi's Entity Service API to order and paginate queries results.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
---
import ESdeprecated from '/docs/snippets/entity-service-deprecated.md'
diff --git a/docusaurus/docs/dev-docs/api/entity-service/populate.md b/docusaurus/docs/dev-docs/api/entity-service/populate.md
index 67e49dea6b..8097705227 100644
--- a/docusaurus/docs/dev-docs/api/entity-service/populate.md
+++ b/docusaurus/docs/dev-docs/api/entity-service/populate.md
@@ -1,7 +1,7 @@
---
title: Populating with the Entity Service API
description: Use Strapi's Entity Service API to populate relations in your queries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
unlisted: true
---
diff --git a/docusaurus/docs/dev-docs/api/graphql.md b/docusaurus/docs/dev-docs/api/graphql.md
index 0372b82619..961142a6e9 100644
--- a/docusaurus/docs/dev-docs/api/graphql.md
+++ b/docusaurus/docs/dev-docs/api/graphql.md
@@ -1,6 +1,6 @@
---
title: GraphQL API
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
@@ -15,7 +15,6 @@ tags:
- sort
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
# GraphQL API
diff --git a/docusaurus/docs/dev-docs/api/query-engine.md b/docusaurus/docs/dev-docs/api/query-engine.md
index f0ab4bc71f..a69196950d 100644
--- a/docusaurus/docs/dev-docs/api/query-engine.md
+++ b/docusaurus/docs/dev-docs/api/query-engine.md
@@ -2,7 +2,7 @@
unlisted: true
title: Query Engine API
description: Strapi provides a Query Engine API to give unrestricted internal access to the database layer at a lower level.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/query-engine/bulk-operations.md b/docusaurus/docs/dev-docs/api/query-engine/bulk-operations.md
index 9dcaab19ec..006edd7a50 100644
--- a/docusaurus/docs/dev-docs/api/query-engine/bulk-operations.md
+++ b/docusaurus/docs/dev-docs/api/query-engine/bulk-operations.md
@@ -2,7 +2,7 @@
unlisted: true
title: Bulk Operations
description: Use Strapi's Query Engine API to perform operations on multiple entries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
@@ -13,7 +13,6 @@ tags:
- updateMany()
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
# Bulk Operations with the Query Engine API
diff --git a/docusaurus/docs/dev-docs/api/query-engine/filtering.md b/docusaurus/docs/dev-docs/api/query-engine/filtering.md
index 199ef9f331..89b42b731c 100644
--- a/docusaurus/docs/dev-docs/api/query-engine/filtering.md
+++ b/docusaurus/docs/dev-docs/api/query-engine/filtering.md
@@ -2,7 +2,7 @@
unlisted: true
title: Filtering with the Query Engine API
description: Use Strapi's Query Engine API to filter the results of your queries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
@@ -11,7 +11,6 @@ tags:
- Query Engine API
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ConsiderDocumentService from '/docs/snippets/consider-document-service.md'
# Filtering with the Query Engine API
diff --git a/docusaurus/docs/dev-docs/api/query-engine/order-pagination.md b/docusaurus/docs/dev-docs/api/query-engine/order-pagination.md
index 7851732fb1..37b34407f2 100644
--- a/docusaurus/docs/dev-docs/api/query-engine/order-pagination.md
+++ b/docusaurus/docs/dev-docs/api/query-engine/order-pagination.md
@@ -2,7 +2,7 @@
unlisted: true
title: Ordering & Pagination with the Query Engine API
description: Use Strapi's Query Engine API to order and paginate the results of your queries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/query-engine/populating.md b/docusaurus/docs/dev-docs/api/query-engine/populating.md
index 6398f8dde2..be44c5393c 100644
--- a/docusaurus/docs/dev-docs/api/query-engine/populating.md
+++ b/docusaurus/docs/dev-docs/api/query-engine/populating.md
@@ -2,7 +2,7 @@
unlisted: true
title: Populating with the Query Engine API
description: Use Strapi's Query Engine API to populate relations when querying your content.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/query-engine/single-operations.md b/docusaurus/docs/dev-docs/api/query-engine/single-operations.md
index 24c4f6437e..6693c57c3e 100644
--- a/docusaurus/docs/dev-docs/api/query-engine/single-operations.md
+++ b/docusaurus/docs/dev-docs/api/query-engine/single-operations.md
@@ -2,7 +2,7 @@
unlisted: true
title: Single Operations
description: Use Strapi's Query Engine API to perform operations on single entries.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- API
- Content API
diff --git a/docusaurus/docs/dev-docs/api/rest.md b/docusaurus/docs/dev-docs/api/rest.md
index d3327aafa2..dbec88909f 100644
--- a/docusaurus/docs/dev-docs/api/rest.md
+++ b/docusaurus/docs/dev-docs/api/rest.md
@@ -1,4 +1,4 @@
----
+---
title: REST API reference
description: Interact with your Content-Types using the REST API endpoints Strapi generates for you.
displayed_sidebar: restApiSidebar
@@ -30,14 +30,16 @@ By default, the REST API responses only include top-level fields and does not po
The Upload plugin (which handles media found in the [Media Library](/user-docs/media-library)) has a specific API described in the [Upload plugin documentation](/dev-docs/plugins/upload).
:::
+:::strapi Strapi SDK
+Strapi has just released a new SDK, currently in beta. Early documentation is available on the [repository](https://github.com/strapi/sdk-js) while we are integrating it into the official REST API reference.
+:::
+
## Endpoints
For each Content-Type, the following endpoints are automatically generated:
-
Plural API ID vs. Singular API ID:
-
In the following tables:
- `:singularApiId` refers to the value of the "API ID (Singular)" field of the content-type,
@@ -274,7 +276,9 @@ In Strapi 5, a specific document is reached by its `documentId`.
Creates a document and returns its value.
-If the [Internationalization (i18n) plugin](/dev-docs/i18n) is installed, it's possible to use POST requests to the REST API to [create localized documents](/dev-docs/i18n#rest-create).
+By default, a document is created with a published status. To create a document as a draft, pass the [`status`](/dev-docs/api/rest/filters-locale-publication#status) query parameter with the value `draft` (e.g., `?status=draft`).
+
+If the Internationalization (i18n) feature is enabled on the content-type, it's possible to use POST requests to the REST API to [create localized documents](/dev-docs/i18n#rest-create).
:::note
While creating a document, you can define its relations and their order (see [Managing relations through the REST API](/dev-docs/api/rest/relations.md) for more details).
@@ -345,7 +349,6 @@ Partially updates a document by `id` and returns its value.
Send a `null` value to clear fields.
:::note NOTES
-* Even unmodified fields must be included in the request's body.
* Even with the [Internationalization (i18n) plugin](/dev-docs/i18n) installed, it's currently not possible to [update the locale of a document](/dev-docs/i18n#rest-update).
* While updating a document, you can define its relations and their order (see [Managing relations through the REST API](/dev-docs/api/rest/relations) for more details).
:::
diff --git a/docusaurus/docs/dev-docs/api/rest/filters-locale-publication.md b/docusaurus/docs/dev-docs/api/rest/filters-locale-publication.md
index 463634596f..f3bd7aa78c 100644
--- a/docusaurus/docs/dev-docs/api/rest/filters-locale-publication.md
+++ b/docusaurus/docs/dev-docs/api/rest/filters-locale-publication.md
@@ -1,5 +1,5 @@
---
-title: Filters, Locale, and Publication State
+title: Filters, Locale, and Status
description: Use Strapi's REST API to filter the results of your requests.
sidebarDepth: 3
displayed_sidebar: restApiSidebar
@@ -19,9 +19,8 @@ tags:
import QsIntroFull from '/docs/snippets/qs-intro-full.md'
import QsForQueryBody from '/docs/snippets/qs-for-query-body.md'
import QsForQueryTitle from '/docs/snippets/qs-for-query-title.md'
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-# REST API: Filtering, Locale, and Publication State
+# REST API: Filtering, Locale, and Status
The [REST API](/dev-docs/api/rest) offers the ability to filter results found with its ["Get entries"](/dev-docs/api/rest#get-all) method.
Using optional Strapi features can provide some more filters:
@@ -366,7 +365,6 @@ await request(`/api/restaurants?${query}`);
:::prerequisites
-- The [Internationalization (i18n) feature](/dev-docs/i18n) should be installed.
- [Localization should be enabled for the content-type](/user-docs/content-type-builder/creating-new-content-type.md#creating-a-new-content-type).
:::
diff --git a/docusaurus/docs/dev-docs/api/rest/guides/intro.md b/docusaurus/docs/dev-docs/api/rest/guides/intro.md
index 2adfb98597..74e004995e 100644
--- a/docusaurus/docs/dev-docs/api/rest/guides/intro.md
+++ b/docusaurus/docs/dev-docs/api/rest/guides/intro.md
@@ -35,6 +35,8 @@ Additional tutorials and guides can be found in the following blog posts:
+
+
diff --git a/docusaurus/docs/dev-docs/api/rest/guides/populate-creator-fields.md b/docusaurus/docs/dev-docs/api/rest/guides/populate-creator-fields.md
index 582baf8c92..7084812cb5 100644
--- a/docusaurus/docs/dev-docs/api/rest/guides/populate-creator-fields.md
+++ b/docusaurus/docs/dev-docs/api/rest/guides/populate-creator-fields.md
@@ -13,12 +13,8 @@ tags:
- updatedBy
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# 🛠️ How to populate creator fields such as `createdBy` and `updatedBy`
-
-
The creator fields `createdBy` and `updatedBy` are removed from the [REST API](/dev-docs/api/rest) response by default. These 2 fields can be returned in the REST API by activating the `populateCreatorFields` parameter at the content-type level.
:::note
diff --git a/docusaurus/docs/dev-docs/api/rest/guides/understanding-populate.md b/docusaurus/docs/dev-docs/api/rest/guides/understanding-populate.md
index be893a0ddc..bb286103bd 100644
--- a/docusaurus/docs/dev-docs/api/rest/guides/understanding-populate.md
+++ b/docusaurus/docs/dev-docs/api/rest/guides/understanding-populate.md
@@ -17,13 +17,10 @@ tags:
import QsIntroFull from '/docs/snippets/qs-intro-full.md'
import QsForQueryTitle from '/docs/snippets/qs-for-query-title.md'
import QsForQueryBody from '/docs/snippets/qs-for-query-body.md'
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ScreenshotNumberReference from '/src/components/ScreenshotNumberReference.jsx';
# 🧠 Understanding the `populate` parameter for the REST API
-
-
:::note Note: Example responses might differ from your experience
The content of this page might not be fully up-to-date with Strapi 5 yet:
diff --git a/docusaurus/docs/dev-docs/api/rest/interactive-query-builder.md b/docusaurus/docs/dev-docs/api/rest/interactive-query-builder.md
index bf54950eee..0ea2837554 100644
--- a/docusaurus/docs/dev-docs/api/rest/interactive-query-builder.md
+++ b/docusaurus/docs/dev-docs/api/rest/interactive-query-builder.md
@@ -47,7 +47,7 @@ Please refer to the [REST API parameters table](/dev-docs/api/rest/parameters) a
page: 1,
},
status: 'published',
- locale: ['en'],
+ locale: 'en',
}
`}
/>
diff --git a/docusaurus/docs/dev-docs/api/rest/parameters.md b/docusaurus/docs/dev-docs/api/rest/parameters.md
index 2c4f64ff7f..449ae28fcf 100644
--- a/docusaurus/docs/dev-docs/api/rest/parameters.md
+++ b/docusaurus/docs/dev-docs/api/rest/parameters.md
@@ -14,8 +14,6 @@ tags:
- status
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# REST API parameters
API parameters can be used with the [REST API](/dev-docs/api/rest) to filter, sort, and paginate results and to select fields and relations to populate. Additionally, specific parameters related to optional Strapi features can be used, like the publication state and locale of a content-type.
@@ -35,5 +33,5 @@ The following API parameters are available:
Query parameters use the [LHS bracket syntax](https://christiangiacomi.com/posts/rest-design-principles/#lhs-brackets) (i.e. they are encoded using square brackets `[]`).
:::tip
-A wide range of REST API parameters can be used and combined to query your content, which can result in long and complex query URLs. 👉 You can use Strapi's [interactive query builder](/dev-docs/api/rest/interactive-query-builder) tool to build query URLs more conveniently. 🤗
+A wide range of REST API parameters can be used and combined to query your content, which can result in long and complex query URLs. You can use Strapi's [interactive query builder](/dev-docs/api/rest/interactive-query-builder) tool to build query URLs more conveniently. 🤗
:::
diff --git a/docusaurus/docs/dev-docs/api/rest/populate-select.md b/docusaurus/docs/dev-docs/api/rest/populate-select.md
index 484e433b22..6f53f9d060 100644
--- a/docusaurus/docs/dev-docs/api/rest/populate-select.md
+++ b/docusaurus/docs/dev-docs/api/rest/populate-select.md
@@ -17,7 +17,6 @@ tags:
import QsIntroFull from '/docs/snippets/qs-intro-full.md'
import QsForQueryTitle from '/docs/snippets/qs-for-query-title.md'
import QsForQueryBody from '/docs/snippets/qs-for-query-body.md'
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
# REST API: Population & Field Selection
@@ -56,6 +55,8 @@ Field selection does not work on relational, media, component, or dynamic zone f
`GET /api/restaurants?fields[0]=name&fields[1]=description`
+
+
@@ -76,7 +77,6 @@ await request(`/api/users?${query}`);
```
-
@@ -155,6 +155,10 @@ The following table sums up possible populate use cases and their associated par
The easiest way to build complex queries with multiple-level population is to use our [interactive query builder](/dev-docs/api/rest/interactive-query-builder) tool.
:::
+:::note
+You cannot combine deep population with the `*` wildcard as `populate=*` will overwrite anything else when parsed by the `qs` package.
+:::
+
### Combining Population with other operators
By utilizing the `populate` operator it is possible to combine other operators such as [field selection](/dev-docs/api/rest/populate-select#field-selection), [filters](/dev-docs/api/rest/filters-locale-publication), and [sort](/dev-docs/api/rest/sort-pagination) in the population queries.
diff --git a/docusaurus/docs/dev-docs/api/rest/relations.md b/docusaurus/docs/dev-docs/api/rest/relations.md
index 0264bc0fe0..98ff099b4d 100644
--- a/docusaurus/docs/dev-docs/api/rest/relations.md
+++ b/docusaurus/docs/dev-docs/api/rest/relations.md
@@ -10,8 +10,6 @@ tags:
- REST API
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Managing relations with API requests
Defining relations between content-types (that are designated as entities in the database layers) is connecting entities with each other.
diff --git a/docusaurus/docs/dev-docs/api/rest/sort-pagination.md b/docusaurus/docs/dev-docs/api/rest/sort-pagination.md
index 282b31b382..82d385a543 100644
--- a/docusaurus/docs/dev-docs/api/rest/sort-pagination.md
+++ b/docusaurus/docs/dev-docs/api/rest/sort-pagination.md
@@ -18,7 +18,6 @@ tags:
import QsIntroFull from '/docs/snippets/qs-intro-full.md'
import QsForQueryTitle from '/docs/snippets/qs-for-query-title.md'
import QsForQueryBody from '/docs/snippets/qs-for-query-body.md'
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
# REST API: Sort & Pagination
diff --git a/docusaurus/docs/dev-docs/backend-customization.md b/docusaurus/docs/dev-docs/backend-customization.md
index 018559bd80..81a1d52172 100644
--- a/docusaurus/docs/dev-docs/backend-customization.md
+++ b/docusaurus/docs/dev-docs/backend-customization.md
@@ -60,58 +60,16 @@ Please note that all customizations described in the pages of this section are o
If you prefer learning by reading examples and understanding how they can be used in real-world use cases, the [Examples cookbook](/dev-docs/backend-customization/examples) section is another way at looking how the Strapi back end customization works.
::: -->
-## Interactive diagram
-
-The following diagram represents how requests travel through the Strapi back end. You can click on any shape to jump to the relevant page in the documentation.
-
-```mermaid
-graph TB
- request[Request] ---> globalMiddlewareA(("Global middleware before await next()"))
- globalMiddlewareA --"Call next()"--> routePolicy{Route policy}
- globalMiddlewareA --"Returns before next() Goes back up in the middleware chain"-->globalMiddlewareB
- routePolicy --Returns true--> routeMiddlewareA(("Route middleware before await next()"))
- routePolicy --Returns false or an error-->globalMiddlewareB
- routeMiddlewareA --"Returns before next() Goes back up in the middleware chain"-->routeMiddlewareB
- routeMiddlewareA --"Call next()"--> controllerA{{Controller}}
- controllerA --"Call Service(s)"--> serviceA{{Service}}
- controllerA --"Don't call Service(s)" --> routeMiddlewareB
- serviceA --"Call Document Service" --> documentService{{Document Service}}
- serviceA --"Don't call Document Service" --> controllerB
- documentService --"Call Document Service Middleware"--> dsMiddlewareBefore{{Document Service Middleware}}
- dsMiddlewareBefore[/"Document Service Middleware" before\]
- dsMiddlewareBefore --> queryEngine
- dsMiddlewareBefore --"Don't call Query Engine" --> dsMiddlewareAfter
- queryEngine{{"Query Engine"}} --> lifecyclesBefore[/Lifecycle beforeX\]
- lifecyclesBefore[/Lifecycle beforeX\] --> database[(Database)]
- database --> lifecyclesAfter[\Lifecycle afterX/]
- lifecyclesAfter --> dsMiddlewareAfter[\"Document Service Middleware" after/]
- dsMiddlewareAfter --> serviceB{{"Service after Document Service call"}}
- serviceB --> controllerB{{"Controller after service call"}}
- controllerB --> routeMiddlewareB(("Route middleware after await next()"))
- routeMiddlewareB --> globalMiddlewareB(("Global middleware after await next()"))
- globalMiddlewareB --> response[Response]
- linkStyle 3 stroke:green,color:green
- linkStyle 4 stroke:red,color:red
- linkStyle 2 stroke:purple,color:purple
- linkStyle 5 stroke:purple,color:purple
- click request "/dev-docs/backend-customization/requests-responses"
- click globalMiddlewareA "/dev-docs/backend-customization/middlewares"
- click globalMiddlewareB "/dev-docs/backend-customization/middlewares"
- click routePolicy "/dev-docs/backend-customization/routes"
- click routeMiddlewareA "/dev-docs/backend-customization/routes"
- click routeMiddlewareB "/dev-docs/backend-customization/routes"
- click controllerA "/dev-docs/backend-customization/controllers"
- click controllerB "/dev-docs/backend-customization/controllers"
- click serviceA "/dev-docs/backend-customization/services"
- click serviceB "/dev-docs/backend-customization/services"
- click documentService "/dev-docs/api/document-service"
- click lifecyclesBefore "/dev-docs/backend-customization/models#lifecycle-hooks"
- click queryEngine "/dev-docs/api/query-engine/"
- click lifecyclesAfter "/dev-docs/backend-customization/models#lifecycle-hooks"
- click response "/dev-docs/backend-customization/requests-responses"
- click queryEngine "/dev-docs/api/query-engine"
- click dsMiddlewareBefore "/dev-docs/api/document-service/middlewares"
- click dsMiddlewareAfter "/dev-docs/api/document-service/middlewares"
-```
+## Diagram
+
+The following diagram represents how requests travel through the Strapi back end:
+
+
diff --git a/docusaurus/docs/dev-docs/backend-customization/controllers.md b/docusaurus/docs/dev-docs/backend-customization/controllers.md
index 22cc884c19..96edb09d24 100644
--- a/docusaurus/docs/dev-docs/backend-customization/controllers.md
+++ b/docusaurus/docs/dev-docs/backend-customization/controllers.md
@@ -14,24 +14,24 @@ tags:
- validateQuery function
---
-# Controllers
+# Controllers
-Controllers are JavaScript files that contain a set of methods, called actions, reached by the client according to the requested [route](/dev-docs/backend-customization/routes). Whenever a client requests the route, the action performs the business logic code and sends back the [response](/dev-docs/backend-customization/requests-responses). Controllers represent the C in the model-view-controller (MVC) pattern.
+Controllers are JavaScript files that contain a set of methods, called actions, reached by the client according to the requested [route](/dev-docs/backend-customization/routes). Whenever a client requests the route, the action performs the business logic code and sends back the [response](/dev-docs/backend-customization/requests-responses). Controllers represent the C in the model-view-controller (MVC) pattern.
-In most cases, the controllers will contain the bulk of a project's business logic. But as a controller's logic becomes more and more complicated, it's a good practice to use [services](/dev-docs/backend-customization/services) to organize the code into re-usable parts.
+In most cases, the controllers will contain the bulk of a project's business logic. But as a controller's logic becomes more and more complicated, it's a good practice to use [services](/dev-docs/backend-customization/services) to organize the code into re-usable parts.
The diagram represents a simplified version of how a request travels through the Strapi back end, with controllers highlighted. The backend customization introduction page includes a complete, interactive diagram.
-## Implementation
+## Implementation
-Controllers can be [generated or added manually](#adding-a-new-controller). Strapi provides a `createCoreController` factory function that automatically generates core controllers and allows building custom ones or [extend or replace the generated controllers](#extending-core-controllers).
+Controllers can be [generated or added manually](#adding-a-new-controller). Strapi provides a `createCoreController` factory function that automatically generates core controllers and allows building custom ones or [extend or replace the generated controllers](#extending-core-controllers).
-### Adding a new controller
+### Adding a new controller
-A new controller can be implemented:
+A new controller can be implemented:
- with the [interactive CLI command `strapi generate`](/dev-docs/cli)
- or manually by creating a JavaScript file:
@@ -41,9 +41,8 @@ tags:
-
-
```js title="./src/api/restaurant/controllers/restaurant.js"
+
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::restaurant.restaurant', ({ strapi }) => ({
@@ -141,10 +140,10 @@ export default factories.createCoreController('api::restaurant.restaurant', ({ s
-Each controller action can be an `async` or `sync` function.
+Each controller action can be an `async` or `sync` function.
Every action receives a context object (`ctx`) as a parameter. `ctx` contains the [request context](/dev-docs/backend-customization/requests-responses#ctxrequest) and the [response context](/dev-docs/backend-customization/requests-responses#ctxresponse).
-
+Example: GET /hello route calling a basic controller
A specific `GET /hello` [route](/dev-docs/backend-customization/routes) is defined, the name of the router file (i.e. `index`) is used to call the controller handler (i.e. `index`). Every time a `GET /hello` request is sent to the server, Strapi calls the `index` action in the `hello.js` controller, which returns `Hello World!`:
@@ -207,23 +206,23 @@ export default {
-:::note
+:::note
When a new [content-type](/dev-docs/backend-customization/models#content-types) is created, Strapi builds a generic controller with placeholder code, ready to be customized.
:::
-:::tip
+:::tip
To see a possible advanced usage for custom controllers, read the [services and controllers](/dev-docs/backend-customization/examples/services-and-controllers) page of the backend customization examples cookbook.
:::
-### Sanitization and Validation in controllers {#sanitization-and-validation-in-controllers}
+### Sanitization and Validation in controllers {#sanitization-and-validation-in-controllers}
-:::warning
+:::warning
It's strongly recommended you sanitize (v4.8.0+) and/or validate (v4.13.0+) your incoming request query utilizing the new `sanitizeQuery` and `validateQuery` functions to prevent the leaking of private data.
:::
-Sanitization means that the object is “cleaned” and returned.
+Sanitization means that the object is “cleaned” and returned.
-Validation means an assertion is made that the data is already clean and throws an error if something is found that shouldn't be there.
+Validation means an assertion is made that the data is already clean and throws an error if something is found that shouldn't be there.
In Strapi 5, both query parameters and input data (i.e., create and update body data) are validated. Any create and update data requests with the following invalid input will throw a `400 Bad Request` error:
@@ -232,11 +231,11 @@ In Strapi 5, both query parameters and input data (i.e., create and update body
- non-writable fields and internal timestamps like `createdAt` and `createdBy` fields
- setting or updating an `id` field (except for connecting relations)
-#### Sanitization when utilizing controller factories
+#### Sanitization when utilizing controller factories
Within the Strapi factories the following functions are exposed that can be used for sanitization and validation:
-
+
| Function Name | Parameters | Description |
|------------------|----------------------------|--------------------------------------------------------------------------------------|
@@ -249,12 +248,12 @@ Within the Strapi factories the following functions are exposed that can be used
These functions automatically inherit the sanitization settings from the model and sanitize the data accordingly based on the content-type schema and any of the content API authentication strategies, such as the Users & Permissions plugin or API tokens.
:::warning
-Because these methods use the model associated with the current controller, if you query data that is from another model (i.e., doing a find for "menus" within a "restaurant" controller method), you must instead use the `@strapi/utils` tools, such as `sanitize.contentAPI.query` described in [Sanitizing Custom Controllers](#sanitize-validate-custom-controllers), or else the result of your query will be sanitized against the wrong model.
+Because these methods use the model associated with the current controller, if you query data that is from another model (i.e., doing a find for "menus" within a "restaurant" controller method), you must instead use tools such as `strapi.contentAPI.sanitize.query` described in [Sanitizing Custom Controllers](#sanitize-validate-custom-controllers), or else the result of your query will be sanitized against the wrong model.
:::
-
+
```js title="./src/api/restaurant/controllers/restaurant.js"
@@ -276,7 +275,7 @@ module.exports = createCoreController('api::restaurant.restaurant', ({ strapi })
-
+
```js title="./src/api/restaurant/controllers/restaurant.ts"
@@ -296,40 +295,38 @@ export default factories.createCoreController('api::restaurant.restaurant', ({ s
-#### Sanitization and validation when building custom controllers {#sanitize-validate-custom-controllers}
+#### Sanitization and validation when building custom controllers {#sanitize-validate-custom-controllers}
-Within custom controllers, there are 5 primary functions exposed via the `@strapi/utils` package that can be used for sanitization and validation:
+Within custom controllers, there are several primary functions exposed via the global `strapi` namespace that can be used for sanitization and validation:
-
| Function Name | Parameters | Description |
|------------------------------|--------------------|---------------------------------------------------------|
-| `sanitize.contentAPI.input` | `data`, `schema`, `auth` | Sanitizes the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
-| `sanitize.contentAPI.output` | `data`, `schema`, `auth` | Sanitizes the response output including restricted relations, private fields, passwords, and other nested "visitors" added by plugins |
-| `sanitize.contentAPI.query` | `ctx.query`, `schema`, `auth` | Sanitizes the request query including filters, sort, fields, and populate |
-| `validate.contentAPI.query` | `ctx.query`, `schema`, `auth` | Validates the request query including filters, sort, fields (currently not populate) |
-| `validate.contentAPI.input` | `data`, `schema`, `auth` | (EXPERIMENTAL) Validates the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
+| `strapi.contentAPI.sanitize.input` | `data`, `schema`, `auth` | Sanitizes the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
+| `strapi.contentAPI.sanitize.output` | `data`, `schema`, `auth` | Sanitizes the response output including restricted relations, private fields, passwords, and other nested "visitors" added by plugins |
+| `strapi.contentAPI.sanitize.query` | `ctx.query`, `schema`, `auth` | Sanitizes the request query including filters, sort, fields, and populate |
+| `strapi.contentAPI.validate.query` | `ctx.query`, `schema`, `auth` | Validates the request query including filters, sort, fields (currently not populate) |
+| `strapi.contentAPI.validate.input` | `data`, `schema`, `auth` | (EXPERIMENTAL) Validates the request input including non-writable fields, removing restricted relations, and other nested "visitors" added by plugins |
-:::note
+:::note
Depending on the complexity of your custom controllers, you may need additional sanitization that Strapi cannot currently account for, especially when combining the data from multiple sources.
:::
-
```js title="./src/api/restaurant/controllers/restaurant.js"
-const { sanitize, validate } = require('@strapi/utils');
+const { sanitize, validate } = strapi.contentApi;
module.exports = {
async findCustom(ctx) {
const contentType = strapi.contentType('api::test.test');
- await validate.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
- const sanitizedQueryParams = await sanitize.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
+ await validate.query(ctx.query, contentType, { auth: ctx.state.auth });
+ const sanitizedQueryParams = await sanitize.query(ctx.query, contentType, { auth: ctx.state.auth });
const documents = await strapi.documents(contentType.uid).findMany(sanitizedQueryParams);
- return await sanitize.contentAPI.output(documents, contentType, { auth: ctx.state.auth });
+ return await sanitize.output(documents, contentType, { auth: ctx.state.auth });
}
}
```
@@ -338,22 +335,20 @@ module.exports = {
-
-
```js title="./src/api/restaurant/controllers/restaurant.ts"
-import { sanitize, validate } from '@strapi/utils';
+const { sanitize, validate } = strapi.contentApi;
export default {
async findCustom(ctx) {
const contentType = strapi.contentType('api::test.test');
- await validate.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
- const sanitizedQueryParams = await sanitize.contentAPI.query(ctx.query, contentType, { auth: ctx.state.auth });
+ await validate.query(ctx.query, contentType, { auth: ctx.state.auth });
+ const sanitizedQueryParams = await sanitize.query(ctx.query, contentType, { auth: ctx.state.auth });
const documents = await strapi.documents(contentType.uid).findMany(sanitizedQueryParams);
- return await sanitize.contentAPI.output(documents, contentType, { auth: ctx.state.auth });
+ return await sanitize.output(documents, contentType, { auth: ctx.state.auth });
}
}
```
@@ -361,24 +356,25 @@ export default {
-### Extending core controllers {#extending-core-controllers}
+### Extending core controllers
-Default controllers and actions are created for each content-type. These default controllers are used to return responses to API requests (e.g. when `GET /api/articles/3` is accessed, the `findOne` action of the default controller for the "Article" content-type is called). Default controllers can be customized to implement your own logic. The following code examples should help you get started.
+Default controllers and actions are created for each content-type. These default controllers are used to return responses to API requests (e.g. when `GET /api/articles/3` is accessed, the `findOne` action of the default controller for the "Article" content-type is called). Default controllers can be customized to implement your own logic. The following code examples should help you get started.
-:::tip
+:::tip
An action from a core controller can be replaced entirely by [creating a custom action](#adding-a-new-controller) and naming the action the same as the original action (e.g. `find`, `findOne`, `create`, `update`, or `delete`).
:::
-:::tip
+:::tip
When extending a core controller, you do not need to re-implement any sanitization as it will already be handled by the core controller you are extending. Where possible it's strongly recommended to extend the core controller instead of creating a custom controller.
:::
-
+Collection type examples
:::tip
The [backend customization examples cookbook](/dev-docs/backend-customization/examples) shows how you can overwrite a default controller action, for instance for the [`create` action](/dev-docs/backend-customization/examples/services-and-controllers#custom-controller).
:::
+
@@ -393,6 +389,7 @@ async find(ctx) {
```
+
```js
@@ -499,10 +496,10 @@ async delete(ctx) {
-## Usage
+## Usage
+
+Controllers are declared and attached to a route. Controllers are automatically called when the route is called, so controllers usually do not need to be called explicitly. However, [services](/dev-docs/backend-customization/services) can call controllers, and in this case the following syntax should be used:
-Controllers are declared and attached to a route. Controllers are automatically called when the route is called, so controllers usually do not need to be called explicitly. However, [services](/dev-docs/backend-customization/services) can call controllers, and in this case the following syntax should be used:
-
```js
// access an API controller
strapi.controller('api::api-name.controller-name');
@@ -510,6 +507,6 @@ strapi.controller('api::api-name.controller-name');
strapi.controller('plugin::plugin-name.controller-name');
```
-:::tip
+:::tip
To list all the available controllers, run `yarn strapi controllers:list`.
:::
diff --git a/docusaurus/docs/dev-docs/backend-customization/examples.md b/docusaurus/docs/dev-docs/backend-customization/examples.md
index aace144de9..fa2c766034 100644
--- a/docusaurus/docs/dev-docs/backend-customization/examples.md
+++ b/docusaurus/docs/dev-docs/backend-customization/examples.md
@@ -1,17 +1,13 @@
---
title: Backend Customization Examples Cookbook
description: Learn how to use the core backend features of Strapi with the FoodAdvisor deployment
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/backend-customization
pagination_next: dev-docs/backend-customization/examples/authentication
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Backend customization: An examples cookbook using FoodAdvisor
-
-
The present section of the documentation is intended for developers who would like to get a deeper understanding of the Strapi back end customization possibilities.
The section is a collection of examples that demonstrate how the core components of the back-end server of Strapi can be used in a real-world project. Front-end code that interacts with the back end may also be part of some examples, but displayed in collapsed blocks by default since front-end code examples are not the main focus of this cookbook.
diff --git a/docusaurus/docs/dev-docs/backend-customization/examples/authentication.md b/docusaurus/docs/dev-docs/backend-customization/examples/authentication.md
index c468cc4c9d..3609416b99 100644
--- a/docusaurus/docs/dev-docs/backend-customization/examples/authentication.md
+++ b/docusaurus/docs/dev-docs/backend-customization/examples/authentication.md
@@ -1,17 +1,13 @@
---
title: Authentication flow with JWT
description: Learn how to authenticate REST API queries using our FoodAdvisor example
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/backend-customization/examples
pagination_next: dev-docs/backend-customization/examples/services-and-controllers
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Examples cookbook: Authentication flow with JWT
-
-
:::prerequisites
This page is part of the back end customization examples cookbook. Please ensure you've read its [introduction](/dev-docs/backend-customization/examples).
:::
diff --git a/docusaurus/docs/dev-docs/backend-customization/examples/middlewares.md b/docusaurus/docs/dev-docs/backend-customization/examples/middlewares.md
index 5715f9e906..9f25c97918 100644
--- a/docusaurus/docs/dev-docs/backend-customization/examples/middlewares.md
+++ b/docusaurus/docs/dev-docs/backend-customization/examples/middlewares.md
@@ -1,16 +1,12 @@
---
title: Custom middlewares
description: Learn how to use custom middlewares using our FoodAdvisor example
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/backend-customization/examples/routes
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Examples cookbook: Custom global middlewares
-
-
:::prerequisites
This page is part of the back end customization examples cookbook. Please ensure you've read its [introduction](/dev-docs/backend-customization/examples).
:::
diff --git a/docusaurus/docs/dev-docs/backend-customization/examples/policies.md b/docusaurus/docs/dev-docs/backend-customization/examples/policies.md
index 4e1ca63333..dfbf390bfc 100644
--- a/docusaurus/docs/dev-docs/backend-customization/examples/policies.md
+++ b/docusaurus/docs/dev-docs/backend-customization/examples/policies.md
@@ -1,17 +1,13 @@
---
title: Custom policies
description: Learn how to create custom policies using our FoodAdvisor example
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/backend-customization/examples/services-and-controllers
pagination_next: dev-docs/backend-customization/examples/routes
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Examples cookbook: Custom policies
-
-
:::prerequisites
This page is part of the back end customization examples cookbook. Please ensure you've read its [introduction](/dev-docs/backend-customization/examples).
:::
diff --git a/docusaurus/docs/dev-docs/backend-customization/examples/routes.md b/docusaurus/docs/dev-docs/backend-customization/examples/routes.md
index 5dabab687c..b4239e6798 100644
--- a/docusaurus/docs/dev-docs/backend-customization/examples/routes.md
+++ b/docusaurus/docs/dev-docs/backend-customization/examples/routes.md
@@ -1,17 +1,13 @@
---
title: Custom routes
description: Learn how to use custom routes using our FoodAdvisor example
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/backend-customization/examples/policies
pagination_next: dev-docs/backend-customization/examples/middlewares
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Examples cookbook: Custom routes
-
-
:::prerequisites
This page is part of the back end customization examples cookbook. Please ensure you've read its [introduction](/dev-docs/backend-customization/examples).
:::
diff --git a/docusaurus/docs/dev-docs/backend-customization/examples/services-and-controllers.md b/docusaurus/docs/dev-docs/backend-customization/examples/services-and-controllers.md
index 76b196bf5f..a24f0e8d24 100644
--- a/docusaurus/docs/dev-docs/backend-customization/examples/services-and-controllers.md
+++ b/docusaurus/docs/dev-docs/backend-customization/examples/services-and-controllers.md
@@ -1,7 +1,7 @@
---
title: Custom services and controllers
description: Learn how to authenticate use custom services and controllers using our FoodAdvisor example
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/backend-customization/examples/authentication
pagination_next: dev-docs/backend-customization/examples/policies
tags:
@@ -15,12 +15,8 @@ tags:
- services
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Examples cookbook: Custom services and controllers
-
-
:::prerequisites
This page is part of the back end customization examples cookbook. Please ensure you've read its [introduction](/dev-docs/backend-customization/examples).
:::
diff --git a/docusaurus/docs/dev-docs/backend-customization/policies.md b/docusaurus/docs/dev-docs/backend-customization/policies.md
index 53e82100fa..c957546a49 100644
--- a/docusaurus/docs/dev-docs/backend-customization/policies.md
+++ b/docusaurus/docs/dev-docs/backend-customization/policies.md
@@ -1,7 +1,7 @@
---
title: Policies
description: Strapi policies are functions that execute specific logic on each request before it reaches the controller. Policies can be customized according to your needs.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- backend customization
- backend server
diff --git a/docusaurus/docs/dev-docs/backend-customization/routes.md b/docusaurus/docs/dev-docs/backend-customization/routes.md
index 880a45abb3..67d8266238 100644
--- a/docusaurus/docs/dev-docs/backend-customization/routes.md
+++ b/docusaurus/docs/dev-docs/backend-customization/routes.md
@@ -1,7 +1,7 @@
---
title: Routes
description: Strapi routes handle requests to your content and are auto-generated for your content-types. Routes can be customized according to your needs.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- backend customization
- backend server
@@ -526,7 +526,7 @@ export default {
### Public routes
-By default, routes are protected by Strapi's authentication system, which is based on [API tokens](/dev-docs/configurations/api-tokens) or on the use of the [Users & Permissions plugin](/user-docs/plugins/strapi-plugins#users-and-permissions).
+By default, routes are protected by Strapi's authentication system, which is based on [API tokens](/dev-docs/configurations/api-tokens) or on the use of the [Users & Permissions plugin](/user-docs/users-roles-permissions/configuring-end-users-roles).
In some scenarios, it can be useful to have a route publicly available and control the access outside of the normal Strapi authentication system. This can be achieved by setting the `auth` configuration parameter of a route to `false`:
diff --git a/docusaurus/docs/dev-docs/backend-customization/services.md b/docusaurus/docs/dev-docs/backend-customization/services.md
index 5733886952..44a7860d9a 100644
--- a/docusaurus/docs/dev-docs/backend-customization/services.md
+++ b/docusaurus/docs/dev-docs/backend-customization/services.md
@@ -1,7 +1,7 @@
---
title: Services
description: Strapi services are a set of reusable functions, useful to simplify controllers logic.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- backend customization
- backend server
diff --git a/docusaurus/docs/dev-docs/backend-customization/webhooks.md b/docusaurus/docs/dev-docs/backend-customization/webhooks.md
index ac1fcdbf4c..69a4603777 100644
--- a/docusaurus/docs/dev-docs/backend-customization/webhooks.md
+++ b/docusaurus/docs/dev-docs/backend-customization/webhooks.md
@@ -1,6 +1,6 @@
---
title: Webhooks
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi webhooks are user-defined HTTP callbacks used by an application to notify other applications that an event occurred.
tags:
- backend customization
@@ -13,12 +13,8 @@ tags:
- webhooks
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Webhooks
-
-
Webhook is a construct used by an application to notify other applications that an event occurred. More precisely, webhook is a user-defined HTTP callback. Using a webhook is a good way to tell third party providers to start some processing (CI, build, deployment ...).
The way a webhook works is by delivering information to a receiving application through HTTP requests (typically POST requests).
@@ -209,8 +205,8 @@ By default Strapi webhooks can be triggered by the following events:
| [`media.create`](#mediacreate) | Triggered when a media is created. |
| [`media.update`](#mediaupdate) | Triggered when a media is updated. |
| [`media.delete`](#mediadelete) | Triggered when a media is deleted. |
-| [`review-workflows.updateEntryStage`](#review-workflowsupdateentrystage-) | Triggered when content is moved between review stages (see [review workflows](/user-docs/settings/review-workflows)). This event is only available with the edition of Strapi. |
-| [`releases.publish`](#releases-publish) | Triggered when a Release is published (see [Releases](/user-docs/releases/introduction)). This event is only available with the edition of Strapi and the plan for Strapi Cloud. |
+| [`review-workflows.updateEntryStage`](#review-workflowsupdateentrystage) | Triggered when content is moved between review stages (see [review workflows](/user-docs/settings/review-workflows)). This event is only available with the edition of Strapi. |
+| [`releases.publish`](#releases-publish) | Triggered when a Release is published (see [Releases](/user-docs/releases/introduction)). This event is available with the or the plan of Strapi and the plan for Strapi Cloud. |
\*only when `draftAndPublish` is enabled on this Content Type.
@@ -444,9 +440,10 @@ This event is triggered only when you delete a media through the media interface
}
```
-### `review-workflows.updateEntryStage`
+### `review-workflows.updateEntryStage`
+
-This event is only available with the edition of Strapi. The event is triggered when content is moved to a new review stage (see [Review Workflows](/user-docs/settings/review-workflows)).
+This event is only available with the plan of Strapi. The event is triggered when content is moved to a new review stage (see [Review Workflows](/user-docs/settings/review-workflows)).
**Example payload**
@@ -475,7 +472,8 @@ This event is only available with the edition of Strapi. {#releases-publish}
+### `releases.publish` {#releases-publish}
+
The event is triggered when a [release](/user-docs/releases/introduction) is published.
diff --git a/docusaurus/docs/dev-docs/cli.md b/docusaurus/docs/dev-docs/cli.md
index 7e83fd6090..5db4060b30 100644
--- a/docusaurus/docs/dev-docs/cli.md
+++ b/docusaurus/docs/dev-docs/cli.md
@@ -1,6 +1,6 @@
---
title: Command Line Interface
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi comes with a full featured Command Line Interface (CLI) which lets you scaffold and manage your project in seconds.
tags:
- Command Line Interface (CLI)
@@ -13,12 +13,8 @@ tags:
- strapi report
---
-import NotV5 from '/docs/snippets/\_not-updated-to-v5.md'
-
# Command Line Interface (CLI)
-
-
Strapi comes with a full featured Command Line Interface (CLI) which lets you scaffold and manage your project in seconds. The CLI works with both the `yarn` and `npm` package managers.
:::caution
@@ -56,11 +52,26 @@ Strapi modifies/creates files at runtime and needs to restart when new files are
Strapi also adds middlewares to support HMR (Hot Module Replacement) for the administration panel. This allows you to customize the administration panel without having to restart the application or run a separate server.
-```shell
-strapi develop
+
+
+
+```bash
+yarn strapi develop
options: [--no-build |--no-watch-admin |--browser |--debug |--silent]
```
+
+
+
+
+```bash
+npm run strapi develop
+options: [--no-build |--no-watch-admin |--browser |--debug |--silent]
+```
+
+
+
+
- **strapi develop --open**
Starts your application with auto-reloading enabled & open your default browser with the administration panel running.
- **strapi develop --no-watch-admin**
@@ -83,14 +94,46 @@ Start a Strapi application with auto-reloading disabled.
This command is to run a Strapi application without restarts and file writes, primarily for use in production.
Certain features such as the Content-type Builder are disabled in the `strapi start` mode because they require application restarts. The `start` command can be prefaced with [environment variables](/dev-docs/configurations/environment#strapi) to customize the application start.
+
+
+
+```bash
+yarn strapi start
+```
+
+
+
+
+
+```bash
+npm run strapi start
+```
+
+
+
+
## strapi build
Builds your admin panel.
+
+
+
+```bash
+yarn strapi build
+```
+
+
+
+
+
```bash
-strapi build
+npm run strapi build
```
+
+
+
| Option | Type | Description |
| ------------------- | :--: | -------------------------------------------------------- |
| `-d, --debug` | - | Enable debugging mode with verbose logs (default: false) |
@@ -104,66 +147,187 @@ strapi build
Logs in to Strapi Cloud (see [Cloud CLI](/cloud/cli/cloud-cli#strapi-login) documentation).
+
+
+
+```bash
+yarn strapi login
+```
+
+
+
+
+
+```bash
+npm run strapi login
+```
+
+
+
+
## strapi logout
Logs out from Strapi Cloud (see [Cloud CLI](/cloud/cli/cloud-cli#strapi-logout) documentation).
+
+
+
+```bash
+yarn strapi logout
+```
+
+
+
+
+
+```bash
+npm run strapi logout
+```
+
+
+
+
## strapi deploy
Deploys to Strapi Cloud (see [Cloud CLI](/cloud/cli/cloud-cli#strapi-deploy) documentation).
+
+
+
+```bash
+yarn strapi deploy
+```
+
+
+
+
+
+```bash
+npm run strapi deploy
+```
+
+
+
+
## strapi export
[Exports your project data](/dev-docs/data-management). The default settings create a `.tar` file, compressed using `gzip` and encrypted using `aes-128-ecb`.
+
+
+
+```bash
+yarn strapi export
+```
+
+
+
+
+
```bash
-strapi export
+npm run strapi export
```
+
+
+
The exported file is automatically named using the format `export_YYYYMMDDHHMMSS` with the current date and timestamp. Alternately, you can specify the filename using the `-f` or `--file` flag. The following table provides all of the available options as command line flags:
| Option | Type | Description |
| ------------------- | :----: | -------------------------------------------------------------------------------------------------------------------------- |
| `‑‑no‑encrypt` | - | Disables file encryption and disables the `key` option. |
| `‑‑no‑compress` | - | Disables file compression. |
+| `-f, --file ` | Name to use for the exported file (without extensions). |
| `-k`, `--key` | string | Passes the encryption key as part of the `export` command. The `--key` option can't be combined with `--no-encrypt`. |
| `-f`, `--file` | string | Specifies the export filename. Do not include a file extension. |
| `--exclude` | string | Exclude data using comma-separated data types. The available types are: `content`, `files`, and `config`. |
| `--only` | string | Include only these data. The available types are: `content`, `files`, and `config`. |
| `-h`, `--help` | - | Displays help for the `strapi export` command. |
+| `--verbose` | Enable verbose logs. |
**Examples**
+
+
+
+```bash title="Examples of strapi export:"
+# export your data with the default options and the filename myData, which results in a file named myData.tar.gz.enc.
+yarn strapi export -f myData
+
+# export your data without encryption.
+yarn strapi export --no-encrypt
+```
+
+
+
+
+
```bash title="Examples of strapi export:"
# export your data with the default options and the filename myData, which results in a file named myData.tar.gz.enc.
-strapi export -f myData
+npm run strapi export -- -f myData
# export your data without encryption.
-strapi export --no-encrypt
+npm run strapi export -- --no-encrypt
```
+
+
+
## strapi import
[Imports data](/dev-docs/data-management) into your project. The imported data must originate from another Strapi application. You must pass the `--file` option to specify the filename and location for the import action.
+
+
+
+```bash
+yarn strapi import
+```
+
+
+
+
+
```bash
-strapi import
+npm run strapi import
```
+
+
+
| Option | Type | Description |
| -------------- | ------ | ------------------------------------------------------------------------- |
| `-k,` `--key` | string | Provide the encryption key in the command instead of a subsequent prompt. |
| `-f`, `--file` | string | Path and filename with extension for the data to be imported. |
| `-h`, `--help` | - | Display the `strapi import` help commands. |
+| `--force` | Automatically answer "yes" to all prompts, including potentially destructive requests, and run non-interactively. |
+| `--exclude` | Exclude data using comma-separated data types. The available types are: `content`, `files`, and `config`. |
+| `--only` | Include only these data. The available types are: `content`, `files`, and `config`. |
+| `--throttle` | Time in milliseconds to inject an artificial delay between the "chunks" during a transfer. |
+| `--verbose` | Enable verbose logs. |
**Examples**
+
+
+
```bash title="Example of strapi import:"
+# import your data with the default parameters and pass an encryption key:
+yarn strapi import -f your-filepath-and-filename --key my-key
+```
+
+
+
+
+```bash title="Example of strapi import:"
# import your data with the default parameters and pass an encryption key:
-strapi import -f your-filepath-and-filename --key my-key
+npm run strapi import -- -f your-filepath-and-filename --key my-key
```
+
+
+
## strapi transfer
[Transfers data](/dev-docs/data-management/transfer) between 2 Strapi instances. This command is primarily intended for use between a local instance and a remote instance or 2 remote instances. The `transfer` command requires a Transfer token, which is generated in the destination instance Admin panel. See the [User Guide](/user-docs/settings/transfer-tokens) for detailed documentation on creating Transfer tokens.
@@ -189,10 +353,24 @@ Either `--to` or `--from` is required, but it's not currently allowed to enter b
**Example**
+
+
+
+```bash
+yarn strapi transfer --to http://example.com/admin --to-token my-transfer-token
+```
+
+
+
+
+
```bash
-strapi transfer --to http://example.com/admin --to-token my-transfer-token
+npm run strapi transfer -- --to http://example.com/admin --to-token my-transfer-token
```
+
+
+
## strapi report
Prints out debug information useful for debugging and required when reporting an issue.
@@ -205,18 +383,32 @@ Prints out debug information useful for debugging and required when reporting an
**Examples**
-To include the project UUID and dependencies in the output:
+
+
```bash
-strapi report --uuid --dependencies
+# To include the project UUID and dependencies in the output:
+yarn strapi report --uuid --dependencies
+
+# To log everything, use the --all option:
+yarn strapi report --all
```
-To log everything, use the `--all` option:
+
+
+
```bash
-strapi report --all
+# To include the project UUID and dependencies in the output:
+npm run strapi report -- --uuid --dependencies
+
+# To log everything, use the --all option:
+npm run strapi report -- --all
```
+
+
+
## strapi configuration:dump
**Alias**: `config:dump`
@@ -225,18 +417,55 @@ Dumps configurations to a file or stdout to help you migrate to production.
The dump format will be a JSON array.
+
+
+
+```bash title="strapi configuration:dump"
+yarn strapi configuration:dump
+
+Options:
+ -f, --file Output file, default output is stdout
+ -p, --pretty Format the output JSON with indentation and line breaks (default: false)
+```
+
+
+
+
+
```bash title="strapi configuration:dump"
+npm run strapi configuration:dump
Options:
-f, --file Output file, default output is stdout
-p, --pretty Format the output JSON with indentation and line breaks (default: false)
```
+
+
+
**Examples**
-- `strapi configuration:dump -f dump.json`
-- `strapi config:dump --file dump.json`
-- `strapi config:dump > dump.json`
+
+
+
+```bash
+yarn strapi configuration:dump -f dump.json
+yarn strapi config:dump --file dump.json
+yarn strapi config:dump > dump.json
+```
+
+
+
+
+
+```bash
+npm run strapi configuration:dump -- -f dump.json
+npm run strapi config:dump -- --file dump.json
+npm run strapi config:dump > dump.json
+```
+
+
+
All these examples are equivalent.
@@ -247,7 +476,6 @@ In case of doubt, you should avoid committing the dump file into a versioning sy
- Copy the file directly to the environment you want and run the restore command there.
- Put the file in a secure location and download it at deploy time with the right credentials.
- Encrypt the file before committing and decrypt it when running the restore command.
-
:::
## strapi configuration:restore
@@ -258,20 +486,55 @@ Restores a configuration dump into your application.
The input format must be a JSON array.
+
+
+
+```bash
+yarn strapi configuration:restore
+
+Options:
+ -f, --file Input file, default input is stdin
+ -s, --strategy Strategy name, one of: "replace", "merge", "keep". Defaults to: "replace"
+```
+
+
+
+
+
```bash
-strapi configuration:restore
+npm run strapi configuration:restore
Options:
-f, --file Input file, default input is stdin
-s, --strategy Strategy name, one of: "replace", "merge", "keep". Defaults to: "replace"
```
+
+
+
**Examples**
-- `strapi configuration:restore -f dump.json`
-- `strapi config:restore --file dump.json -s replace`
-- `cat dump.json | strapi config:restore`
-- `strapi config:restore < dump.json`
+
+
+
+```bash
+yarn strapi configuration:restore -f dump.json
+yarn strapi config:restore --file dump.json -s replace
+yarn strapi config:restore < dump.json
+```
+
+
+
+
+
+```bash
+npm run strapi configuration:restore -- -f dump.json
+npm run strapi config:restore -- --file dump.json -s replace
+npm run strapi config:restore < dump.json
+```
+
+
+
All these examples are equivalent.
@@ -295,11 +558,24 @@ Administrator's first name, last name, email, and password can be:
**Example**
+
+
+
```bash
+yarn strapi admin:create-user --firstname=Kai --lastname=Doe --email=chef@strapi.io --password=Gourmet1234
+```
+
+
-strapi admin:create-user --firstname=Kai --lastname=Doe --email=chef@strapi.io --password=Gourmet1234
+
+
+```bash
+npm run strapi admin:create-user -- --firstname=Kai --lastname=Doe --email=chef@strapi.io --password=Gourmet1234
```
+
+
+
**Options**
| Option | Type | Description | Required |
@@ -319,11 +595,24 @@ You can pass the email and new password as options or set them interactively if
**Example**
+
+
+
```bash
+yarn strapi admin:reset-user-password --email=chef@strapi.io --password=Gourmet1234
+```
+
+
-strapi admin:reset-user-password --email=chef@strapi.io --password=Gourmet1234
+
+
+```bash
+npm run strapi admin:reset-user-password -- --email=chef@strapi.io --password=Gourmet1234
```
+
+
+
**Options**
| Option | Type | Description |
@@ -336,31 +625,73 @@ strapi admin:reset-user-password --email=chef@strapi.io --password=Gourmet1234
Run a fully interactive CLI to generate APIs, [controllers](/dev-docs/backend-customization/controllers), [content-types](/dev-docs/backend-customization/models), [plugins](/dev-docs/plugins/development/create-a-plugin), [policies](/dev-docs/backend-customization/policies), [middlewares](/dev-docs/backend-customization/middlewares) and [services](/dev-docs/backend-customization/services), and [migrations](/dev-docs/database-migrations).
+
+
+
```bash
-strapi generate
+yarn strapi generate
```
+
+
+
+
+```bash
+npm run strapi generate
+```
+
+
+
+
## strapi templates:generate
Create a template from the current Strapi project.
+
+
+
```bash
-strapi templates:generate
+yarn strapi templates:generate
```
+
+
+
+
+```bash
+npm run strapi templates:generate
+```
+
+
+
+
- **strapi templates:generate <path>**
Generates a Strapi template at ``
Example: `strapi templates:generate ../strapi-template-name` will copy the required files and folders to a `template` directory inside `../strapi-template-name`
-## strapi ts:generate-types
+## strapi ts:generate-types {#ts-generate}
Generate [TypeScript](/dev-docs/typescript) typings for the project schemas.
+
+
+
+```bash
+yarn strapi ts:generate-types
+```
+
+
+
+
+
```bash
-strapi ts:generate-types
+npm run strapi ts:generate-types
```
+
+
+
- **strapi ts:generate-types --debug**
Generate typings with the debug mode enabled, displaying a detailed table of the generated schemas.
- **strapi ts:generate-types --silent** or **strapi ts:generate-types -s**
@@ -376,95 +707,263 @@ Strapi requires the project types to be generated in the `types` directory for t
Display a list of all the available [routes](/dev-docs/backend-customization/routes).
+
+
+
+```bash
+yarn strapi routes:list
+```
+
+
+
+
+
```bash
-strapi routes:list
+npm run strapi routes:list
```
+
+
+
## strapi policies:list
Display a list of all the registered [policies](/dev-docs/backend-customization/policies).
+
+
+
+```bash
+yarn strapi policies:list
+```
+
+
+
+
+
```bash
-strapi policies:list
+npm run strapi policies:list
```
+
+
+
## strapi middlewares:list
Display a list of all the registered [middlewares](/dev-docs/backend-customization/middlewares).
+
+
+
+```bash
+yarn strapi middlewares:list
+```
+
+
+
+
+
```bash
-strapi middlewares:list
+npm run strapi middlewares:list
```
+
+
+
## strapi content-types:list
Display a list of all the existing [content-types](/dev-docs/backend-customization/models).
+
+
+
+```bash
+yarn strapi content-types:list
+```
+
+
+
+
+
```bash
-strapi content-types:list
+npm run strapi content-types:list
```
+
+
+
## strapi hooks:list
Display a list of all the available hooks.
+
+
+
+```bash
+yarn strapi hooks:list
+```
+
+
+
+
+
```bash
-strapi hooks:list
+npm run strapi hooks:list
```
+
+
+
## strapi controllers:list
Display a list of all the registered [controllers](/dev-docs/backend-customization/controllers).
+
+
+
```bash
-strapi controllers:list
+yarn strapi controllers:list
```
+
+
+
+
+```bash
+npm run strapi controllers:list
+```
+
+
+
+
## strapi services:list
Display a list of all the registered [services](/dev-docs/backend-customization/services).
+
+
+
+```bash
+yarn strapi services:list
+```
+
+
+
+
+
```bash
-strapi services:list
+npm run strapi services:list
```
+
+
+
## strapi telemetry:disable
Disable data collection for the project (see [Usage Information](/dev-docs/usage-information)).
+
+
+
+```bash
+yarn strapi telemetry:disable
+```
+
+
+
+
+
```bash
-strapi telemetry:disable
+npm run strapi telemetry:disable
```
+
+
+
## strapi telemetry:enable
Re-enable data collection for the project after it was disabled (see [Usage Information](/dev-docs/usage-information)).
+
+
+
+```bash
+yarn strapi telemetry:enable
+```
+
+
+
+
+
```bash
-strapi telemetry:enable
+npm run strapi telemetry:enable
```
+
+
+
## strapi console
Start the server and eval commands in your application in real time.
+
+
+
+```bash
+yarn strapi console
+```
+
+
+
+
+
```bash
-strapi console
+npm run strapi console
```
+
+
+
## strapi version
Print the currently installed Strapi version.
It will output the current globally installed version if this command is strapi is installed globally, or the current version of Strapi within a Strapi project if the command is run from a given folder containing a Strapi project.
+
+
+
+```bash
+yarn strapi version
+```
+
+
+
+
+
```bash
-strapi version
+npm run strapi version
```
+
+
+
## strapi help
List CLI commands.
+
+
+
+```bash
+yarn strapi help
+```
+
+
+
+
+
```bash
-strapi help
+npm run strapi help
```
+
+
+
diff --git a/docusaurus/docs/dev-docs/community.md b/docusaurus/docs/dev-docs/community.md
index 31ba8b81c2..a6a33ad1be 100644
--- a/docusaurus/docs/dev-docs/community.md
+++ b/docusaurus/docs/dev-docs/community.md
@@ -35,6 +35,6 @@ You can join [GitHub](https://github.com/strapi/strapi), the [Forum](https://for
## Support
-Strapi is offered as free and open-source for users who wish to self-host the software. When having an issue or a question, the [forum](https://forum.strapi.io) is great first place to reach out for help. Both the Strapi community and core developers often check this platform and answer posts.
+Strapi's Community plan is a free and open-source option for users who wish to self-host the software. If you have an issue or a question, the [forum](https://forum.strapi.io) is great first place to reach out for help. Both the Strapi community and core developers often check this platform and answer posts.
-For enterprise support, please see our [Enterprise Support platform](https://support.strapi.io/support/home). Please note that you will need to have an active license to place tickets.
+For customers on our paid plans, you can reference our [Support platform](https://support.strapi.io/support/home) to determine your support level and check out our Support platform for more information. Please note that you must have an active or plan to submit a ticket.
diff --git a/docusaurus/docs/dev-docs/configurations.md b/docusaurus/docs/dev-docs/configurations.md
index 29aeb007e4..c4f325c307 100644
--- a/docusaurus/docs/dev-docs/configurations.md
+++ b/docusaurus/docs/dev-docs/configurations.md
@@ -1,7 +1,7 @@
---
title: Configurations
description: Learn how you can manage and customize the configuration of your Strapi application.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/installation
pagination_next: dev-docs/setup-deployment
tags:
@@ -45,7 +45,7 @@ Some specific features require additional configuration:
| [Lifecycle functions](/dev-docs/configurations/functions) | In the `/src/index` file | Optionally used to perform various actions that happen during the server lifecycle. Includes the `register`, `bootstrap`, and `destroy` functions. |
| [Cron jobs](/dev-docs/configurations/cron) |
In the `/config/server` file to enable the feature
In a dedicated, optional `cron-tasks` file that can be used to declare the jobs
| Required to setup CRON jobs for the server. |
| [Environment variables](/dev-docs/configurations/environment) | In dedicated files and folders for the environment (e.g., `config/env/production/server`) | Optionally used to define different environments and their variables. |
-| [Single Sign-On (SSO)](/dev-docs/configurations/sso) | In the `config/admin` file | Required to use the Entreprise-only SSO feature if enabled on your project. |
+| [Single Sign-On (SSO)](/dev-docs/configurations/sso) | In the `config/admin` file | Required to use the SSO feature if enabled on your project. |
| [Feature flags](/dev-docs/configurations/features) | In the `config/features` file | Optional for a typical, stable Strapi application. Only required to enable [future flags](/dev-docs/configurations/features).|
## Guides
diff --git a/docusaurus/docs/dev-docs/configurations/admin-panel.md b/docusaurus/docs/dev-docs/configurations/admin-panel.md
index 3cc5367675..60e96a5383 100644
--- a/docusaurus/docs/dev-docs/configurations/admin-panel.md
+++ b/docusaurus/docs/dev-docs/configurations/admin-panel.md
@@ -1,7 +1,7 @@
---
title: Admin panel configuration
sidebar_label: Admin panel
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi's admin panel offers a single entry point file for its configuration.
tags:
- admin panel
@@ -13,12 +13,8 @@ tags:
- password
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Admin panel configuration
-
-
The `./config/admin.js` is used to define admin panel configuration for the Strapi application.
## Available options
@@ -32,8 +28,8 @@ The `./config/admin.js` file can include the following parameters:
| `auditLogs.retentionDays` | How long [Audit Logs](/user-docs/settings/audit-logs) are kept, in days.
_The behavior differs for self-hosted vs. Strapi Cloud customers, see the note under the table._ | integer | 90 |
| `auth` | Authentication configuration | object | - |
| `auth.secret` | Secret used to encode JWT tokens | string | `undefined` |
-| `auth.domain` | Domain used within the cookie for SSO authentication (Enterprise only) | string | `undefined` |
-| `auth.providers` | List of authentication providers used for SSO (Enterprise only, see [SSO](/dev-docs/configurations/sso)) | array(object) | - |
+| `auth.domain` | Domain used within the cookie for SSO authentication | string | `undefined` |
+| `auth.providers` | List of authentication providers used for SSO (see [SSO](/dev-docs/configurations/sso)) | array(object) | - |
| `auth.options` | Options object passed to [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) | object | - |
| `auth.options.expiresIn` | JWT expire time used in [jsonwebtoken](https://www.npmjs.com/package/jsonwebtoken) | object | `30d` |
| `auth.events` | Record of all the events subscribers registered for the authentication | object | `{}` |
@@ -41,7 +37,7 @@ The `./config/admin.js` file can include the following parameters:
| `auth.events.onConnectionError` | Function called when an admin user fails to log in to the administration panel | function | `undefined` |
| `url` | Url of your admin panel. Default value: `/admin`. Note: If the url is relative, it will be concatenated with `url`. | string | `/admin` |
| `autoOpen` | Enable or disable administration opening on start. | boolean | `true` |
-| `watchIgnoreFiles` | Add custom files that should not be watched during development. See more [here](https://github.com/paulmillr/chokidar#path-filtering) (property `ignored`). | array(string) | `[]` |
+| `watchIgnoreFiles` | Add custom files that should not be watched during development. See more [here](https://github.com/paulmillr/chokidar#path-filtering) (property `ignored`). | array(string) | `[]`. Example: root path `local/data/mysql-data`, configured as `['**/mysql-data/**']` |
| `host` | Use a different host for the admin panel. | string | `localhost` |
| `port` | Use a different port for the admin panel. | string | `8000` |
| `serveAdminPanel` | If false, the admin panel won't be served. Note: the `index.html` will still be served | boolean | `true` |
@@ -52,6 +48,8 @@ The `./config/admin.js` file can include the following parameters:
| `forgotPassword.emailTemplate` | Email template as defined in [email plugin](/dev-docs/plugins/email#using-the-sendtemplatedemail-function) | object | [Default template](https://github.com/strapi/strapi/blob/main/packages/core/admin/server/config/email-templates/forgot-password.js) |
| `forgotPassword.from` | Sender mail address | string | Default value defined in your [provider configuration](/dev-docs/providers#configuring-providers) |
| `forgotPassword.replyTo` | Default address or addresses the receiver is asked to reply to | string | Default value defined in your [provider configuration](/dev-docs/providers#configuring-providers) |
+| `preview.enabled` | Enable or disable the [Preview](/user-docs/content-manager/previewing-content) feature |
+| `preview.config` | Configure the [Preview](/dev-docs/preview) feature |
| `rateLimit` | Settings to customize the rate limiting of the admin panel's authentication endpoints, additional configuration options come from [`koa2-ratelimit`](https://www.npmjs.com/package/koa2-ratelimit) | object | {} |
| `rateLimit.enabled` | Enable or disable the rate limiter | boolean | `true` |
| `rateLimit.interval` | Time window for requests to be considered as part of the same rate limiting bucket | object | `{ min: 5 }` |
diff --git a/docusaurus/docs/dev-docs/configurations/api-tokens.md b/docusaurus/docs/dev-docs/configurations/api-tokens.md
index 1b06f23085..f13c5b78e9 100644
--- a/docusaurus/docs/dev-docs/configurations/api-tokens.md
+++ b/docusaurus/docs/dev-docs/configurations/api-tokens.md
@@ -1,7 +1,7 @@
---
title: API tokens configuration
sidebar_label: API tokens
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Using API tokens allows executing a request on Strapi's REST API endpoints as an authenticated user.
tags:
- admin panel
@@ -12,12 +12,8 @@ tags:
- REST API
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# API tokens
-
-
Authentication strategies in Strapi can either be based on the use of the [Users & Permissions plugin](/user-docs/users-roles-permissions) or on the built-in API token feature.
Using API tokens allows executing a request on [REST API](/dev-docs/api/rest) or [GraphQL API](/dev-docs/api/graphql) endpoints as an authenticated user.
diff --git a/docusaurus/docs/dev-docs/configurations/api.md b/docusaurus/docs/dev-docs/configurations/api.md
index f1f575b416..5cd7f1a0f7 100644
--- a/docusaurus/docs/dev-docs/configurations/api.md
+++ b/docusaurus/docs/dev-docs/configurations/api.md
@@ -1,19 +1,15 @@
---
title: API calls configuration
sidebar_label: API calls
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsConfigSidebar
description: Strapi's default API parameters can be configured.
tags:
- base configuration
- REST API
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# API configuration
-
-
General settings for API calls can be set in the `./config/api.js` file:
| Property | Description | Type | Default |
diff --git a/docusaurus/docs/dev-docs/configurations/cron.md b/docusaurus/docs/dev-docs/configurations/cron.md
index 6a00d4ffe0..2881299c6f 100644
--- a/docusaurus/docs/dev-docs/configurations/cron.md
+++ b/docusaurus/docs/dev-docs/configurations/cron.md
@@ -1,6 +1,6 @@
---
title: CRON jobs
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi allows you to configure cron jobs for execution at specific dates and times, with optional reoccurrence rules.
tags:
- additional configuration
@@ -8,12 +8,8 @@ tags:
- cron job
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Cron jobs
-
-
:::prerequisites
The `cron.enabled` configuration option should be set to `true` in the `./config/server.js` (or `./config/server.ts` for TypeScript projects) [file](/dev-docs/configurations/server).
:::
diff --git a/docusaurus/docs/dev-docs/configurations/database.md b/docusaurus/docs/dev-docs/configurations/database.md
index 1fcb4b7818..f5025d6604 100644
--- a/docusaurus/docs/dev-docs/configurations/database.md
+++ b/docusaurus/docs/dev-docs/configurations/database.md
@@ -1,7 +1,7 @@
---
title: Database configuration
sidebar_label: Database
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi offers a single entry point file to configure its databases.
tags:
- base configuration
@@ -38,7 +38,7 @@ The `/config/database.js|ts` file accepts 2 main configuration objects:
| Parameter | Description | Type | Default |
|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------|-----------|---------|
| `client` | Database client to create the connection. Accepts the following values:
_Optional, only for SQLite_ | Use `NULL` as a default value | `Boolean` | `true` |
| `pool`
_Optional_ | [Database pooling options](#database-pooling-options) | `Object` | - |
@@ -98,10 +98,15 @@ When using Docker, change the pool `min` value to `0` as Docker will kill any id
The `settings` object found in `./config/database.js` (or `./config/database.ts` for TypeScript) is used to configure Strapi-specific database settings and accepts the following parameters:
-| Parameter | Description | Type | Default |
-| ---------------- | --------------------------------------------------------------- | --------- | ------- |
-| `forceMigration` | Enable or disable the forced database migration. | `Boolean` | `true` |
-| `runMigrations` | Enable or disable database migrations from running on start up. | `Boolean` | `true` |
+| Parameter | Description | Type | Default |
+| ---------------- | --------------------------------------------------------------- | --------- | ------- |
+| `forceMigration` | Enable or disable the forced database migration. | `Boolean` | `true` |
+| `runMigrations` | Enable or disable database migrations from running on start up. | `Boolean` | `true` |
+| `useTypescriptMigrations` | Look for migrations in the build dir instead of the src dir | `Boolean` | `false` |
+
+:::note
+When using `useTypescriptMigrations` you can continue to use existing JavaScript migrations by setting `compilerOptions { allowJs: true }` in your tsconfig file.
+:::
diff --git a/docusaurus/docs/dev-docs/configurations/environment.md b/docusaurus/docs/dev-docs/configurations/environment.md
index 0f9446b452..53c0aeaec3 100644
--- a/docusaurus/docs/dev-docs/configurations/environment.md
+++ b/docusaurus/docs/dev-docs/configurations/environment.md
@@ -1,19 +1,15 @@
---
title: Environment variables configuration
sidebar_label: Environment variables
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- additional configuration
- configuration
- environment
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Environment configuration and variables
-
-
Strapi provides specific environment variable names. Defining them in an environment file (e.g., `.env`) will make these variables and their values available in your code.
:::tip
diff --git a/docusaurus/docs/dev-docs/configurations/features.md b/docusaurus/docs/dev-docs/configurations/features.md
index 0863ff0134..09ef7c4640 100644
--- a/docusaurus/docs/dev-docs/configurations/features.md
+++ b/docusaurus/docs/dev-docs/configurations/features.md
@@ -2,7 +2,7 @@
title: Features configuration
sidebar_label: Features
description: Enable experimental Strapi features
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsConfigSidebar
tags:
- additional configuration
- configuration
@@ -31,7 +31,7 @@ To enable a future flag:
1. (_optional_) If the server is running, stop it with `Ctrl-C`.
2. Open the `config/features.js|ts` file or create it if the file does not exist yet. The file will export a `future` object with all the future flags to enable.
-3. To enable a future flag, add its property name (see [full list](#available-future-flags)) to the `future` object and ensure the property's value is set to `true`. The following example shows how to enable the `contentReleasesScheduling` future flag:
+3. To enable a future flag, add its property name (see [full list](#available-future-flags)) to the `future` object and ensure the property's value is set to `true`. The following example shows how to enable the `preview` future flag:
@@ -40,8 +40,8 @@ To enable a future flag:
```ts title="/config/features.ts"
module.export = ({ env }) => ({
future: {
- // You could also simply write: contentReleases: true
- contentReleasesScheduling: env.bool('STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING', false),
+ // You could also simply write: preview: true
+ preview: env.bool('STRAPI_FUTURE_PREVIEW', false),
},
})
@@ -50,10 +50,10 @@ To enable a future flag:
This example assumes that you have an `.env` environment file at the root of your application and that the file includes the following line:
```json title=".env"
- STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING=true
+ STRAPI_FUTURE_PREVIEW=true
```
- If your environment file does not include this value, the `contentReleasesScheduling` future flag property value will default to `false` and the experimental feature will not be enabled.
+ If your environment file does not include this value, the `preview` future flag property value will default to `false` and the experimental feature will not be enabled.
@@ -62,8 +62,8 @@ To enable a future flag:
```ts title="/config/features.ts"
export default {
future: {
- // You could also simply write: contentReleases: true
- contentReleasesScheduling: env.bool('STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING', false),
+ // You could also simply write: preview: true
+ preview: env.bool('STRAPI_FUTURE_PREVIEW', false),
},
};
```
@@ -71,10 +71,10 @@ To enable a future flag:
This example assumes that you have an `.env` environment file at the root of your application and that the file includes the following line:
```json title=".env"
- STRAPI_FUTURE_CONTENT_RELEASES_SCHEDULING=true
+ STRAPI_FUTURE_PREVIEW=true
```
- If your environment file does not include this value, the `contentReleases` future flag property value will default to `false` and the experimental feature will not be enabled.
+ If your environment file does not include this value, the `preview` future flag property value will default to `false` and the experimental feature will not be enabled.
@@ -108,9 +108,9 @@ Developers can use the following APIs to interact with future flags:
## Available future flags
There are currently no available future flags. This section will be updated once new experimental features are available for testing.
-
-
+| `preview` | [Preview](/user-docs/content-manager/previewing-content) | `STRAPI_FUTURE_PREVIEW` | -->
diff --git a/docusaurus/docs/dev-docs/configurations/functions.md b/docusaurus/docs/dev-docs/configurations/functions.md
index 389b0745e0..b72ba1ed48 100644
--- a/docusaurus/docs/dev-docs/configurations/functions.md
+++ b/docusaurus/docs/dev-docs/configurations/functions.md
@@ -1,6 +1,6 @@
---
title: Lifecycle functions
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi includes lifecycle functions (e.g. register, bootstrap and destroy) that control the flow of your application.
tags:
- additional configuration
@@ -20,17 +20,12 @@ The `./src/index.js` file (or `./src/index.ts` file in a [TypeScript-based](/dev
The functions can be synchronous, asynchronous, or return a promise.
-``` mermaid
-flowchart TB
- A([The Strapi application starts.]) --> B{"register()"}
- B -- The Strapi application is setup. --> C
- C{"bootstrap()"} -- The Strapi back-end server starts. --> D
- D(Request)
- D
- click B "#register"
- click C "#bootstrap"
- click D "/dev-docs/backend-customization/requests-responses"
-```
+
## Synchronous function
diff --git a/docusaurus/docs/dev-docs/configurations/guides/access-cast-environment-variables.md b/docusaurus/docs/dev-docs/configurations/guides/access-cast-environment-variables.md
index 1cefc94f9d..3016cd2679 100644
--- a/docusaurus/docs/dev-docs/configurations/guides/access-cast-environment-variables.md
+++ b/docusaurus/docs/dev-docs/configurations/guides/access-cast-environment-variables.md
@@ -1,7 +1,7 @@
---
title: Access and cast environment variables
description: Learn how to cast environment variables in Strapi 5 with the env() utility.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- casting values
- configuration
@@ -10,12 +10,8 @@ tags:
- environment
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# How to access and cast environment variables
-
-
In most use cases there will be different configurations between environments (e.g. database credentials).
Instead of writing those credentials into configuration files, variables can be defined in a `.env` file at the root of the application:
diff --git a/docusaurus/docs/dev-docs/configurations/guides/access-configuration-values.md b/docusaurus/docs/dev-docs/configurations/guides/access-configuration-values.md
index fab9e214da..e8718cb1f2 100644
--- a/docusaurus/docs/dev-docs/configurations/guides/access-configuration-values.md
+++ b/docusaurus/docs/dev-docs/configurations/guides/access-configuration-values.md
@@ -1,7 +1,7 @@
---
title: Access configuration values from the code
description: Learn how to access Strapi 5 configuration values from the code.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- configuration
- configuration guide
diff --git a/docusaurus/docs/dev-docs/configurations/guides/public-assets.md b/docusaurus/docs/dev-docs/configurations/guides/public-assets.md
index f9aee8a585..c2349b061a 100644
--- a/docusaurus/docs/dev-docs/configurations/guides/public-assets.md
+++ b/docusaurus/docs/dev-docs/configurations/guides/public-assets.md
@@ -1,6 +1,6 @@
---
title: Use public assets
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: The public folder of Strapi is used for static files that you want to make accessible to the outside world.
tags:
- company logo
@@ -10,12 +10,8 @@ tags:
- public assets
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# How to use public assets with Strapi
-
-
Public assets are static files (e.g. images, video, CSS files, etc.) that you want to make accessible to the outside world.
Because an API may need to serve static assets, every new Strapi project includes by default a folder named `/public`. Any file located in this directory is accessible if the request's path doesn't match any other defined route and if it matches a public file name (e.g. an image named `company-logo.png` in `./public/` is accessible through `/company-logo.png` URL).
diff --git a/docusaurus/docs/dev-docs/configurations/guides/rbac.md b/docusaurus/docs/dev-docs/configurations/guides/rbac.md
index 18513a8960..12fffdffe4 100644
--- a/docusaurus/docs/dev-docs/configurations/guides/rbac.md
+++ b/docusaurus/docs/dev-docs/configurations/guides/rbac.md
@@ -1,7 +1,7 @@
---
title: Create new Role-Based Access Control (RBAC) conditions
sidebar_label: Configure RBAC conditions
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: In Strapi, RBAC is an approach to restricting access to some features of the admin panel to some users. The Community Edition of Strapi offers 3 default roles.
tags:
- administrator
@@ -13,12 +13,8 @@ tags:
- Users, Roles & Permissions
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# How to create custom conditions for Role-Based Access Control (RBAC)
-
-
Role-Based Access Control (RBAC) is an approach to restricting access to some users. In a Strapi application, users of the admin panel are administrators. Their roles and permissions are [configured in the admin panel](/user-docs/users-roles-permissions/configuring-administrator-roles).
## Declaring new conditions
diff --git a/docusaurus/docs/dev-docs/configurations/middlewares.md b/docusaurus/docs/dev-docs/configurations/middlewares.md
index e55f4bc868..3c45457f2b 100644
--- a/docusaurus/docs/dev-docs/configurations/middlewares.md
+++ b/docusaurus/docs/dev-docs/configurations/middlewares.md
@@ -1,7 +1,7 @@
---
title: Middlewares configuration
sidebar_label: Middlewares
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi offers a single entry point file for its middlewares configurations.
tags:
- base configuration
diff --git a/docusaurus/docs/dev-docs/configurations/plugins.md b/docusaurus/docs/dev-docs/configurations/plugins.md
index efbf5249ec..05befb253d 100644
--- a/docusaurus/docs/dev-docs/configurations/plugins.md
+++ b/docusaurus/docs/dev-docs/configurations/plugins.md
@@ -1,7 +1,7 @@
---
title: Plugins configuration
sidebar_label: Plugins
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi plugins have a single entry point file to define their configurations.
tags:
- additional configuration
@@ -14,12 +14,8 @@ tags:
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Plugins configuration
-
-
Plugin configurations are stored in `/config/plugins.js|ts` (see [project structure](/dev-docs/project-structure)). Each plugin can be configured with the following available parameters:
| Parameter | Description | Type |
@@ -111,7 +107,7 @@ The [GraphQL plugin](/dev-docs/plugins/graphql) has the following specific confi
| `maxLimit` | Maximum value for [the `pagination[limit]` parameter](/dev-docs/api/graphql#pagination-by-offset) used in API calls | Integer | `-1` |
| `playgroundAlways` | Whether the playground should be publicly exposed.
Enabled by default in if `NODE_ENV` is set to `development`. | Boolean | `false` |
| `shadowCRUD` | Whether type definitions for queries, mutations and resolvers based on models should be created automatically (see [Shadow CRUD documentation](/dev-docs/plugins/graphql#shadow-crud)). | Boolean | `true` |
-| `v4ComptabilityMode` | Enables the retro-compatibility with the Strapi v4 format (see more details in the [breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated) | Boolean | `false` |
+| `v4CompatibilityMode` | Enables the retro-compatibility with the Strapi v4 format (see more details in the [breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated) | Boolean | `false` |
**Example custom configuration**:
diff --git a/docusaurus/docs/dev-docs/configurations/server.md b/docusaurus/docs/dev-docs/configurations/server.md
index a9b774783c..c4157e220c 100644
--- a/docusaurus/docs/dev-docs/configurations/server.md
+++ b/docusaurus/docs/dev-docs/configurations/server.md
@@ -2,7 +2,7 @@
title: Server configuration
sidebar_label: Server
description: Strapi offers a single entry point file for its server configuration.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- app keys
- base configuration
@@ -12,12 +12,8 @@ tags:
- port
---
-import NotV5 from '/docs/snippets/\_not-updated-to-v5.md'
-
# Server configuration
-
-
The `./config/server.js` file is used to define the server configuration for a Strapi application.
:::caution
diff --git a/docusaurus/docs/dev-docs/configurations/sso.md b/docusaurus/docs/dev-docs/configurations/sso.md
index 1d340945b2..bbead579d6 100644
--- a/docusaurus/docs/dev-docs/configurations/sso.md
+++ b/docusaurus/docs/dev-docs/configurations/sso.md
@@ -1,8 +1,8 @@
---
title: SSO configuration
sidebar_label: Single Sign-On (SSO)
-displayed_sidebar: cmsSidebar
-description: Strapi's SSO allows you to configure additional sign-in and sign-up methods for your administration panel. It requires an Enterprise Edition with a Gold plan.
+displayed_sidebar: devDocsSidebar
+description: Strapi's SSO allows you to configure additional sign-in and sign-up methods for your administration panel.
canonicalUrl: https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/sso.html
tags:
- additional configuration
@@ -12,18 +12,15 @@ tags:
- SSO
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
-# Single Sign-On
-
-
+# Single Sign-On
+
Single Sign-On on Strapi allows you to configure additional sign-in and sign-up methods for your administration panel.
:::prerequisites
- A Strapi application running on version 3.5.0 or higher is required.
-- To configure SSO on your application, you will need an EE license with a [Gold plan](https://strapi.io/pricing-self-hosted).
+- To configure SSO on your application, you will need an plan or the add-on.
- Make sure the SSO feature is [enabled in the admin panel](/user-docs/settings/single-sign-on).
- Make sure Strapi is part of the applications you can access with your provider. For example, with Microsoft (Azure) Active Directory, you must first ask someone with the right permissions to add Strapi to the list of allowed applications. Please refer to your provider(s) documentation to learn more about that.
:::
diff --git a/docusaurus/docs/dev-docs/configurations/typescript.md b/docusaurus/docs/dev-docs/configurations/typescript.md
index f00a3a3b28..bd3c6a1fad 100644
--- a/docusaurus/docs/dev-docs/configurations/typescript.md
+++ b/docusaurus/docs/dev-docs/configurations/typescript.md
@@ -1,7 +1,7 @@
---
title: TypeScript configuration
sidebar_label: TypeScript
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: How to configure Strapi for TypeScript development.
tags:
- additional configuration
@@ -10,12 +10,8 @@ tags:
- typescript
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# TypeScript configuration
-
-
[TypeScript](/dev-docs/typescript)-enabled Strapi projects have a specific project structure and handle TypeScript project configuration through [`tsconfig.json` files](#project-structure-and-typescript-specific-configuration-files).
Strapi also has dedicated TypeScript features that are configured [in the `config/typescript.js|ts` file](#strapi-specific-configuration-for-typescript).
diff --git a/docusaurus/docs/dev-docs/custom-fields.md b/docusaurus/docs/dev-docs/custom-fields.md
index 6bda888595..ad373d4107 100644
--- a/docusaurus/docs/dev-docs/custom-fields.md
+++ b/docusaurus/docs/dev-docs/custom-fields.md
@@ -1,7 +1,7 @@
---
title: Custom fields
description: Learn how you can use custom fields to extend Strapi's content-types capabilities.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
canonicalUrl: https://docs.strapi.io/dev-docs/development/custom-fields.html
tags:
- admin panel
@@ -13,12 +13,9 @@ tags:
---
import CustomFieldRequiresPlugin from '/docs/snippets/custom-field-requires-plugin.md'
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
# Custom fields
-
-
Custom fields extend Strapi’s capabilities by adding new types of fields to content-types and components. Once created or added to Strapi via plugins, custom fields can be used in the Content-Type Builder and Content Manager just like built-in fields.
The present documentation is intended for custom field creators: it describes which APIs and functions developers must use to create a new custom field. The [User Guide](/user-docs/plugins/introduction-to-plugins.md#custom-fields) describes how to add and use custom fields from Strapi's admin panel.
diff --git a/docusaurus/docs/dev-docs/customization.md b/docusaurus/docs/dev-docs/customization.md
index 70ca48189d..5471df45f7 100644
--- a/docusaurus/docs/dev-docs/customization.md
+++ b/docusaurus/docs/dev-docs/customization.md
@@ -1,7 +1,7 @@
---
title: Customization
description: Learn more about Strapi 5 customization possibilities
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/advanced-features
pagination_next: dev-docs/plugins
tags:
@@ -25,17 +25,13 @@ Strapi includes 2 main components:
From a bigger picture, this is how Strapi integrates in a typical, generic setup: Strapi includes 2 parts, a back-end server and an admin panel, and interact with a database (which stores data) and an external, front-end application that displays your data. Both parts of Strapi can be customized to some extent.
-```mermaid
-
- flowchart LR
- database[(Database)] --> backend[Back-end server]
- subgraph Strapi
- direction BT
- backend --> frontend[Admin Panel]
- frontend
- end
- frontend --> external{{External, front-end applications}}
-```
+
diff --git a/docusaurus/docs/dev-docs/data-management.md b/docusaurus/docs/dev-docs/data-management.md
index a2e2db7fb2..037cdab316 100644
--- a/docusaurus/docs/dev-docs/data-management.md
+++ b/docusaurus/docs/dev-docs/data-management.md
@@ -1,7 +1,8 @@
---
title: Data management system
description: Import, export, and transfer data using the Strapi CLI
-displayed_sidebar: cmsSidebar
+pagination_next: dev-docs/data-management/export
+displayed_sidebar: devDocsSidebar
keywords:
- DEITS
tags:
diff --git a/docusaurus/docs/dev-docs/data-management/export.md b/docusaurus/docs/dev-docs/data-management/export.md
index 782fdb99f7..59abcfc6f8 100644
--- a/docusaurus/docs/dev-docs/data-management/export.md
+++ b/docusaurus/docs/dev-docs/data-management/export.md
@@ -1,7 +1,7 @@
---
title: Data export
description: Export data using the Strapi CLI
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
canonicalUrl: https://docs.strapi.io/dev-docs/data-management/export.html
tags:
- configure data encryption
@@ -15,12 +15,8 @@ tags:
- tar.gz.enc file
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Data export
-
-
The `strapi export` command is used to export data from a local Strapi instance. By default, the `strapi export` command exports data as an encrypted and compressed `tar.gz.enc` file which includes:
- the project configuration,
@@ -30,7 +26,7 @@ The `strapi export` command is used to export data from a local Strapi instance.
- schemas,
- the `metadata.json` file.
-The following documentation details the available options to customize your data export. The export command and all of the available options are run using the [Strapi CLI](/dev-docs/cli#strapi-export).
+The following documentation presents some use cases and options to customize your data export. The export command and all of the available options are run using the Strapi CLI. All the available options are detailed in the [CLI reference documentation](/dev-docs/cli#strapi-export).
:::caution
* Admin users and API tokens are not exported.
diff --git a/docusaurus/docs/dev-docs/data-management/import.md b/docusaurus/docs/dev-docs/data-management/import.md
index 9c9d9eaf54..b3c1d517bd 100644
--- a/docusaurus/docs/dev-docs/data-management/import.md
+++ b/docusaurus/docs/dev-docs/data-management/import.md
@@ -1,7 +1,7 @@
---
title: Data import
description: Import data using the Strapi CLI
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
canonicalUrl: https://docs.strapi.io/dev-docs/data-management/import.html
tags:
- data management system
@@ -13,12 +13,8 @@ tags:
- tar.gz.enc file
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Data import
-
-
The `strapi import` command is used to import data from a file. By default, the `strapi import` command imports data from an encrypted and compressed `tar.gz.enc` file which includes:
- the project configuration,
@@ -28,7 +24,7 @@ The `strapi import` command is used to import data from a file. By default, the
- schemas,
- the `metadata.json` file.
-The following documentation details the available options to customize your data import. The import command and all of the available options are run using the [Strapi CLI](/dev-docs/cli#strapi-import).
+The following documentation presents some use cases and options to customize your data import. The import command and all of the available options are run using the Strapi CLI. All the available options are detailed in the [CLI reference documentation](/dev-docs/cli#strapi-import).
:::warning
diff --git a/docusaurus/docs/dev-docs/data-management/transfer.md b/docusaurus/docs/dev-docs/data-management/transfer.md
index e965a90800..b51dd7791e 100644
--- a/docusaurus/docs/dev-docs/data-management/transfer.md
+++ b/docusaurus/docs/dev-docs/data-management/transfer.md
@@ -1,7 +1,7 @@
---
title: Data transfer
description: Transfer data using the Strapi CLI
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
canonicalUrl: https://docs.strapi.io/dev-docs/data-management/transfer.html
tags:
- data management system
@@ -10,12 +10,8 @@ tags:
- environment
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Data transfer
-
-
The `strapi transfer` command streams your data from one Strapi instance to another Strapi instance. The `transfer` command uses strict schema matching, meaning your two Strapi instances need to be exact copies of each other except for the contained data. The default `transfer` command transfers your content (entities and relations), files (assets), project configuration, and schemas. The command allows you to transfer data:
- from a local Strapi instance to a remote Strapi instance
@@ -41,6 +37,7 @@ The CLI command consists of the following arguments:
| `--exclude` | Exclude data using comma-separated data types. The available types are: `content`, `files`, and `config`. |
| `--only` | Include only these data. The available types are: `content`, `files`, and `config`. |
| `--throttle` | Time in milliseconds to inject an artificial delay between the "chunks" during a transfer. |
+| `--verbose` | Enable verbose logs. |
:::caution
Either `--to` or `--from` is required.
diff --git a/docusaurus/docs/dev-docs/database-migrations.md b/docusaurus/docs/dev-docs/database-migrations.md
index f3f3d209cb..d20d6417ab 100644
--- a/docusaurus/docs/dev-docs/database-migrations.md
+++ b/docusaurus/docs/dev-docs/database-migrations.md
@@ -3,12 +3,8 @@ title: Database migrations
description: Strapi database migrations are ways to modify the database
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Database migrations
-
-
Database migrations exist to run one-time queries against the database, typically to modify the tables structure or the data when upgrading the Strapi application. These migrations are run automatically when the application starts and are executed before the automated schema migrations that Strapi also performs on boot.
:::callout 🚧 Experimental feature
@@ -54,8 +50,7 @@ module.exports = { up };
3. Fill in the template by adding actual migration code inside the `up()` function.
`up()` receives a [Knex instance](https://knexjs.org/), already in a transaction state, that can be used to run the database queries.
-
-Example of migration file
+Example of migration file:
```jsx title="./database/migrations/2022.05.10T00.00.00.name-of-my-migration.js"
@@ -77,16 +72,13 @@ module.exports = {
};
```
-
-
### Using Strapi Instance for migrations
:::danger
If a user opts not to use Knex directly for migrations and instead utilizes the Strapi instance, it is important to wrap the migration code with `strapi.db.transaction()`. Failure to do so may result in migrations not rolling back if an error occurs.
:::
-
-Example of migration file with Strapi instance
+Example of migration file with Strapi instance:
```jsx title="./database/migrations/2022.05.10T00.00.00.name-of-my-migration.js"
module.exports = {
@@ -95,7 +87,7 @@ module.exports = {
// Your migration code here
// Example: creating new entries
- await strapi.entityService.create('api::article.article', {
+ await strapi.documents('api::article.article').create({
data: {
title: 'My Article',
},
@@ -107,7 +99,3 @@ module.exports = {
},
};
```
-
-
-
-Footer
diff --git a/docusaurus/docs/dev-docs/deployment.md b/docusaurus/docs/dev-docs/deployment.md
index 0ac9756ec0..05b95d31ae 100644
--- a/docusaurus/docs/dev-docs/deployment.md
+++ b/docusaurus/docs/dev-docs/deployment.md
@@ -1,6 +1,6 @@
---
title: Deployment
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Learn how to develop locally with Strapi and deploy Strapi with various hosting options.
tags:
- database deployment
@@ -180,7 +180,7 @@ strapi.createStrapi(/* {...} */).start();
:::caution
If you are developing a `TypeScript`-based project you must provide the `distDir` option to start the server.
-For more information, consult the [TypeScript documentation](/dev-docs/typescript/development#use-the-strapi-factory).
+For more information, consult the [TypeScript documentation](/dev-docs/typescript/development#use-the-createstrapi-factory).
:::
### Advanced configurations
diff --git a/docusaurus/docs/dev-docs/error-handling.md b/docusaurus/docs/dev-docs/error-handling.md
index 7c30d8cbae..babdb8a4f8 100644
--- a/docusaurus/docs/dev-docs/error-handling.md
+++ b/docusaurus/docs/dev-docs/error-handling.md
@@ -1,6 +1,6 @@
---
title: Error handling
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: With Strapi's error handling feature it's easy to send and receive errors in your application.
tags:
- ctx
@@ -14,12 +14,8 @@ tags:
- strapi-utils
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Error handling
-
-
Strapi is natively handling errors with a standard format.
There are 2 use cases for error handling:
diff --git a/docusaurus/docs/dev-docs/faq.md b/docusaurus/docs/dev-docs/faq.md
index 5bfbc61937..a164684aa8 100644
--- a/docusaurus/docs/dev-docs/faq.md
+++ b/docusaurus/docs/dev-docs/faq.md
@@ -19,12 +19,8 @@ tags:
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Frequently Asked Questions
-
-
Below are answers and solutions to most common issues that you may experience when working with Strapi.
## Why can't I create or update content-types in production/staging?
diff --git a/docusaurus/docs/dev-docs/i18n.md b/docusaurus/docs/dev-docs/i18n.md
index 13eb59d840..1de871d09f 100644
--- a/docusaurus/docs/dev-docs/i18n.md
+++ b/docusaurus/docs/dev-docs/i18n.md
@@ -1,6 +1,6 @@
---
title: Internationalization (i18n)
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
toc_max_heading_level: 4
description: Instructions on how to use Strapi Content API with the Internationalization (i18n) optional plugin
tags:
diff --git a/docusaurus/docs/dev-docs/installation/cli.md b/docusaurus/docs/dev-docs/installation/cli.md
index cc33ab605d..f8a7fa28d7 100644
--- a/docusaurus/docs/dev-docs/installation/cli.md
+++ b/docusaurus/docs/dev-docs/installation/cli.md
@@ -1,6 +1,6 @@
---
title: CLI
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Fast-track local install for getting Strapi running on your computer in less than a minute.
tags:
- installation
@@ -192,3 +192,9 @@ npm run develop
+
+:::info Where is my content?
+For self-hosted Strapi projects, all your content is saved in a database file (by default, SQLite) found in the `.tmp` subfolder in your project's folder. So anytime you start the Strapi application from the folder where you created your Strapi project, your content will be available (see [database configuration](/dev-docs/configurations/database) for additional information).
+
+If the content was added to a Strapi Cloud project, it is stored in the database managed with your Strapi Cloud project (see [advanced database configuration for Strapi Cloud](/cloud/advanced/database) for additional information).
+:::
diff --git a/docusaurus/docs/dev-docs/installation/docker.md b/docusaurus/docs/dev-docs/installation/docker.md
index d8ea7cb305..f9abadd0fc 100644
--- a/docusaurus/docs/dev-docs/installation/docker.md
+++ b/docusaurus/docs/dev-docs/installation/docker.md
@@ -1,6 +1,6 @@
---
title: Docker
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Quickly create a Docker container from a local project.
tags:
- installation
@@ -71,7 +71,7 @@ WORKDIR /opt/
COPY package.json yarn.lock ./
RUN yarn global add node-gyp
RUN yarn config set network-timeout 600000 -g && yarn install
-ENV PATH /opt/node_modules/.bin:$PATH
+ENV PATH=/opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
@@ -97,7 +97,7 @@ WORKDIR /opt/
COPY package.json package-lock.json ./
RUN npm install -g node-gyp
RUN npm config set fetch-retry-maxtimeout 600000 -g && npm install
-ENV PATH /opt/node_modules/.bin:$PATH
+ENV PATH=/opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
@@ -352,7 +352,7 @@ WORKDIR /opt/
COPY package.json yarn.lock ./
RUN yarn global add node-gyp
RUN yarn config set network-timeout 600000 -g && yarn install --production
-ENV PATH /opt/node_modules/.bin:$PATH
+ENV PATH=/opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
RUN yarn build
@@ -366,7 +366,7 @@ WORKDIR /opt/
COPY --from=build /opt/node_modules ./node_modules
WORKDIR /opt/app
COPY --from=build /opt/app ./
-ENV PATH /opt/node_modules/.bin:$PATH
+ENV PATH=/opt/node_modules/.bin:$PATH
RUN chown -R node:node /opt/app
USER node
@@ -389,7 +389,7 @@ WORKDIR /opt/
COPY package.json package-lock.json ./
RUN npm install -g node-gyp
RUN npm config set fetch-retry-maxtimeout 600000 -g && npm install --only=production
-ENV PATH /opt/node_modules/.bin:$PATH
+ENV PATH=/opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
RUN npm run build
@@ -403,7 +403,7 @@ WORKDIR /opt/
COPY --from=build /opt/node_modules ./node_modules
WORKDIR /opt/app
COPY --from=build /opt/app ./
-ENV PATH /opt/node_modules/.bin:$PATH
+ENV PATH=/opt/node_modules/.bin:$PATH
RUN chown -R node:node /opt/app
USER node
diff --git a/docusaurus/docs/dev-docs/integrations/11ty.md b/docusaurus/docs/dev-docs/integrations/11ty.md
index 21fa391f14..f177ff87f9 100644
--- a/docusaurus/docs/dev-docs/integrations/11ty.md
+++ b/docusaurus/docs/dev-docs/integrations/11ty.md
@@ -1,6 +1,6 @@
---
title: 11ty
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with 11ty.
---
diff --git a/docusaurus/docs/dev-docs/integrations/angular.md b/docusaurus/docs/dev-docs/integrations/angular.md
index 543da0cfd6..a288849bb3 100644
--- a/docusaurus/docs/dev-docs/integrations/angular.md
+++ b/docusaurus/docs/dev-docs/integrations/angular.md
@@ -1,6 +1,6 @@
---
title: Angular
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Angular.
---
diff --git a/docusaurus/docs/dev-docs/integrations/dart.md b/docusaurus/docs/dev-docs/integrations/dart.md
index 2f3d3c3df5..12456a8eb3 100644
--- a/docusaurus/docs/dev-docs/integrations/dart.md
+++ b/docusaurus/docs/dev-docs/integrations/dart.md
@@ -1,6 +1,6 @@
---
title: Dart
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Dart.
---
diff --git a/docusaurus/docs/dev-docs/integrations/flutter.md b/docusaurus/docs/dev-docs/integrations/flutter.md
index dca568009f..fb1a640678 100644
--- a/docusaurus/docs/dev-docs/integrations/flutter.md
+++ b/docusaurus/docs/dev-docs/integrations/flutter.md
@@ -1,6 +1,6 @@
---
title: Flutter
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Flutter.
---
diff --git a/docusaurus/docs/dev-docs/integrations/gatsby.md b/docusaurus/docs/dev-docs/integrations/gatsby.md
index 6d2095a8d1..81349dfb81 100644
--- a/docusaurus/docs/dev-docs/integrations/gatsby.md
+++ b/docusaurus/docs/dev-docs/integrations/gatsby.md
@@ -1,6 +1,6 @@
---
title: Gatsby
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Gatsby.
---
diff --git a/docusaurus/docs/dev-docs/integrations/go.md b/docusaurus/docs/dev-docs/integrations/go.md
index 95dd300912..e52fde1151 100644
--- a/docusaurus/docs/dev-docs/integrations/go.md
+++ b/docusaurus/docs/dev-docs/integrations/go.md
@@ -1,6 +1,6 @@
---
title: Go
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Go.
---
diff --git a/docusaurus/docs/dev-docs/integrations/graphql.md b/docusaurus/docs/dev-docs/integrations/graphql.md
index 9ecc275ad8..39569e3b22 100644
--- a/docusaurus/docs/dev-docs/integrations/graphql.md
+++ b/docusaurus/docs/dev-docs/integrations/graphql.md
@@ -1,6 +1,6 @@
---
title: GraphQL
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with GraphQL.
---
diff --git a/docusaurus/docs/dev-docs/integrations/gridsome.md b/docusaurus/docs/dev-docs/integrations/gridsome.md
index e6286ae476..2e729f9bdb 100644
--- a/docusaurus/docs/dev-docs/integrations/gridsome.md
+++ b/docusaurus/docs/dev-docs/integrations/gridsome.md
@@ -1,6 +1,6 @@
---
title: Gridsome
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Gridsome.
---
diff --git a/docusaurus/docs/dev-docs/integrations/jekyll.md b/docusaurus/docs/dev-docs/integrations/jekyll.md
index f4ce0d7b7a..f8cb02091b 100644
--- a/docusaurus/docs/dev-docs/integrations/jekyll.md
+++ b/docusaurus/docs/dev-docs/integrations/jekyll.md
@@ -1,6 +1,6 @@
---
title: Jekyll
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Jekyll.
---
diff --git a/docusaurus/docs/dev-docs/integrations/laravel.md b/docusaurus/docs/dev-docs/integrations/laravel.md
index 676c58e335..c7e1f6b258 100644
--- a/docusaurus/docs/dev-docs/integrations/laravel.md
+++ b/docusaurus/docs/dev-docs/integrations/laravel.md
@@ -1,6 +1,6 @@
---
title: Laravel
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Laravel.
---
diff --git a/docusaurus/docs/dev-docs/integrations/next-js.md b/docusaurus/docs/dev-docs/integrations/next-js.md
index 0bef61342a..7ae49c5867 100644
--- a/docusaurus/docs/dev-docs/integrations/next-js.md
+++ b/docusaurus/docs/dev-docs/integrations/next-js.md
@@ -1,6 +1,6 @@
---
title: Next.js
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Next.js.
---
diff --git a/docusaurus/docs/dev-docs/integrations/nuxt-js.md b/docusaurus/docs/dev-docs/integrations/nuxt-js.md
index 8027b7879b..22de2e6531 100644
--- a/docusaurus/docs/dev-docs/integrations/nuxt-js.md
+++ b/docusaurus/docs/dev-docs/integrations/nuxt-js.md
@@ -1,6 +1,6 @@
---
title: Nuxt
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Nuxt 3.
---
diff --git a/docusaurus/docs/dev-docs/integrations/php.md b/docusaurus/docs/dev-docs/integrations/php.md
index bc99505947..de6ab2012b 100644
--- a/docusaurus/docs/dev-docs/integrations/php.md
+++ b/docusaurus/docs/dev-docs/integrations/php.md
@@ -1,6 +1,6 @@
---
title: PHP
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with PHP.
---
diff --git a/docusaurus/docs/dev-docs/integrations/python.md b/docusaurus/docs/dev-docs/integrations/python.md
index 05f6ec4429..59b09b3be1 100644
--- a/docusaurus/docs/dev-docs/integrations/python.md
+++ b/docusaurus/docs/dev-docs/integrations/python.md
@@ -1,6 +1,6 @@
---
title: Python
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Python.
---
diff --git a/docusaurus/docs/dev-docs/integrations/react.md b/docusaurus/docs/dev-docs/integrations/react.md
index bf7ebfe74a..8c105e43b8 100644
--- a/docusaurus/docs/dev-docs/integrations/react.md
+++ b/docusaurus/docs/dev-docs/integrations/react.md
@@ -1,6 +1,6 @@
---
title: React
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with React.
---
diff --git a/docusaurus/docs/dev-docs/integrations/ruby.md b/docusaurus/docs/dev-docs/integrations/ruby.md
index 61d3c47b54..c5ccd9fd4a 100644
--- a/docusaurus/docs/dev-docs/integrations/ruby.md
+++ b/docusaurus/docs/dev-docs/integrations/ruby.md
@@ -1,6 +1,6 @@
---
title: Ruby
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Ruby.
---
diff --git a/docusaurus/docs/dev-docs/integrations/sapper.md b/docusaurus/docs/dev-docs/integrations/sapper.md
index 3d417d2ca6..89ded15770 100644
--- a/docusaurus/docs/dev-docs/integrations/sapper.md
+++ b/docusaurus/docs/dev-docs/integrations/sapper.md
@@ -1,6 +1,6 @@
---
title: Sapper
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Sapper.
---
diff --git a/docusaurus/docs/dev-docs/integrations/svelte.md b/docusaurus/docs/dev-docs/integrations/svelte.md
index 3a8ff4f5a8..040ad9816f 100644
--- a/docusaurus/docs/dev-docs/integrations/svelte.md
+++ b/docusaurus/docs/dev-docs/integrations/svelte.md
@@ -1,6 +1,6 @@
---
title: Svelte
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Svelte.
---
diff --git a/docusaurus/docs/dev-docs/integrations/vue-js.md b/docusaurus/docs/dev-docs/integrations/vue-js.md
index 450d0a03db..981383d1fd 100644
--- a/docusaurus/docs/dev-docs/integrations/vue-js.md
+++ b/docusaurus/docs/dev-docs/integrations/vue-js.md
@@ -1,6 +1,6 @@
---
title: Vue.js
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Integrate Strapi with Vue.js.
---
diff --git a/docusaurus/docs/dev-docs/intro.md b/docusaurus/docs/dev-docs/intro.md
index f49031888c..8f09677c9b 100644
--- a/docusaurus/docs/dev-docs/intro.md
+++ b/docusaurus/docs/dev-docs/intro.md
@@ -1,7 +1,7 @@
---
sidebar_label: 'Introduction'
description: The Strapi Dev Docs contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
slug: /dev-docs/intro
pagination_next: dev-docs/setup-deployment
sidebar_position: 1
@@ -12,17 +12,15 @@ tags:
# Welcome to the Strapi Developer Docs!
-
-
+:::callout Developer Docs, User Guide, and Strapi Cloud documentation
The documentation for Strapi contains 3 main sections, accessible from the top navigation bar:
-- 🧑💻 The **Developer Docs** that you're currently reading contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
-- 🧑🏫 The **[User Guide](/user-docs/intro)** is all about using Strapi's admin panel.
-- ☁️ The **[Strapi Cloud](/cloud/intro)** documentation is about deploying your Strapi application to Strapi Cloud and managing your Strapi Cloud projects and settings.
-
-
+- The **Developer Docs** that you're currently reading contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
+- The **[User Guide](/user-docs/intro)** is all about using Strapi's admin panel.
+- ️ The **[Strapi Cloud documentation](/cloud/intro)** is about deploying your Strapi application to Strapi Cloud and managing your Strapi Cloud projects and settings.
+:::
-👉 If you're totally new to **Strapi** **💡 Did you know?** The original purpose of the project was to help Boot**strap** your **API**: that's where the Strapi name comes from and how Strapi was created.
Now, Strapi is an **open-source headless CMS** that gives developers the freedom to choose their favorite tools and frameworks and allows editors to manage and distribute their content using their application's admin panel.
Based on a plugin system, Strapi is a flexible CMS whose admin panel and API are extensible — and which every part is customizable to match any use case. Strapi also has a built-in user system to manage in detail what the administrators and end users have access to. or if you're a developer who would like to take the most out of Strapi, the Developer Docs are the place to start! We suggest you to:
+If you're totally new to **Strapi** **💡 Did you know?** The original purpose of the project was to help Boot**strap** your **API**: that's where the Strapi name comes from and how Strapi was created.
Now, Strapi is an **open-source headless CMS** that gives developers the freedom to choose their favorite tools and frameworks and allows editors to manage and distribute their content using their application's admin panel.
Based on a plugin system, Strapi is a flexible CMS whose admin panel and API are extensible — and which every part is customizable to match any use case. Strapi also has a built-in user system to manage in detail what the administrators and end users have access to. or if you're a developer who would like to take the most out of Strapi, the Developer Docs are the place to start! We suggest you to:
1. Head over to the [Quick Start](/dev-docs/quick-start) guide.
2. Continue your journey through the various Developer Docs sections. The ["What you will learn"](#what-you-will-find-here) section gives you an overview of the available topics.
@@ -47,17 +45,17 @@ Clicking on any of the following cards will direct you to the introduction page
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service.md
index 9fd5911577..56ba9df946 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service.md
@@ -29,8 +29,8 @@ The following list explains what is automatically handled by the codemod (✅),
|-------|------------------------|--------------------------|
| Code structure | ✅ Yes | Nothing. The code structure is automatically migrated. |
| `publicationState` removed in favor of [`status`](/dev-docs/api/document-service/status) | ✅ Yes | Nothing. The codemod automatically transforms it. |
-| Usage of `documentId` instead of the Strapi v4 unique identifiers | 🚧 Partially:
The codemod adds the new `documentId` property to your code, since `documentId` is the new unique identifier to use in Strapi 5.
But the actual `documentId` value can not be guessed, so after the codemod has run, you will find `__TODO__` placeholder values in your code.
| 👉 `__TODO__` placeholder values need to be manually updated.
For instance, you might change `documentId: "__TODO__"` to something like `documentId: "ln1gkzs6ojl9d707xn6v86mw"`.
-| Update of `published_at` to trigger publication | ❌ Not handled. | 👉 Update your code to use the new [`publish()`](/dev-docs/api/document-service#publish), [`unpublish()`](/dev-docs/api/document-service#publish), and [`discardDraft()`](/dev-docs/api/document-service#publish) methods of the Document Service API instead. |
+| Usage of `documentId` instead of the Strapi v4 unique identifiers | 🚧 Partially:
The codemod adds the new `documentId` property to your code, since `documentId` is the new unique identifier to use in Strapi 5.
But the actual `documentId` value can not be guessed, so after the codemod has run, you will find `__TODO__` placeholder values in your code.
| `__TODO__` placeholder values need to be manually updated.
For instance, you might change `documentId: "__TODO__"` to something like `documentId: "ln1gkzs6ojl9d707xn6v86mw"`.
+| Update of `published_at` to trigger publication | ❌ Not handled. | Update your code to use the new [`publish()`](/dev-docs/api/document-service#publish), [`unpublish()`](/dev-docs/api/document-service#publish), and [`discardDraft()`](/dev-docs/api/document-service#publish) methods of the Document Service API instead. |
### Examples of function calls migration
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin.md
index 1aaaae31f0..f76eb15321 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin.md
@@ -74,10 +74,10 @@ const MyProtectedPage = () => {
import { Page } from '@strapi/strapi/admin';
const MyProtectedPage = () => {
-
return (
-
+
+
);
};
```
@@ -995,7 +995,9 @@ If you feel like you need this util, please open an issue on the Strapi reposito
### request
This util has been removed and not replaced.
-You can use `useFetchClient` from `@strapi/admin/strapi-admin`.
+You can use `useFetchClient` from `@strapi/strapi/admin`.
+
+
```tsx
// Before
@@ -1004,7 +1006,7 @@ import { request } from '@strapi/helper-plugin';
request(`/${pluginId}/settings/config`, { method: 'GET' });
// After
-import { useFetchClient } from '@strapi/admin/strapi-admin';
+import { useFetchClient } from '@strapi/strapi/admin';
const { get } = useFetchClient();
get(`/${pluginId}/settings/config`);
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/plugins-migration.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/plugins-migration.md
index 8d68d9a025..1d383d25d6 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/plugins-migration.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/additional-resources/plugins-migration.md
@@ -25,6 +25,10 @@ Upgrading a Strapi v4 plugin to Strapi 5 consists in:
1. Creating a new empty plugin using the [Plugin SDK](/dev-docs/plugins/development/create-a-plugin).
2. Move your Strapi v4 code to the newly created files in the Strapi 5 [plugin structure](/dev-docs/plugins/development/plugin-structure), also considering the changes summarized in this page.
+:::tip Tip: Partly automate the migration
+Some parts of the plugin migration can be automated by the CLI upgrade tool through its **codemods** . You can run `npx @strapi/upgrade codemods ls` to list available codemods and `npx @strapi/upgrade codemods run` to run a specific codemod. See the [list of codemods](/dev-docs/migration/v4-to-v5/step-by-step#step-2-run-automated-migrations) and the [reference documentation for the upgrade tool](/dev-docs/upgrade-tool#run-codemods-only) for more details.
+:::
+
Alternatively, you can manually update your Strapi v4 plugin to use the Plugin SDK.
The manual steps include:
1. If your code uses a format other than CommonJS, update the `package.json` file and specify the appropriate exports property.
@@ -39,7 +43,7 @@ The manual steps include:
### Front-end changes
- The Design System is upgraded to v2 in Strapi 5:
- - 👉 A dedicated migration guide is [available in the Design System documentation](https://design-system-git-main-strapijs.vercel.app/?path=/docs/getting-started-migration-guides-v1-to-v2--docs).
+ - A dedicated migration guide is [available in the Design System documentation](https://design-system-git-main-strapijs.vercel.app/?path=/docs/getting-started-migration-guides-v1-to-v2--docs).
- There are no big visual changes, except for [icons](https://design-system-git-main-strapijs.vercel.app/?path=/docs/foundations-icons-overview--docs).
- General Strapi v4 to Strapi 5 [breaking changes](/dev-docs/migration/v4-to-v5/breaking-changes) might apply.
- The `helper-plugin` has been removed. A [migration reference](/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin) is available to help you transition away from the `helper-plugin`.
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes.md
index c9fa8363be..4f736dbbfb 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes.md
@@ -83,7 +83,7 @@ You can click on the description of any breaking change in the following tables
| [The Admin Panel RBAC redux store has been updated](/dev-docs/migration/v4-to-v5/breaking-changes/admin-panel-rbac-store-updated) | Yes | No |
| [The `getWhere` method for permission provider instances has been removed](/dev-docs/migration/v4-to-v5/breaking-changes/get-where-removed) | Yes | No |
-## Content API
+## APIs
| Description | Affects plugins | Handled by codemods |
|-------------|-----------------|---------------------|
@@ -93,6 +93,7 @@ You can click on the description of any breaking change in the following tables
| [The Entity Service API is deprecated and replaced by the Document Service API](/dev-docs/migration/v4-to-v5/breaking-changes/entity-service-deprecated) | Yes | 👷 Partly |
| [`documentId` should be used instead of `id` in API calls](/dev-docs/migration/v4-to-v5/breaking-changes/use-document-id) | Yes | 👷 Partly |
| [Database lifecycle hooks are triggered differently based on Document Service API methods](/dev-docs/migration/v4-to-v5/breaking-changes/lifecycle-hooks-document-service) | Yes | No |
+| [The `publishedAt` parameter is not supported and replaced by `status`](/dev-docs/migration/v4-to-v5/breaking-changes/publishedat-removed) | Yes | ✅ Yes |
| [The `publicationState` parameter is not supported and replaced by `status`](/dev-docs/migration/v4-to-v5/breaking-changes/publication-state-removed) | Yes | ✅ Yes |
| [Sorting by id is no longer possible to sort by chronological order](/dev-docs/migration/v4-to-v5/breaking-changes/sort-by-id) | Yes | ✅ Yes |
| [There is no `findPage()` method with the Document Service API](/dev-docs/migration/v4-to-v5/breaking-changes/no-find-page-in-document-service) | Yes | No |
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved.md
index a7da7fb018..bbc46cfa99 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved.md
@@ -17,7 +17,7 @@ import NoCodemods from '/docs/snippets/breaking-change-not-handled-by-codemod.md
# Some attributes and content types names are reserved
-In Strapi 5, some attributes and content types names are reserved, and all fields or content types in Strapi v4 using these reserved names should be renamed before migrating to Strapi 5 to prevent data loss.
+In Strapi 5, some attributes and content types names are reserved, and all fields or content types in Strapi v4 using these reserved names should be renamed before migrating to Strapi 5 to prevent data loss. The reserved names should not be used in the database either.
@@ -54,7 +54,7 @@ Any model name can be prefixed with `strapi`.
**In Strapi 5**
-The following attribute names can **not** be created on a content type:
+The following attribute names can **not** be created on a content type or in databases:
- `meta`
- `status`
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/entity-service-deprecated.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/entity-service-deprecated.md
index 0ec1b89b9a..952a728075 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/entity-service-deprecated.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/entity-service-deprecated.md
@@ -52,7 +52,7 @@ The [Document Service API](/dev-docs/api/document-service) replaces the Entity S
The following are the main topics to take into account when using the Document Service API instead of the Entity Service API from Strapi v4:
-* The Document Service API expects a `documentId` property. This breaking change also affects the REST and GraphQL APIs (👉 see [the related breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/use-document-id)).
+* The Document Service API expects a `documentId` property. This breaking change also affects the REST and GraphQL APIs ( see [the related breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/use-document-id)).
:::info
To ease the transition to Strapi 5, Document Service API responses still include `id` fields in addition to the new `documentId` fields.
:::
@@ -75,10 +75,10 @@ The following are the main topics to take into account when using the Document S
-* There is no `findPage()` method anymore in Strapi 5. 👉 see [the related breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/no-find-page-in-document-service).
+* There is no `findPage()` method anymore in Strapi 5. see [the related breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/no-find-page-in-document-service).
* The [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content) feature has been updated in Strapi 5 and this is reflected in the Document Service API:
- - `publicationState` is replaced by `status` 👉 see [the related breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/publication-state-removed).
+ - `publicationState` is replaced by `status` see [the related breaking change entry](/dev-docs/migration/v4-to-v5/breaking-changes/publication-state-removed).
- New methods are introduced to handle the updated [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content) feature:
- [`publish()`](/dev-docs/api/document-service#publish),
- [`unpublish()`](/dev-docs/api/document-service#unpublish),
@@ -97,4 +97,4 @@ The following are the main topics to take into account when using the Document S
The migration is partially handled by a codemod when using the [upgrade tool](/dev-docs/upgrade-tool).
-👉 The [Entity Service API to Document Service API migration reference](/dev-docs/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service) gives additional information about which aspects are handled by the codemod and which use cases require manual migration.
+ The [Entity Service API to Document Service API migration reference](/dev-docs/migration/v4-to-v5/additional-resources/from-entity-service-to-document-service) gives additional information about which aspects are handled by the codemod and which use cases require manual migration.
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated.md
index bf5a6184aa..b092b6b03f 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated.md
@@ -28,7 +28,7 @@ In Strapi 5, the GraphQL API has been updated. It handles the new, flattened res
| Topic | Description of the changes |
|------------------------------|-----------------------------------------------------------------------------------------------------|
-| File upload support |
Removed `uploadFile` `uploadFiles` mutations
Removed `updateFileInfo` mutation in favor of using the `updateUploadFile` mutation
Removed `removeFile` mutation in favor of using the `deleteUploadFile` mutation
Removed `folder` queries & mutations
Removed `createUploadFile` mutation
|
+| File upload support |
Removed `upload` `multipleUpload` mutations
Removed `updateFileInfo` mutation in favor of using the `updateUploadFile` mutation
Removed `removeFile` mutation in favor of using the `deleteUploadFile` mutation
Removed `folder` queries & mutations
Removed `createUploadFile` mutation
|
| Internationalization support | Removed the `createXXLocalization` mutations in favor of being able to update any locale from the main `updateXXX` mutation |
| Draft & Publish support | Removed `publicationState` in favor of `status` to align with the new Draft & Publish behavior |
| Schema changes |
Simplified the basic queries with no `meta`/`pagination`
Introduced `Connection` to add pagination
|
@@ -39,7 +39,7 @@ For an extensive description of the new Strapi 5 GraphQL API, please refer to th
To gradually convert to the new GraphQL API format, follow these steps:
-1. Enable v4 compatibility mode with the `v4ComptabilityMode` flag in the configuration of the GraphQL plugin (see [plugins configuration](/dev-docs/configurations/plugins#graphql)):
+1. Enable v4 compatibility mode with the `v4CompatibilityMode` flag in the configuration of the GraphQL plugin (see [plugins configuration](/dev-docs/configurations/plugins#graphql)):
```graphql
{
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/license-only.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/license-only.md
index 5887184e30..585b343a95 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/license-only.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/license-only.md
@@ -64,4 +64,4 @@ A similar result can be achieved in Strapi v4 by adding the `lockIcon` property.
### Manual migration
-If your custom Strapi v4 code uses the `lockIcon` property to highlight a paid feature that requires an license, search and replace `lockIcon: true` by `licenseOnly: true`.
+If your custom Strapi v4 code uses the `lockIcon` property to highlight a paid feature that requires a or an plan, search and replace `lockIcon: true` by `licenseOnly: true`.
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/new-response-format.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/new-response-format.md
index af9f7bcbfa..7723b4ef9b 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/new-response-format.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/new-response-format.md
@@ -45,7 +45,7 @@ The Content API returns all the attributes of requested content wrapped inside a
"title": "Article A"
"relation": {
"data": {
- "id": "clkgylw7d000108lc4rw1bb6s"
+ "id": "2"
"name": "Category A"
}
}
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/publishedat-removed.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/publishedat-removed.md
new file mode 100644
index 0000000000..1b8fd6d157
--- /dev/null
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/publishedat-removed.md
@@ -0,0 +1,67 @@
+---
+title: publishedAt can't be used anymore to define the status
+description: In Strapi 5, 'publishedAt' can no longer be used in Content API calls to set the status. The new status parameter can be used and accepts 2 different values, draft and published.
+sidebar_label: status instead of publishedAt
+displayed_sidebar: devDocsMigrationV5Sidebar
+tags:
+ - breaking changes
+ - Content API
+ - GraphQL API
+ - Document Service API
+ - Draft & Publish
+ - upgrade to Strapi 5
+---
+
+import Intro from '/docs/snippets/breaking-change-page-intro.md'
+import MigrationIntro from '/docs/snippets/breaking-change-page-migration-intro.md'
+import YesPlugins from '/docs/snippets/breaking-change-affecting-plugins.md'
+import YesCodemods from '/docs/snippets/breaking-change-handled-by-codemod.md'
+
+# `publishedAt` is removed and replaced by `status`
+
+In Strapi 5, the [Draft & Publish feature](/user-docs/content-manager/saving-and-publishing-content) has been reworked, and the Content API, including REST, GraphQL, and Document Service APIs accept a new `status` parameter.
+
+
+
+
+
+
+## Breaking change description
+
+
+
+
+
+**In Strapi v4**
+
+`publishedAt` is used in the request body and accepts the following values:
+
+- `null` sets an entry in draft,
+- A date string (e.g., `2021-10-28T16:57:26.352Z`) sets the entry to published status.
+
+
+
+
+
+**In Strapi 5**
+
+`status` is used as a query parameter and accepts the following values:
+
+- `draft` sets a in the draft version,
+- `published` sets a in the published version.
+
+
+
+
+
+## Migration
+
+
+
+### Notes
+
+* Additional information about how to use the new `status` parameter can be found in the [REST API](/dev-docs/api/rest/filters-locale-publication#status), [GraphQL API](/dev-docs/api/graphql#status), and [Document Service API](/dev-docs/api/document-service/status) documentation.
+
+### Migration procedure
+
+* API calls initiated from the front end (REST API, GraphQL API) that used `publishedAt` need to be manually updated.
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/react-router-dom-6.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/react-router-dom-6.md
index 1b9419e8f5..67b73e5378 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/react-router-dom-6.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/react-router-dom-6.md
@@ -15,7 +15,7 @@ import MigrationIntro from '/docs/snippets/breaking-change-page-migration-intro.
import YesPlugins from '/docs/snippets/breaking-change-affecting-plugins.md'
import YesCodemods from '/docs/snippets/breaking-change-handled-by-codemod.md'
-# Strapi users `react-router-dom` v6
+# Strapi uses `react-router-dom` v6
Strapi 5 uses [`react-router-dom`](https://www.npmjs.com/package/react-router-dom) v6. This impacts the links added to [settings](/dev-docs/plugins/admin-panel-api#settings-api) or to the [menu](/dev-docs/plugins/admin-panel-api#menu-api) using the Admin Panel API.
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/upgrade-to-apollov4.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/upgrade-to-apollov4.md
index 9a32229282..ac3affe578 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/upgrade-to-apollov4.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/breaking-changes/upgrade-to-apollov4.md
@@ -61,7 +61,7 @@ Apollo Server v4 for the GraphQL server and graphql ^16 for the GraphQL module.
To migrate to Strapi 5:
-- Set the `x-apollo-operation-name` header or disable the new protection by adding `csrfPrevention: false` to the GraphQL plugin configuration for multipart messages (file uploads).
+- Set the `x-apollo-operation-name` header or disable the new protection by adding `csrfPrevention: false` to apolloServer in the GraphQL plugin configuration for multipart messages (file uploads).
- Replace `ApolloError` with `GraphQLError`.
- Remove root level configuration options like `formatResponse` and replace them with plugin hooks in the plugins array.
- Remove the modules configuration option and split it into `typeDefs` and `resolvers`.
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/introduction-and-faq.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/introduction-and-faq.md
index 4e458abcb4..c4ac7f88c1 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/introduction-and-faq.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/introduction-and-faq.md
@@ -9,10 +9,14 @@ tags:
# Upgrading to Strapi 5: Introduction and FAQ
-The latest major version of Strapi is Strapi 5. Strapi v4 is still supported until March 2026.
+The latest major version of Strapi is Strapi 5.
Whenever you feel ready to upgrade to Strapi 5, the present page will help you. It lists all available resources for upgrading from Strapi 4 to Strapi 5 and answers general questions you might have.
+:::note
+Strapi 5 is the latest stable version, but Strapi v4 is still supported until March 2026, which means security fixes are still applied to v4 (see [Strapi release notes](https://github.com/strapi/strapi/releases)).
+:::
+
## Available resources
All of the following available resources will help you upgrade your application and plugins to Strapi 5, from the most common to the most specific use cases:
@@ -46,13 +50,13 @@ Strapi 5 docs also provide a [complete breaking changes database](/dev-docs/migr
As a Strapi Cloud customer, how can I handle the entire upgrade and deployment of my Strapi 5 application?
-:::danger Warning: Don't push a Strapi 5 project to Strapi Cloud yet
-Strapi Cloud is still running on Strapi v4. The following process is provided as an indication of what will happen when Strapi 5 is released as a stable version. Do not try to push your Strapi 5 beta or Release Candidate (RC) project to Strapi Cloud yet.
-:::
-
1. [Create a backup](/cloud/projects/settings#backups) and update your code locally, following the step-by-step guide.
2. Run the `yarn deploy` or `npm run deploy` commands from the [Cloud CLI](/cloud/cli/cloud-cli).
Strapi Cloud will deploy the updated code in Strapi 5 and will automatically run the data migration script.
+
+:::strapi Why Strapi 5?
+The [Strapi blog](https://strapi.io/blog/commonly-asked-questions-transitioning-from-strapi-4-to-strapi-5) has some additional information about commonly asked questions, including why some changes were made.
+:::
diff --git a/docusaurus/docs/dev-docs/migration/v4-to-v5/step-by-step.md b/docusaurus/docs/dev-docs/migration/v4-to-v5/step-by-step.md
index b7534e74f1..4b3fffdbf8 100644
--- a/docusaurus/docs/dev-docs/migration/v4-to-v5/step-by-step.md
+++ b/docusaurus/docs/dev-docs/migration/v4-to-v5/step-by-step.md
@@ -31,9 +31,13 @@ Before getting into the upgrade process itself, take the following precautions:
If you are using another type of database, please refer to their official documentation (see [PostgreSQL docs](https://www.postgresql.org/docs/) and [MySQL docs](https://dev.mysql.com/doc/)).
If your project is hosted on Strapi Cloud, you can manually [create a backup](/cloud/projects/settings#creating-a-manual-backup).
+
+ Please ensure your database entries are not using reserved names (see the related [breaking change page](/dev-docs/migration/v4-to-v5/breaking-changes/attributes-and-content-types-names-reserved)).
+
2. **Backup your code**:
* If your code is versioned with git, create a new dedicated branch to run the migration.
* If your code is _not_ versioned with git, create a backup of your working Strapi v4 code and store it in a safe place.
+
3. **Ensure the plugins you are using are compatible with Strapi 5**.
To do so, list the plugins you are using, then check compatibility for each of them by reading their dedicated documentation on the [Marketplace](https://market.strapi.io/plugins) website.
@@ -87,17 +91,17 @@ The following main changes might affect your Strapi application and require you
For each of them, read the indicated breaking change entry and check if some manual actions are still required after the upgrade tool has run:
1. **Database migration**:
- 1. MySQL v5 is not supported 👉 see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/mysql5-unsupported)
- 2. Only better-sqlite3 is supported 👉 see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/only-better-sqlite3-for-sqlite)
- 3. Only mysql2 is supported 👉 see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/only-mysql2-package-for-mysql)
- 4. Lifecycle hooks are triggered differently 👉 see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/lifecycle-hooks-document-service)
+ 1. MySQL v5 is not supported see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/mysql5-unsupported)
+ 2. Only better-sqlite3 is supported see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/only-better-sqlite3-for-sqlite)
+ 3. Only mysql2 is supported see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/only-mysql2-package-for-mysql)
+ 4. Lifecycle hooks are triggered differently see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/lifecycle-hooks-document-service)
2. **Configuration**:
- 1. Some environment variables are handled by the server configuration 👉 see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/removed-support-for-some-env-options)
- 2. Custom configuration must meet specific requirements 👉 see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/strict-requirements-config-files)
+ 1. Some environment variables are handled by the server configuration see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/removed-support-for-some-env-options)
+ 2. Custom configuration must meet specific requirements see [breaking change](/dev-docs/migration/v4-to-v5/breaking-changes/strict-requirements-config-files)
3. **Admin panel customization**:
- * The helper-plugin has been removed 👉 see [migration reference](/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin)
+ * The helper-plugin has been removed see [migration reference](/dev-docs/migration/v4-to-v5/additional-resources/helper-plugin)
-👉 Finally, go over the rest of the [breaking changes database](/dev-docs/migration/v4-to-v5/breaking-changes) for any edge case you might be concerned about.
+ Finally, go over the rest of the [breaking changes database](/dev-docs/migration/v4-to-v5/breaking-changes) for any edge case you might be concerned about.
## Step 4: Migrate the API consuming side
@@ -114,7 +118,7 @@ Follow the steps below and leverage retro-compatibility flags and guided migrati
### Migrate GraphQL API calls
-1. Enable the retro-compatibility flag by setting `v4ComptabilityMode` to `true` in the `graphl.config` object of [the `/config/plugins.js|ts` file](/dev-docs/configurations/plugins#graphql).
+1. Enable the retro-compatibility flag by setting `v4CompatibilityMode` to `true` in the `graphql.config` object of [the `/config/plugins.js|ts` file](/dev-docs/configurations/plugins#graphql).
2. Update your queries and mutations only, guided by the dedicated [breaking change entry for GraphQL](/dev-docs/migration/v4-to-v5/breaking-changes/graphql-api-updated).
3. Validate that your client is running correctly.
-4. Disable the retro-compatibily flag by setting `v4ComptabilityMode` to `true` and start using the new response format.
+4. Disable the retro-compatibily flag by setting `v4CompatibilityMode` to `false` and start using the new response format.
diff --git a/docusaurus/docs/dev-docs/migration/v5/migration-guide-5.0.0-to-5.0.1.md b/docusaurus/docs/dev-docs/migration/v5/migration-guide-5.0.0-to-5.0.1.md
index b8c1591054..8da44736e9 100644
--- a/docusaurus/docs/dev-docs/migration/v5/migration-guide-5.0.0-to-5.0.1.md
+++ b/docusaurus/docs/dev-docs/migration/v5/migration-guide-5.0.0-to-5.0.1.md
@@ -1,6 +1,6 @@
---
title: Migrate v4.0.0+ to v4.0.6
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Learn how you can migrate your Strapi application from 4.0.0+ to 4.0.6.
---
diff --git a/docusaurus/docs/dev-docs/plugins-extension.md b/docusaurus/docs/dev-docs/plugins-extension.md
index 046de1679e..d500f023aa 100644
--- a/docusaurus/docs/dev-docs/plugins-extension.md
+++ b/docusaurus/docs/dev-docs/plugins-extension.md
@@ -1,6 +1,6 @@
---
title: Plugins extension
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- bootstrap function
- controllers
@@ -12,12 +12,8 @@ tags:
- services
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Plugins extension
-
-
Strapi comes with [plugins](/dev-docs/plugins) that can be installed from the [Marketplace](/user-docs/plugins/installing-plugins-via-marketplace#installing-marketplace-plugins-and-providers) or as npm packages. You can also create your own plugins (see [plugins development](/dev-docs/plugins/developing-plugins)) or extend the existing ones.
:::warning
diff --git a/docusaurus/docs/dev-docs/plugins.md b/docusaurus/docs/dev-docs/plugins.md
index 8cb5ac8d25..32aaffbb73 100644
--- a/docusaurus/docs/dev-docs/plugins.md
+++ b/docusaurus/docs/dev-docs/plugins.md
@@ -1,7 +1,7 @@
---
title: Plugins
description: Strapi comes with built-in plugins (GraphQL, Users & Permissions, Upload, API documentation, and Email) and you can install plugins as npm packages.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/advanced-features
pagination_next: dev-docs/customization
tags:
diff --git a/docusaurus/docs/dev-docs/plugins/admin-panel-api.md b/docusaurus/docs/dev-docs/plugins/admin-panel-api.md
index ae6a7ff88e..63e9967e65 100644
--- a/docusaurus/docs/dev-docs/plugins/admin-panel-api.md
+++ b/docusaurus/docs/dev-docs/plugins/admin-panel-api.md
@@ -447,7 +447,7 @@ Both the `injectComponent()` and `getPlugin('content-manager').injectComponent()
export default {
bootstrap(app) {
- app.getPlugin('content-manager').injectComponent()('editView', 'informations', {
+ app.getPlugin('content-manager').injectComponent('editView', 'informations', {
name: 'my-plugin-my-compo',
Component: () => 'my-compo',
});
diff --git a/docusaurus/docs/dev-docs/plugins/developing-plugins.md b/docusaurus/docs/dev-docs/plugins/developing-plugins.md
index 02316ff401..5f192e1daa 100644
--- a/docusaurus/docs/dev-docs/plugins/developing-plugins.md
+++ b/docusaurus/docs/dev-docs/plugins/developing-plugins.md
@@ -1,7 +1,7 @@
---
title: Developing plugins
description: Generation introduction about Strapi plugins development
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/plugins
pagination_next: dev-docs/plugins/development/create-a-plugin
tags:
@@ -23,7 +23,7 @@ Strapi allows the development of plugins that work exactly like the built-in plu
- used as a local plugin, working only with a specific Strapi project,
- or [submitted to the Marketplace](https://market.strapi.io/submit-plugin) to be shared with the community.
-👉 To start developing a Strapi plugin:
+ To start developing a Strapi plugin:
1. [Create a plugin](/dev-docs/plugins/development/create-a-plugin) using the Plugin SDK.
2. Learn more about the [structure of a plugin](/dev-docs/plugins/development/plugin-structure).
diff --git a/docusaurus/docs/dev-docs/plugins/development/create-a-plugin.md b/docusaurus/docs/dev-docs/plugins/development/create-a-plugin.md
index 361aa53024..3a9153b4e5 100644
--- a/docusaurus/docs/dev-docs/plugins/development/create-a-plugin.md
+++ b/docusaurus/docs/dev-docs/plugins/development/create-a-plugin.md
@@ -50,7 +50,7 @@ yarn dlx @strapi/sdk-plugin init my-strapi-plugin
```bash
-npx @strapi/sdk-plugin:init my-strapi-plugin
+npx @strapi/sdk-plugin init my-strapi-plugin
```
diff --git a/docusaurus/docs/dev-docs/plugins/development/plugin-sdk.md b/docusaurus/docs/dev-docs/plugins/development/plugin-sdk.md
index 523bad40ee..9ebef630d2 100644
--- a/docusaurus/docs/dev-docs/plugins/development/plugin-sdk.md
+++ b/docusaurus/docs/dev-docs/plugins/development/plugin-sdk.md
@@ -1,7 +1,7 @@
---
title: Plugin SDK
description: Reference documentation for Strapi's Plugin SDK commands
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- backend server
- Plugin SDK
@@ -19,13 +19,14 @@ The present documentation lists the available Plugin SDK commands. The [associat
Create a new plugin at a given path.
+
```bash
-npx @strapi/sdk-plugin init
+npx @strapi/sdk-plugin init /path/to/my/plugin
```
| Arguments | Type | Description | Default |
| --------- | :----: | ------------------ | ------------------------- |
-| `path` | string | Path to the plugin | `./src/plugins/my-plugin` |
+| `path` | string | Path to the plugin | `/src/plugins/my-plugin` |
| Option | Type | Description | Default |
| ------------- | :--: | --------------------------------------- | ------- |
diff --git a/docusaurus/docs/dev-docs/plugins/development/plugin-structure.md b/docusaurus/docs/dev-docs/plugins/development/plugin-structure.md
index b3f3da8191..d59b195fa4 100644
--- a/docusaurus/docs/dev-docs/plugins/development/plugin-structure.md
+++ b/docusaurus/docs/dev-docs/plugins/development/plugin-structure.md
@@ -1,7 +1,7 @@
---
title: Plugin structure
description: Learn more about the structure of a Strapi plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- admin panel
- Command Line Interface (CLI)
diff --git a/docusaurus/docs/dev-docs/plugins/documentation.md b/docusaurus/docs/dev-docs/plugins/documentation.md
index 422d056153..0c9bf5c67b 100644
--- a/docusaurus/docs/dev-docs/plugins/documentation.md
+++ b/docusaurus/docs/dev-docs/plugins/documentation.md
@@ -1,6 +1,6 @@
---
title: Documentation plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: By using Swagger UI, the API documentation plugin takes out most of your pain to generate your documentation.
tags:
- admin panel
@@ -13,12 +13,8 @@ tags:
- Swagger UI
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Documentation plugin
-
-
The Documentation plugin is useful to document the available endpoints once you created an API.
If installed, the Documentation plugin will inspect content types and routes found on all APIs in your project and any plugin specified in the configuration. The plugin will then programmatically generate documentation to match the [OpenAPI specification](https://swagger.io/specification/). The Documentation plugin generates the [paths objects](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#paths-object) and [schema objects](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object) and converts all Strapi types to [OpenAPI data types](https://swagger.io/docs/specification/data-models/data-types/).
@@ -75,7 +71,7 @@ By default, your documentation will be accessible by anyone.
To restrict API documentation access, enable the **Restricted Access** option from the admin panel:
-1. Navigate to  *Settings* in the main navigation of the admin panel.
+1. Navigate to *Settings* in the main navigation of the admin panel.
2. Choose **Documentation**.
3. Toggle **Restricted Access** to `ON`.
4. Define a password in the `password` input.
diff --git a/docusaurus/docs/dev-docs/plugins/email.md b/docusaurus/docs/dev-docs/plugins/email.md
index 146820ede7..2ada8c55ed 100644
--- a/docusaurus/docs/dev-docs/plugins/email.md
+++ b/docusaurus/docs/dev-docs/plugins/email.md
@@ -1,6 +1,6 @@
---
title: Email plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Send email from your server or externals providers.
tags:
- admin panel
diff --git a/docusaurus/docs/dev-docs/plugins/graphql.md b/docusaurus/docs/dev-docs/plugins/graphql.md
index 8c74445686..07b57fe785 100644
--- a/docusaurus/docs/dev-docs/plugins/graphql.md
+++ b/docusaurus/docs/dev-docs/plugins/graphql.md
@@ -1,6 +1,6 @@
---
title: GraphQL plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
toc_max_heading_level: 5
description: Use a GraphQL endpoint in your Strapi project to fetch and mutate your content.
tags:
@@ -17,18 +17,18 @@ tags:
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# GraphQL plugin
-
-
By default Strapi create [REST endpoints](/dev-docs/api/rest#endpoints) for each of your content-types. With the GraphQL plugin, you will be able to add a GraphQL endpoint to fetch and mutate your content.
:::strapi Looking for the GraphQL API documentation?
The [GraphQL API reference](/dev-docs/api/graphql) describes queries, mutations and parameters you can use to interact with your API using Strapi's GraphQL plugin.
:::
+:::caution
+If you uninstall the Users & Permissions plugin, the GraphQL plugin should work, but you need to include your header authorization to see the playground.
+:::
+
## Usage
To get started with GraphQL in your application, please install the plugin first. To do that, open your terminal and run the following command:
@@ -53,35 +53,51 @@ npm install @strapi/plugin-graphql
-Then, start your app and open your browser at [http://localhost:1337/graphql](http://localhost:1337/graphql). You should now be able to access the **GraphQL Playground** that will help you to write your GraphQL queries and mutations.
+Then, start your app and open your browser at [http://localhost:1337/graphql](http://localhost:1337/graphql). You should now be able to access the **GraphQL Sandbox** that will help you to write your GraphQL queries and mutations.
:::note
-The GraphQL Playground is enabled by default for both the development and staging environments, but disabled in production environments. Set the `playgroundAlways` configuration option to `true` to also enable the GraphQL Playground in production environments (see [plugins configuration documentation](/dev-docs/configurations/plugins#graphql)).
+The GraphQL Sandbox is enabled by default in all environments except production. Set the `landingPage` configuration option to `true` to also enable the GraphQL Playground in production environments (see [plugins configuration documentation](/dev-docs/configurations/plugins#graphql)).
:::
## Configuration
Plugins configuration are defined in the `config/plugins.js` file. This configuration file can include a `graphql.config` object to define specific configurations for the GraphQL plugin (see [plugins configuration documentation](/dev-docs/configurations/plugins#graphql)).
-[Apollo Server](https://www.apollographql.com/docs/apollo-server/api/apollo-server/#apolloserver) options can be set with the `graphql.config.apolloServer` [configuration object](/dev-docs/configurations/plugins#graphql). Apollo Server options can be used for instance to enable the [tracing feature](https://www.apollographql.com/docs/federation/metrics/), which is supported by the GraphQL playground to track the response time of each part of your query. From `Apollo Server` version 3.9 default cache option is `cache: 'bounded'`. You can change it in the `apolloServer` configuration. For more information visit [Apollo Server Docs](https://www.apollographql.com/docs/apollo-server/performance/cache-backends/).
+[Apollo Server](https://www.apollographql.com/docs/apollo-server/api/apollo-server/#apolloserver) options can be passed directly to Apollo with the `graphql.config.apolloServer` [configuration object](/dev-docs/configurations/plugins#graphql). Apollo Server options can be used for instance to enable the [tracing feature](https://www.apollographql.com/docs/federation/metrics/), which is supported by the GraphQL Sandbox to track the response time of each part of your query. The `Apollo Server` default cache option is `cache: 'bounded'`. You can change it in the `apolloServer` configuration. For more information visit [Apollo Server Docs](https://www.apollographql.com/docs/apollo-server/performance/cache-backends/).
:::caution
The maximum number of items returned by the response is limited to 100 by default. This value can be changed using the `amountLimit` configuration option, but should only be changed after careful consideration: a large query can cause a DDoS (Distributed Denial of Service) and may cause abnormal load on your Strapi server, as well as your database server.
:::
+## GraphQL Configuration Options
+
+The following configuration options are supported by the GraphQL plugin and can be defined in the `config/plugins` file:
+
+| Option | Type | Description | Default Value | Notes |
+| ------------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | --------------------------------------------------- |
+| `endpoint` | String | Sets the GraphQL endpoint path. | `'/graphql'` | Example: `/custom-graphql` |
+| `shadowCRUD` | Boolean | Enables or disables automatic schema generation for content types. | `true` | |
+| `depthLimit` | Number | Limits the depth of GraphQL queries to prevent excessive nesting. | `10` | Use this to mitigate potential DoS attacks. |
+| `amountLimit` | Number | Limits the maximum number of items returned in a single response. | `100` | Use cautiously to avoid performance issues. |
+| `playgroundAlways` | Boolean | [Deprecated] Enables GraphQL Playground in all environments (deprecated). | `false` | Prefer using `landingPage` instead. |
+| `landingPage` | Boolean \| Function | Enables or disables the landing page for GraphQL. Accepts a boolean or a function returning a boolean or an ApolloServerPlugin implementing `renderLandingPage`. | | `false` in production, `true` in other environments |
+| `apolloServer` | Object | Passes configuration options directly to Apollo Server. | `{}` | Example: `{ tracing: true }` |
+
+### Example
+
+The following is an example of how to use these options in a Strapi configuration file:
+
-```js title="./config/plugins.js"
-
+```javascript title="./config/plugins.js"
module.exports = {
- //
graphql: {
config: {
endpoint: '/graphql',
shadowCRUD: true,
- playgroundAlways: false,
+ landingPage: false, // disable Sandbox everywhere
depthLimit: 7,
amountLimit: 100,
apolloServer: {
@@ -97,18 +113,41 @@ module.exports = {
```ts title="./config/plugins.ts"
-
export default {
- //
graphql: {
config: {
endpoint: '/graphql',
shadowCRUD: true,
- playgroundAlways: false,
+ landingPage: false, // disable Sandbox everywhere
depthLimit: 7,
amountLimit: 100,
- apolloServer: {
- tracing: false,
+ },
+ },
+};
+```
+
+
+
+
+
+Here is an example of using a function to dynamically enable it:
+
+
+
+
+
+```javascript title="./config/plugins.js"
+module.exports = ({ env }) => {
+ graphql: {
+ config: {
+ endpoint: '/graphql',
+ shadowCRUD: true,
+ landingPage: (strapi) => {
+ if (env("NODE_ENV") !== "production") {
+ return true;
+ } else {
+ return false;
+ }
},
},
},
@@ -117,6 +156,88 @@ export default {
+
+
+```ts title="./config/plugins.ts"
+export default ({ env }) => {
+ graphql: {
+ config: {
+ endpoint: '/graphql',
+ shadowCRUD: true,
+ landingPage: (strapi) => {
+ if (env("NODE_ENV") !== "production") {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ },
+ },
+};
+```
+
+
+
+
+
+### CORS exceptions for Landing Page
+
+If the landing page is enabled in production environments (which is not recommended), CORS headers for the Apollo Server landing page must be added manually.
+
+To add them globally, you can merge the following into your middleware configuration:
+
+```
+{
+ name: "strapi::security",
+ config: {
+ contentSecurityPolicy: {
+ useDefaults: true,
+ directives: {
+ "connect-src": ["'self'", "https:", "apollo-server-landing-page.cdn.apollographql.com"],
+ "img-src": ["'self'", "data:", "blob:", "apollo-server-landing-page.cdn.apollographql.com"],
+ "script-src": ["'self'", "'unsafe-inline'", "apollo-server-landing-page.cdn.apollographql.com"],
+ "style-src": ["'self'", "'unsafe-inline'", "apollo-server-landing-page.cdn.apollographql.com"],
+ "frame-src": ["sandbox.embed.apollographql.com"]
+ }
+ }
+ }
+}
+```
+
+To add these exceptions only for the `/graphql` path (recommended), you can create a new middleware to handle it. For example:
+
+
+
+
+
+```javascript title="./middlewares/graphql-security.js"
+module.exports = (config, { strapi }) => {
+ return async (ctx, next) => {
+ if (ctx.request.path === '/graphql') {
+ ctx.set('Content-Security-Policy', "default-src 'self'; script-src 'self' 'unsafe-inline' cdn.jsdelivr.net apollo-server-landing-page.cdn.apollographql.com; connect-src 'self' https:; img-src 'self' data: blob: apollo-server-landing-page.cdn.apollographql.com; media-src 'self' data: blob: apollo-server-landing-page.cdn.apollographql.com; frame-src sandbox.embed.apollographql.com; manifest-src apollo-server-landing-page.cdn.apollographql.com;");
+ }
+ await next();
+ };
+};
+```
+
+
+
+
+
+```ts title="./middlewares/graphql-security.ts"
+export default (config, { strapi }) => {
+ return async (ctx, next) => {
+ if (ctx.request.path === '/graphql') {
+ ctx.set('Content-Security-Policy', "default-src 'self'; script-src 'self' 'unsafe-inline' cdn.jsdelivr.net apollo-server-landing-page.cdn.apollographql.com; connect-src 'self' https:; img-src 'self' data: blob: apollo-server-landing-page.cdn.apollographql.com; media-src 'self' data: blob: apollo-server-landing-page.cdn.apollographql.com; frame-src sandbox.embed.apollographql.com; manifest-src apollo-server-landing-page.cdn.apollographql.com;");
+ }
+ await next();
+ };
+};
+```
+
+
+
## Shadow CRUD
@@ -940,15 +1061,14 @@ mutation {
-Then on each request, send along an `Authorization` header in the form of `{ "Authorization": "Bearer YOUR_JWT_GOES_HERE" }`. This can be set in the HTTP Headers section of your GraphQL Playground.
-
+Then on each request, send along an `Authorization` header in the form of `{ "Authorization": "Bearer YOUR_JWT_GOES_HERE" }`. This can be set in the HTTP Headers section of your GraphQL Sandbox.
## API tokens
To use API tokens for authentication, pass the token in the `Authorization` header using the format `Bearer your-api-token`.
:::note
-Using API tokens in the the GraphQL playground requires adding the authorization header with your token in the `HTTP HEADERS` tab:
+Using API tokens in the the GraphQL Sandbox requires adding the authorization header with your token in the `HTTP HEADERS` tab:
```http
{
@@ -963,10 +1083,9 @@ Replace `` with your API token generated in the Strapi Admin panel.
GraphQL is a query language allowing users to use a broader panel of inputs than traditional REST APIs. GraphQL APIs are inherently prone to security risks, such as credential leakage and denial of service attacks, that can be reduced by taking appropriate precautions.
+### Disable introspection and Sandbox in production
-### Disable introspection and playground in production
-
-In production environments, disabling the GraphQL Playground and the introspection query is recommended.
+In production environments, disabling the GraphQL Sandbox and the introspection query is strongly recommended.
If you haven't edited the [configuration file](/dev-docs/configurations/plugins#graphql), it is already disabled in production by default.
### Limit max depth and complexity
diff --git a/docusaurus/docs/dev-docs/plugins/guides/pass-data-from-server-to-admin.md b/docusaurus/docs/dev-docs/plugins/guides/pass-data-from-server-to-admin.md
index be3aabde1e..e624a9dcd2 100644
--- a/docusaurus/docs/dev-docs/plugins/guides/pass-data-from-server-to-admin.md
+++ b/docusaurus/docs/dev-docs/plugins/guides/pass-data-from-server-to-admin.md
@@ -2,7 +2,7 @@
title: How to pass data from server to admin panel with a Strapi plugin
description: Learn how to pass data from server to admin panel with a Strapi plugin
sidebar_label: Pass data from server to admin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- admin panel
- admin routes
@@ -12,23 +12,21 @@ tags:
- plugins development guides
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# How to pass data from server to admin panel with a Strapi plugin
-
-
Strapi is **headless** . The admin panel is completely separate from the server.
When [developing a Strapi plugin](/dev-docs/plugins/developing-plugins) you might want to pass data from the `/server` to the `/admin` folder. Within the `/server` folder you have access to the Strapi object and can do database queries whereas in the `/admin` folder you can't.
Passing data from the `/server` to the `/admin` folder can be done using the admin panel's Axios instance:
-```mermaid
-graph LR
- A{Server} -->|Axios instance| B{Admin Panel}
- B --> A
-```
+
To pass data from the `/server` to `/admin` folder you would first [create a custom admin route](#create-a-custom-admin-route) and then [get the data returned in the admin panel](#get-the-data-in-the-admin-panel).
diff --git a/docusaurus/docs/dev-docs/plugins/guides/store-and-access-data.md b/docusaurus/docs/dev-docs/plugins/guides/store-and-access-data.md
index 1792ae8fdc..bbdd5082e6 100644
--- a/docusaurus/docs/dev-docs/plugins/guides/store-and-access-data.md
+++ b/docusaurus/docs/dev-docs/plugins/guides/store-and-access-data.md
@@ -2,7 +2,7 @@
title: How to store and access data from a Strapi plugin
description: Learn how to store and access data from a Strapi plugin
sidebar_label: Store and access data
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- content-type
- guides
@@ -11,12 +11,8 @@ tags:
- plugins development guides
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# How to store and access data from a Strapi plugin
-
-
To store data with a Strapi [plugin](/dev-docs/plugins/developing-plugins), use a plugin content-type. Plugin content-types work exactly like other [content-types](/dev-docs/backend-customization/models). Once the content-type is [created](#create-a-content-type-for-your-plugin), you can start [interacting with the data](#interact-with-data-from-the-plugin).
## Create a content-type for your plugin
diff --git a/docusaurus/docs/dev-docs/plugins/sentry.md b/docusaurus/docs/dev-docs/plugins/sentry.md
index 261e84de98..71e68490c9 100644
--- a/docusaurus/docs/dev-docs/plugins/sentry.md
+++ b/docusaurus/docs/dev-docs/plugins/sentry.md
@@ -1,6 +1,6 @@
---
title: Sentry plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Track errors in your Strapi application.
tags:
- environment
diff --git a/docusaurus/docs/dev-docs/plugins/server-api.md b/docusaurus/docs/dev-docs/plugins/server-api.md
index 95546e2a90..a19d051405 100644
--- a/docusaurus/docs/dev-docs/plugins/server-api.md
+++ b/docusaurus/docs/dev-docs/plugins/server-api.md
@@ -1,7 +1,7 @@
---
title: Server API for plugins
sidebar_label: Server API
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi's Server API for plugins allows a Strapi plugin to customize the back end part (i.e. the server) of your application.
tags:
- plugin APIs
diff --git a/docusaurus/docs/dev-docs/plugins/upload.md b/docusaurus/docs/dev-docs/plugins/upload.md
index 01ca4c6c0d..ca2158acac 100644
--- a/docusaurus/docs/dev-docs/plugins/upload.md
+++ b/docusaurus/docs/dev-docs/plugins/upload.md
@@ -1,6 +1,6 @@
---
title: Upload plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Upload any kind of file on your server or external providers.
tags:
- localServer
@@ -11,12 +11,8 @@ tags:
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Upload plugin
-
-
The Upload plugin is the backend powering the Media Library available by default in the Strapi admin panel. The Upload plugin is installed by default and can not be uninstalled. Using either the Media Library from the admin panel or the upload API directly, you can upload any kind of file for use in your Strapi application.
By default Strapi provides a [provider](/dev-docs/providers) that uploads files to a local directory, which by default will be `public/uploads/` in your Strapi project. Additional providers are available should you want to upload your files to another location.
diff --git a/docusaurus/docs/dev-docs/plugins/users-permissions.md b/docusaurus/docs/dev-docs/plugins/users-permissions.md
index 2e5f919c38..a11f88479e 100644
--- a/docusaurus/docs/dev-docs/plugins/users-permissions.md
+++ b/docusaurus/docs/dev-docs/plugins/users-permissions.md
@@ -1,24 +1,24 @@
---
title: Users & Permissions plugin
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
toc_max_heading_level: 5
description: Protect your API with a full authentication process based on JWT and manage the permissions between the groups of users.
tags:
-- authenticated role
-- JSON Web Tokens (JWT)
-- JWT configuration
-- keycloak
-- ngrok
-- plugins
-- provider
-- public role
-- password
-- Users, Roles & Permissions
+ - authenticated role
+ - JSON Web Tokens (JWT)
+ - JWT configuration
+ - keycloak
+ - ngrok
+ - plugins
+ - provider
+ - public role
+ - password
+ - Users, Roles & Permissions
---
# Users & Permissions plugin
-The Users & Permissions plugin provides a full authentication process based on [JSON Web Tokens (JWT)](https://en.wikipedia.org/wiki/JSON_Web_Token) to protect your API, and an access-control list (ACL) strategy that enables you to manage permissions between groups of users. The Users & Permissions plugin is installed by default and can not be uninstalled.
+The Users & Permissions plugin provides a full authentication process based on [JSON Web Tokens (JWT)](https://en.wikipedia.org/wiki/JSON_Web_Token) to protect your API, and an access-control list (ACL) strategy that enables you to manage permissions between groups of users. The Users & Permissions plugin is installed by default.
The user guide describes how to use the [Users & Permissions plugin](/user-docs/users-roles-permissions) from the admin panel. The present page is more about the developer-related aspects of using the Users & Permissions plugin.
@@ -76,13 +76,13 @@ axios
identifier: 'user@strapi.io',
password: 'strapiPassword',
})
- .then(response => {
+ .then((response) => {
// Handle success.
console.log('Well done!');
console.log('User profile', response.data.user);
console.log('User token', response.data.jwt);
})
- .catch(error => {
+ .catch((error) => {
// Handle error.
console.log('An error occurred:', error.response);
});
@@ -101,7 +101,7 @@ If you use **Postman**, set the **body** to **raw** and select **JSON** as your
}
```
-If the request is successful you will receive the **user's JWT** in the `jwt` key:
+If the request is successful you will receive the **user's JWT** in the `jwt` key:
```json
{
@@ -141,11 +141,11 @@ axios
Authorization: `Bearer ${token}`,
},
})
- .then(response => {
+ .then((response) => {
// Handle success.
console.log('Data: ', response.data);
})
- .catch(error => {
+ .catch((error) => {
// Handle error.
console.log('An error occurred:', error.response);
});
@@ -161,14 +161,13 @@ Available options:
- `jwtSecret`: random string used to create new JWTs, typically set using the `JWT_SECRET` [environment variable](/dev-docs/configurations/environment#strapi).
- `jwt.expiresIn`: expressed in seconds or a string describing a time span.
- Eg: 60, "45m", "10h", "2 days", "7d", "2y". A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (minutes, hours, days, years, etc), otherwise milliseconds unit is used by default ("120" is equal to "120ms").
+ Eg: 60, "45m", "10h", "2 days", "7d", "2y". A numeric value is interpreted as a seconds count. If you need more advanced examples please see the [ms package](https://github.com/vercel/ms).
```js title="./config/plugins.js"
-
module.exports = ({ env }) => ({
// ...
'users-permissions': {
@@ -187,7 +186,6 @@ module.exports = ({ env }) => ({
```ts title="./config/plugins.ts"
-
export default ({ env }) => ({
// ...
'users-permissions': {
@@ -224,10 +222,10 @@ For example, if you have added a field called "nickname" that you wish to accept
```js title="./config/plugins.js"
module.exports = ({ env }) => ({
// ...
- "users-permissions": {
+ 'users-permissions': {
config: {
register: {
- allowedFields: ["nickname"],
+ allowedFields: ['nickname'],
},
},
},
@@ -242,10 +240,10 @@ module.exports = ({ env }) => ({
```ts title="./config/plugins.ts"
export default ({ env }) => ({
// ...
- "users-permissions": {
+ 'users-permissions': {
config: {
register: {
- allowedFields: ["nickname"],
+ allowedFields: ['nickname'],
},
},
},
@@ -257,7 +255,6 @@ export default ({ env }) => ({
-
#### Usage
Creates a new user in the database with a default role as 'registered'.
@@ -273,13 +270,13 @@ axios
email: 'user@strapi.io',
password: 'strapiPassword',
})
- .then(response => {
+ .then((response) => {
// Handle success.
console.log('Well done!');
console.log('User profile', response.data.user);
console.log('User token', response.data.jwt);
})
- .catch(error => {
+ .catch((error) => {
// Handle error.
console.log('An error occurred:', error.response);
});
@@ -287,15 +284,16 @@ axios
### Providers
- [Grant](https://github.com/simov/grant) and [Purest](https://github.com/simov/purest) allow you to use OAuth and OAuth2 providers to enable authentication in your application.
+[Grant](https://github.com/simov/grant) and [Purest](https://github.com/simov/purest) allow you to use OAuth and OAuth2 providers to enable authentication in your application.
For a better understanding, review the following description of the login flow. The example uses `github` as the provider but it works the same for other providers.
#### Understanding the login flow
Let's say that:
-* Strapi's backend is located at: `strapi.website.com`, and
-* Your app frontend is located at: `website.com`
+
+- Strapi's backend is located at: `strapi.website.com`, and
+- Your app frontend is located at: `website.com`
1. The user goes on your frontend app (`https://website.com`) and clicks on your button `connect with Github`.
2. The frontend redirects the tab to the backend URL: `https://strapi.website.com/api/connect/github`.
@@ -319,7 +317,6 @@ Before setting up a provider you must specify the absolute url of your backend i
```js title="config/server.js"
-
module.exports = ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
@@ -332,7 +329,6 @@ module.exports = ({ env }) => ({
```ts title="config/server.ts"
-
export default ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
@@ -340,7 +336,6 @@ export default ({ env }) => ({
});
```
-
@@ -394,7 +389,6 @@ Don't forget to update the server url in the backend config file `config/server.
-
Using ngrok
@@ -863,10 +857,10 @@ Don't forget to update the server url in the Strapi config file `./config/server
- Click on "Create Client"
- Enter the details of your organization and website.
- There is a drop-down for "App Category" but no explanation of what the different categories mean.
-"Community" seems to work fine.
+ "Community" seems to work fine.
- You can choose either version 1 or version 2 of the API - neither are actively developed.
-Version 2 is probably the best choice. See their
-[developer docs](https://docs.patreon.com/#introduction) for more detail.
+ Version 2 is probably the best choice. See their
+ [developer docs](https://docs.patreon.com/#introduction) for more detail.
- Under "Redirect URI's" enter `https://your-site.com/api/connect/patreon/callback`
- Save the client details and you will then see the Client ID and Client Secret.
@@ -926,25 +920,25 @@ You can also use the `register` lifecycle function to create your own custom pro
module.exports = {
register({ strapi }) {
strapi
- .plugin("users-permissions")
- .service("providers-registry")
- .add("example-provider-name", {
- icon: "",
+ .plugin('users-permissions')
+ .service('providers-registry')
+ .add('example-provider-name', {
+ icon: '',
enabled: true,
grantConfig: {
- key: "",
- secret: "",
+ key: '',
+ secret: '',
callback: `${strapi.config.server.url}/auth/example-provider-name/callback`,
- scope: ["email"],
- authorize_url: "https://awesome.com/authorize",
- access_url: "https://awesome.com/token",
+ scope: ['email'],
+ authorize_url: 'https://awesome.com/authorize',
+ access_url: 'https://awesome.com/token',
oauth: 2,
},
async authCallback({ accessToken, providers, purest }) {
// use whatever you want here to get the user info
return {
- username: "test",
- email: "test",
+ username: 'test',
+ email: 'test',
};
},
});
@@ -952,7 +946,7 @@ module.exports = {
};
```
-For additional information on parameters passed to `grantConfig`, please refer to the [`grant` documentation](https://github.com/simov/grant). For additional information about `purest` please refer to [`purest` documentation](https://github.com/simov/purest).
+For additional information on parameters passed to `grantConfig`, please refer to the [`grant` documentation](https://github.com/simov/grant). For additional information about `purest` please refer to [`purest` documentation](https://github.com/simov/purest).
#### Setup the frontend
@@ -972,7 +966,7 @@ Now you can make authenticated requests. More info here: [token usage](#token-us
- **A session/cookie/cache problem**: You can try again in a private tab.
- **The incorrect use of a domain with ngrok**: Check your urls and make sure that you use the ngrok url instead of `http://localhost:1337`. Don't forget to check the backend url set in the example app at `src/config.js`.
- **You can't access your admin panel**: It's most likely because you built it with the backend url set with a ngrok url and you stopped/restarted ngrok. You need to replace the backend url with the new ngrok url and run `yarn build` or `npm run build` again.
-:::
+ :::
### Reset password
@@ -1015,10 +1009,10 @@ axios
.post('http://localhost:1337/api/auth/forgot-password', {
email: 'user@strapi.io', // user's email
})
- .then(response => {
+ .then((response) => {
console.log('Your user received an email');
})
- .catch(error => {
+ .catch((error) => {
console.log('An error occurred:', error.response);
});
```
@@ -1040,10 +1034,10 @@ axios
password: 'userNewPassword',
passwordConfirmation: 'userNewPassword',
})
- .then(response => {
+ .then((response) => {
console.log("Your user's password has been reset.");
})
- .catch(error => {
+ .catch((error) => {
console.log('An error occurred:', error.response);
});
```
@@ -1097,14 +1091,21 @@ axios
.post(`http://localhost:1337/api/auth/send-email-confirmation`, {
email: 'user@strapi.io', // user's email
})
- .then(response => {
+ .then((response) => {
console.log('Your user received an email');
})
- .catch(error => {
+ .catch((error) => {
console.error('An error occurred:', error.response);
});
```
+### Email confirmation error redirection
+
+If a user or an automated security system opens the confirmation link multiple times, they may see a raw 403 error in cases when the account is already confirmed. To provide a better user experience, Strapi can now redirect the user to a custom URL instead of displaying the default error. You can set this **Error confirmation redirection URL** directly in the **Advanced settings** of the **Users & Permissions** plugin’s admin panel:
+
+- If a custom URL is provided, users who encounter a repeated or invalid confirmation link will be redirected there instead of seeing the 403 error.
+- If no URL is set, the default 403 error is shown, preserving the existing behavior.
+
## User object in Strapi context
The `user` object is available to successfully authenticated requests.
@@ -1112,7 +1113,7 @@ The `user` object is available to successfully authenticated requests.
The authenticated `user` object is a property of `ctx.state`.
```js
-create: async ctx => {
+create: async (ctx) => {
const { id } = ctx.state.user;
const depositObj = {
@@ -1288,7 +1289,6 @@ By default you can set a `JWT_SECRET` environment variable and it will be used a
```js title="./extensions/users-permissions/config/jwt.js"
-
module.exports = {
jwtSecret: process.env.SOME_ENV_VAR,
};
@@ -1299,7 +1299,6 @@ module.exports = {
```ts title="./extensions/users-permissions/config/jwt.ts"
-
export default {
jwtSecret: process.env.SOME_ENV_VAR,
};
@@ -1318,8 +1317,8 @@ You can learn more about configuration [here](/dev-docs/configurations).
By default, Strapi SSO only redirects to the redirect URL that is exactly equal to the url in the configuration:
24) {
+ // throws default error message
+ return false;
+ }
+
+ return true; // Validation passed
+ },
+ },
+ },
+ },
+```
diff --git a/docusaurus/docs/dev-docs/plugins/using-plugins.md b/docusaurus/docs/dev-docs/plugins/using-plugins.md
index 575cc9adce..7f00946665 100644
--- a/docusaurus/docs/dev-docs/plugins/using-plugins.md
+++ b/docusaurus/docs/dev-docs/plugins/using-plugins.md
@@ -1,7 +1,7 @@
---
title: Using Strapi plugins
description: Learn more about Strapi built-in plugins and how to use them from a developer perspective.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_next: dev-docs/plugins/documentation
tags:
- admin panel
diff --git a/docusaurus/docs/dev-docs/preview.md b/docusaurus/docs/dev-docs/preview.md
new file mode 100644
index 0000000000..00b3b7e737
--- /dev/null
+++ b/docusaurus/docs/dev-docs/preview.md
@@ -0,0 +1,322 @@
+---
+title: Setting up the Preview feature
+description: Learn to set up the Preview feature to link your front end application to Strapi's Content Manager Preview feature.
+displayedSidebar: devDocsSidebar
+tags:
+- content manager
+- preview
+- configuration
+---
+
+# Setting up the Preview feature
+
+Strapi's Preview feature enables previewing content in a frontend application directly from the Strapi admin panel.
+
+The present page describes how to set up the Preview feature in Strapi. Once set up, the feature can be used as described in the [User Guide](/user-docs/content-manager/previewing-content).
+
+:::prerequisites
+* The following environment variables must be defined in your `.env` file, replacing example values with appropriate values:
+
+ ```bash
+ CLIENT_URL=https://your-frontend-app.com
+ PREVIEW_SECRET=your-secret-key # optional, required with Next.js draft mode
+ ```
+
+* A front-end application for your Strapi project should be already created and set up.
+:::
+
+## Configuration components
+
+The Preview feature configuration is stored in the `preview` object of [the `config/admin` file](/dev-docs/configurations/admin-panel) and consists of 3 key components:
+
+### Activation flag
+
+Enables or disables the preview feature:
+```javascript title="config/admin.ts|js" {3}
+// …
+preview: {
+ enabled: true,
+ // …
+}
+// …
+```
+
+### Allowed origins
+
+Controls which domains are allowed to be loaded in an iframe in your admin panel to preview content:
+
+```javascript title="config/admin.ts|js" {5}
+// …
+preview: {
+ enabled: true,
+ config: {
+ allowedOrigins: [env("CLIENT_URL")], // Usually your frontend application URL
+ // …
+ }
+}
+// …
+```
+
+### Preview handler
+
+Manages the preview logic and URL generation, as in the following basic example where `uid` is the content-type identifier (e.g., `api::article.article` or `plugin::my-api.my-content-type`):
+
+```jsx title="config/admin.ts|js" {6-11}
+// …
+preview: {
+ enabled: true,
+ config: {
+ // …
+ async handler(uid, { documentId, locale, status }) {
+ const document = await strapi.documents(uid).findOne({ documentId });
+ const pathname = getPreviewPathname(uid, { locale, document });
+
+ return `${env('PREVIEW_URL')}${pathname}`
+ },
+ }
+}
+// …
+```
+
+An example of [URL generation logic](#2-add-url-generation-logic) in given in the following basic implementation guide.
+
+#### Previewing draft entries
+
+The strategy for the front end application to query draft or published content is framework-specific. At least 3 strategies exist:
+
+- using a query parameter, having something like `/your-path?preview=true` (this is, for instance, how [Nuxt](https://nuxt.com/docs/api/composables/use-preview-modehow) works)
+- redirecting to a dedicated preview route like `/preview?path=your-path`(this is, for instance, how [Next's draft mode](https://nextjs.org/docs/app/building-your-application/configuring/draft-mode) works)
+- or using a different domain for previews like `preview.mysite.com/your-path`.
+
+When [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content.md) is enabled for your content-type, you can also directly leverage Strapi's `status` parameter to handle the logic within the Preview handler, using the following generic approach:
+
+```javascript
+async handler(uid, { documentId, locale, status }) {
+ const document = await strapi.documents(uid).findOne({ documentId });
+ const pathname = getPreviewPathname(uid, { locale, document });
+ if (status === 'published') {
+ // return the published version
+ }
+ // return the draft version
+},
+```
+
+A more detailed example using the draft mode of Next.js is given in the [basic implementation guide](#3-add-handler-logic).
+
+## Basic implementation guide
+
+Follow these steps to add Preview capabilities to your content types.
+
+### 1. Create the Preview configuration
+
+Create a new file `/config/admin.ts` (or update it if it exists) with the following basic structure:
+
+```javascript title="config/admin.ts"
+export default ({ env }) => ({
+ // Other admin-related configurations go here
+ // (see docs.strapi.io/dev-docs/configurations/admin-panel)
+ preview: {
+ enabled: true,
+ config: {
+ allowedOrigins: env('CLIENT_URL'),
+ async handler (uid, { documentId, locale, status }) => {
+ // Handler implementation coming in step 3
+ },
+ },
+ },
+});
+```
+
+### 2. Add URL generation logic
+
+Add the URL generation logic with a `getPreviewPathname` function. The following example is taken from the [Launchpad](https://github.com/strapi/LaunchPad/tree/feat/preview) Strapi demo application:
+
+```typescript title="config/admin.ts"
+// Function to generate preview pathname based on content type and document
+const getPreviewPathname = (uid, { locale, document }): string => {
+ const { slug } = document;
+
+ // Handle different content types with their specific URL patterns
+ switch (uid) {
+ // Handle pages with predefined routes
+ case "api::page.page":
+ switch (slug) {
+ case "homepage":
+ return `/${locale}`; // Localized homepage
+ case "pricing":
+ return "/pricing"; // Pricing page
+ case "contact":
+ return "/contact"; // Contact page
+ case "faq":
+ return "/faq"; // FAQ page
+ }
+ // Handle product pages
+ case "api::product.product": {
+ if (!slug) {
+ return "/products"; // Products listing page
+ }
+ return `/products/${slug}`; // Individual product page
+ }
+ // Handle blog articles
+ case "api::article.article": {
+ if (!slug) {
+ return "/blog"; // Blog listing page
+ }
+ return `/blog/${slug}`; // Individual article page
+ }
+ default: {
+ return null;
+ }
+ }
+};
+
+// … main export (see step 3)
+```
+
+:::note
+Some content types don't need to have a preview if it doesn't make sense, hence the default case returning `null`. A Global single type with some site metadata, for example, will not have a matching front-end page. In these cases, the handler function should return `null`, and the preview UI will not be shown in the admin panel. This is how you enable or disable preview per content type.
+:::
+
+### 3. Add handler logic
+
+Create the complete configuration, expanding the basic configuration created in step 1. with the URL generation logic created in step 2., adding an appropriate handler logic:
+
+```typescript title="config/admin.ts" {8-9,18-35}
+const getPreviewPathname = (uid, { locale, document }): string => {
+ // … as defined in step 2
+};
+
+// Main configuration export
+export default ({ env }) => {
+ // Get environment variables
+ const clientUrl = env("CLIENT_URL"); // Frontend application URL
+ const previewSecret = env("PREVIEW_SECRET"); // Secret key for preview authentication
+
+ return {
+ // Other admin-related configurations go here
+ // (see docs.strapi.io/dev-docs/configurations/admin-panel)
+ preview: {
+ enabled: true, // Enable preview functionality
+ config: {
+ allowedOrigins: clientUrl, // Restrict preview access to specific domain
+ async handler(uid, { documentId, locale, status }) {
+ // Fetch the complete document from Strapi
+ const document = await strapi.documents(uid).findOne({ documentId });
+
+ // Generate the preview pathname based on content type and document
+ const pathname = getPreviewPathname(uid, { locale, document });
+
+ // Disable preview if the pathname is not found
+ if (!pathname) {
+ return null;
+ }
+
+ // Use Next.js draft mode passing it a secret key and the content-type status
+ const urlSearchParams = new URLSearchParams({
+ url: pathname,
+ secret: previewSecret,
+ status,
+ });
+ return `${clientUrl}/api/preview?${urlSearchParams}`;
+ },
+ },
+ },
+ };
+};
+```
+
+### 4. Set up the front-end preview route
+
+Setting up the front-end preview route is highly dependent on the framework used for your front-end application.
+
+For instance, [Next.js draft mode](https://nextjs.org/docs/app/building-your-application/configuring/draft-mode) and
+[Nuxt preview mode](https://nuxt.com/docs/api/composables/use-preview-mode) provide additional documentation on how to implement the front-end part in their respective documentations.
+
+If using Next.js, a basic implementation could be like in the following example taken from the [Launchpad](https://github.com/strapi/LaunchPad/tree/feat/preview) Strapi demo application:
+
+```typescript title="/next/api/preview/route.ts"
+import { draftMode } from "next/headers";
+import { redirect } from "next/navigation";
+
+export async function GET(request: Request) {
+ // Parse query string parameters
+ const { searchParams } = new URL(request.url);
+ const secret = searchParams.get("secret");
+ const url = searchParams.get("url");
+ const status = searchParams.get("status");
+
+ // Check the secret and next parameters
+ // This secret should only be known to this route handler and the CMS
+ if (secret !== process.env.PREVIEW_SECRET) {
+ return new Response("Invalid token", { status: 401 });
+ }
+
+ // Enable Draft Mode by setting the cookie
+ if (status === "published") {
+ draftMode().disable();
+ } else {
+ draftMode().enable();
+ }
+
+ // Redirect to the path from the fetched post
+ // We don't redirect to searchParams.slug as that might lead to open redirect vulnerabilities
+ redirect(url || "/");
+}
+```
+
+### 5. Allow the front-end to be embedded
+
+On the Strapi side, [the `allowedOrigins` configuration parameter](#allowed-origins) allows the admin panel to load the front-end window in an iframe. But allowing the embedding works both ways, so on the front-end side, you also need to allow the window to be embedded in Strapi's admin panel.
+
+This requires the front-end application to have its own header directive, the CSP `frame-ancestors` directive. Setting this directive up depends on how your website is built. For instance, setting this up in Next.js requires a middleware configuration (see [Next.js docs](https://nextjs.org/docs/app/building-your-application/configuring/content-security-policy)).
+
+### Next steps
+
+Once the preview system is set up, you need to adapt your data fetching logic to handle draft content appropriately. This involves:
+
+1. Create or adapt your data fetching utility to check if draft mode is enabled
+2. Update your API calls to include the draft status parameter when appropriate
+
+The following, taken from the [Launchpad](https://github.com/strapi/LaunchPad/tree/feat/preview) Strapi demo application, is an example of how to implement draft-aware data fetching in your Next.js front-end application:
+
+```typescript {8-18}
+import { draftMode } from "next/headers";
+import qs from "qs";
+
+export default async function fetchContentType(
+ contentType: string,
+ params: Record = {}
+): Promise {
+ // Check if Next.js draft mode is enabled
+ const { isEnabled: isDraftMode } = draftMode();
+
+ try {
+ const queryParams = { ...params };
+ // Add status=draft parameter when draft mode is enabled
+ if (isDraftMode) {
+ queryParams.status = "draft";
+ }
+
+ const url = `${baseURL}/${contentType}?${qs.stringify(queryParams)}`;
+ const response = await fetch(url);
+ if (!response.ok) {
+ throw new Error(
+ `Failed to fetch data from Strapi (url=${url}, status=${response.status})`
+ );
+ }
+ return await response.json();
+ } catch (error) {
+ console.error("Error fetching content:", error);
+ throw error;
+ }
+}
+```
+
+This utility method can then be used in your page components to fetch either draft or published content based on the preview state:
+
+```typescript
+// In your page component:
+const pageData = await fetchContentType('api::page.page', {
+ // Your other query parameters
+});
+```
diff --git a/docusaurus/docs/dev-docs/project-structure.md b/docusaurus/docs/dev-docs/project-structure.md
index 9e05c9613f..1c0335444b 100644
--- a/docusaurus/docs/dev-docs/project-structure.md
+++ b/docusaurus/docs/dev-docs/project-structure.md
@@ -1,6 +1,6 @@
---
title: Project structure
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Discover the project structure of any default Strapi application.
tags:
- project structure
diff --git a/docusaurus/docs/dev-docs/quick-start.md b/docusaurus/docs/dev-docs/quick-start.md
index 14b9fd345d..272234015e 100644
--- a/docusaurus/docs/dev-docs/quick-start.md
+++ b/docusaurus/docs/dev-docs/quick-start.md
@@ -1,6 +1,6 @@
---
sidebar_label: 'Quick Start Guide'
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
sidebar_position: 2
title: Quick Start Guide - Strapi Developer Docs
description: Get ready to get Strapi, your favorite open-source headless cms up and running in less than 3 minutes.
@@ -16,17 +16,18 @@ import InstallPrerequisites from '/docs/snippets/installation-prerequisites.md'
# Quick Start Guide
-
-
Strapi offers a lot of flexibility. Whether you want to go fast and quickly see the final result, or would rather dive deeper into the product, we got you covered. For this tutorial, we'll go for the DIY approach and build a project and data structure from scratch, then deploy your project to Strapi Cloud to add data from there.
*Estimated completion time: 5-10 minutes*
-:::prerequisites
+
+Prerequisites:
+
You will also need to [install `git`](https://github.com/git-guides/install-git) and to have a [GitHub](https://github.com) account to deploy your project to Strapi Cloud.
-:::
+
+
## Part A: Create a new project with Strapi
@@ -34,7 +35,7 @@ We will first create a new Strapi project on your machine by running a command i
Follow the steps below by clicking on the togglable content to read more instructions.
-
+Step 1: Run the installation script and create a Strapi Cloud account
### Step 1: Run the installation script and create a Strapi Cloud account
@@ -78,7 +79,7 @@ As you will see in the terminal, your project is now building locally.
-
+Step 2: Register the first local administrator user
### Step 2: Register the first local administrator user
@@ -121,7 +122,7 @@ If the server is not already running, in your terminal, `cd` into the `my-strapi
The Content-Type Builder helps you create your data structure. When creating an empty project with Strapi, this is where to get the party started!
-
+Step 1: Create a "Restaurant" collection type
@@ -129,7 +130,7 @@ The Content-Type Builder helps you create your data structure. When creating an
Your restaurants directory will eventually include many restaurants, so we need to create a "Restaurant" collection type. Then we can describe the fields to display when adding a new restaurant entry:
-1. Click on the **Create your first Content type** button. If it's not showing up, go to  [Content-Type Builder](http://localhost:1337/admin/plugins/content-type-builder) in the main navigation.
+1. Click on the **Create your first Content type** button. If it's not showing up, go to [Content-Type Builder](http://localhost:1337/admin/plugins/content-type-builder) in the main navigation.
2. Click on **Create new collection type**.
3. Type `Restaurant` for the _Display name_, and click **Continue**.
4. Click the Text field.
@@ -148,18 +149,18 @@ sources={{
}}
/>
-Once Strapi has restarted, "Restaurant" is listed under  _Content Manager > Collection types_ in the navigation. Wow, you have just created your very first content-type! It was so cool — let's create another one right now, just for pleasure.
+Once Strapi has restarted, "Restaurant" is listed under _Content Manager > Collection types_ in the navigation. Wow, you have just created your very first content-type! It was so cool — let's create another one right now, just for pleasure.
-
+Step 2: Create a "Category" collection type
### Step 2: Create a "Category" collection type
It would help getting a bit more organized if our restaurants directory had some categories. Let's create a "Category" collection type:
-1. Go to  [Content-type Builder](http://localhost:1337/admin/plugins/content-type-builder) in the main navigation.
+1. Go to [Content-type Builder](http://localhost:1337/admin/plugins/content-type-builder) in the main navigation.
2. Click on **Create new collection type**.
3. Type `Category` for the _Display name_, and click **Continue**.
4. Click the Text field.
@@ -244,7 +245,7 @@ Feel free to play with the Content-Type Builder even further and add more fields
Now that we have created a basic data structure with 2 collection types, "Restaurant" and "Category", and deployed your project to Strapi Cloud, let's use the Cloud to actually add content by creating new entries.
-
+Step 1: Log in to the admin panel of your new Strapi Cloud project
### Step 1: Log in to the admin panel of your new Strapi Cloud project
@@ -280,13 +281,13 @@ Any project hosted on Strapi Cloud is accessible from its own URL, something lik
-
+Step 2: Create an entry for the "Restaurant" collection type
### Step 2: Create an entry for the "Restaurant" collection type
-1. Go to  _Content Manager > Collection types - Restaurant_ in the navigation.
+1. Go to _Content Manager > Collection types - Restaurant_ in the navigation.
2. Click on **Create new entry**.
3. Type the name of your favorite local restaurant in the _Name_ field. Let's say it's `Biscotte Restaurant`.
4. In the _Description_ field, write a few words about it. If you're lacking some inspiration, you can use `Welcome to Biscotte restaurant! Restaurant Biscotte offers a cuisine based on fresh, quality products, often local, organic when possible, and always produced by passionate producers.`
@@ -300,16 +301,16 @@ sources={{
}}
/>
-The restaurant is now listed in the _Collection types - Restaurant_ view of the  _Content Manager_.
+The restaurant is now listed in the _Collection types - Restaurant_ view of the _Content Manager_.
-
+Step 3: Add Categories
#### Step 3: Add Categories
-Let's go to  _Content Manager > Collection types - Category_ and create 2 categories:
+Let's go to _Content Manager > Collection types - Category_ and create 2 categories:
1. Click on **Create new entry**.
2. Type `French Food` in the _Name_ field.
@@ -324,23 +325,23 @@ sources={{
dark: '/img/assets/quick-start-guide/qsg-handson-categories-v5_DARK.gif',
}}/>
-The "French Food" and "Brunch" categories are now listed in the _Collection types - Category_ view of the  _Content Manager_.
+The "French Food" and "Brunch" categories are now listed in the _Collection types - Category_ view of the _Content Manager_.
Now, we will add a category to a restaurant:
-1. Go to  _Content Manager > Collection types - Restaurant_ in the navigation, and click on "Biscotte Restaurant".
+1. Go to _Content Manager > Collection types - Restaurant_ in the navigation, and click on "Biscotte Restaurant".
2. In the **Categories** drop-down list at the bottom of the page, select "French Food". Scroll back to the top of the page and click **Save**.
-
+Step 4: Set Roles & Permissions
### Step 4: Set Roles & Permissions
We have just added a restaurant and 2 categories. We now have enough content to consume (pun intended). But first, we need to make sure that the content is publicly accessible through the API:
-1. Click on _ Settings_ at the bottom of the main navigation.
+1. Click on _ Settings_ at the bottom of the main navigation.
2. Under _Users & Permissions Plugin_, choose _Roles_.
3. Click the **Public** role.
4. Scroll down under _Permissions_.
@@ -358,14 +359,14 @@ sources={{
-
+Step 5: Publish the content
### Step 5: Publish the content
By default, any content you create is saved as a draft. Let's publish our categories and restaurant.
-First, navigate to  _Content Manager > Collection types - Category_. From there:
+First, navigate to _Content Manager > Collection types - Category_. From there:
1. Click the "Brunch" entry.
2. On the next screen, click **Publish**.
@@ -373,7 +374,7 @@ First, navigate to  _Co
Then, go back to the Categories list and repeat for the "French Food" category.
-Finally, to publish your favorite restaurant, go to  _Content Manager > Collection types - Restaurant_, click the "Biscotte Restaurant" entry, and **Publish** it.
+Finally, to publish your favorite restaurant, go to _Content Manager > Collection types - Restaurant_, click the "Biscotte Restaurant" entry, and **Publish** it.
-
+Step 6: Use the API
### Step 6: Use the API
diff --git a/docusaurus/docs/dev-docs/setup-deployment.md b/docusaurus/docs/dev-docs/setup-deployment.md
index 2587769cde..f2ca61edc4 100644
--- a/docusaurus/docs/dev-docs/setup-deployment.md
+++ b/docusaurus/docs/dev-docs/setup-deployment.md
@@ -1,6 +1,6 @@
---
title: Setup and Deployment
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Strapi is meant to be installed on your local machine, then configured, and finally deployed to a remote environment.
pagination_prev: dev-docs/intro
pagination_next: dev-docs/api/content-api
diff --git a/docusaurus/docs/dev-docs/templates.md b/docusaurus/docs/dev-docs/templates.md
index 2407ef0def..5e1e9ec023 100644
--- a/docusaurus/docs/dev-docs/templates.md
+++ b/docusaurus/docs/dev-docs/templates.md
@@ -1,7 +1,7 @@
---
title: Templates
description: Use and create pre-made Strapi applications designed for a specific use case.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
tags:
- installation
- templates
diff --git a/docusaurus/docs/dev-docs/testing.md b/docusaurus/docs/dev-docs/testing.md
index d4a6adeac2..70706b154b 100644
--- a/docusaurus/docs/dev-docs/testing.md
+++ b/docusaurus/docs/dev-docs/testing.md
@@ -1,6 +1,6 @@
---
title: Testing
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
description: Learn how to test your Strapi application.
unlisted: true
tags:
@@ -8,14 +8,10 @@ tags:
- environment
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Unit testing
-
-
-:::strapi
-The Strapi blog has a tutorial on how to implement [API testing with Jest and Supertest](https://strapi.io/blog/automated-testing-for-strapi-api-with-jest-and-supertest) and [how to add unit tests to your Strapi plugin](https://strapi.io/blog/how-to-add-unit-tests-to-your-strapi-plugin).
+:::info
+Currently, our docs are only for Javascript projects that wish to have unit testing setup. We will update our docs soon as soon as we have the Typescript equivalent code samples available.
:::
In this guide we will see how you can run basic unit tests for a Strapi application using a testing framework.
@@ -78,7 +74,6 @@ and add those lines at the bottom of file
".tmp",
".cache"
],
- "testEnvironment": "node"
}
```
@@ -123,7 +118,7 @@ let instance;
async function setupStrapi() {
if (!instance) {
- await Strapi().load();
+ await Strapi.createStrapi().load();
instance = strapi;
await instance.server.mount();
@@ -157,7 +152,6 @@ module.exports = { setupStrapi, cleanupStrapi };
We need a main entry file for our tests, one that will also test our helper file.
```js title="path: ./tests/app.test.js"
-const fs = require('fs');
const { setupStrapi, cleanupStrapi } = require("./helpers/strapi");
beforeAll(async () => {
@@ -173,7 +167,7 @@ it("strapi is defined", () => {
});
```
-Actually this is all we need for writing unit tests. Just run `yarn test` and see a result of your first test
+Actually this is all we need for writing unit tests. Just run `NODE_ENV=test yarn test` and see a result of your first test
```bash
yarn run v1.13.0
diff --git a/docusaurus/docs/dev-docs/typescript.md b/docusaurus/docs/dev-docs/typescript.md
index 92ea330e51..10b0f30945 100644
--- a/docusaurus/docs/dev-docs/typescript.md
+++ b/docusaurus/docs/dev-docs/typescript.md
@@ -1,5 +1,6 @@
---
title: TypeScript
+sidebar_label: Introduction
description: Get started with TypeScript for your Strapi application
pagination_next: dev-docs/typescript/development
tags:
diff --git a/docusaurus/docs/dev-docs/typescript/development.md b/docusaurus/docs/dev-docs/typescript/development.md
index 220fa2e704..fd28e30eec 100644
--- a/docusaurus/docs/dev-docs/typescript/development.md
+++ b/docusaurus/docs/dev-docs/typescript/development.md
@@ -2,25 +2,27 @@
title: TypeScript development
description: Learn more about TypeScript usage with Strapi 5
tags:
-- strapi() factory
-- strapi.compile() function
-- typescript
-- plugins development
-
+ - strapi() factory
+ - strapi.compile() function
+ - typescript
+ - plugins development
+ - api
+ - guides
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
+# TypeScript Development with Strapi
+
+This page provides a comprehensive guide to developing with TypeScript in Strapi v5, covering key patterns and configurations for integrating TypeScript effectively. You'll find sections on using Strapi’s provided types, generating and managing typings for content types, configuring Strapi programmatically, and building plugins with TypeScript. Each section includes practical steps and example code to help you set up and troubleshoot TypeScript-based workflows in your Strapi project.
-# TypeScript Development with Strapi
+:::strapi API reference
+We are preparing an API reference page, which will include an exhaustive list of the types exported by Strapi. Please come back soon! 👀
+:::
-
+## :books: Guides
-While developing a [TypeScript](/dev-docs/typescript)-based application with Strapi, you can:
+The guides are a curated list of common examples in which you might need to use Strapi types in your application.
-- access [typings for the `Strapi`](#use-strapi-typescript-typings) class with autocompletion,
-- [generate typings](#generate-typings-for-content-types-schemas) for your project's content-types,
-- [start Strapi programmatically](#start-strapi-programmatically),
-- and follow some TypeScript-specific instructions for [plugins development](#develop-a-plugin-using-typescript).
+You can find the list of available guides [here](/dev-docs/typescript/development/guides).
## Use `Strapi` TypeScript typings
@@ -31,15 +33,15 @@ To experience TypeScript-based autocomplete while developing Strapi applications
1. Open the `./src/index.ts` file from your code editor.
2. Declare the `strapi` argument as type `Strapi` within the global `register` method:
- ```typescript title="./src/index.ts"
- import { Strapi } from '@strapi/strapi';
+ ```typescript title="./src/index.ts"
+ import type { Core } from '@strapi/strapi';
- export default {
- register({ strapi }: { strapi: Strapi }) {
- // ...
- },
- };
- ```
+ export default {
+ register({ strapi }: { strapi: Core.Strapi }) {
+ // ...
+ },
+ };
+ ```
3. Within the body of the `register` method, start typing `strapi.` and use keyboard arrows to browse the available properties.
@@ -49,7 +51,7 @@ To experience TypeScript-based autocomplete while developing Strapi applications
## Generate typings for content-types schemas
-To generate typings for your project schemas use the [`ts:generate-types` CLI command](/dev-docs/cli#strapi-ts). The `ts:generate-types` command creates the folder `types`, at the project root, which stores the typings for your project. The optional `--debug` flag returns a detailed table of the generated schemas.
+To generate typings for your project schemas use the [`ts:generate-types` CLI command](/dev-docs/cli#ts-generate). The `ts:generate-types` command creates the folder `types`, at the project root, which stores the typings for your project. The optional `--debug` flag returns a detailed table of the generated schemas.
To use `ts:generate-types`run the following code in a terminal at the project root:
@@ -111,15 +113,14 @@ Types should only be imported from `@strapi/strapi` to avoid breaking changes. T
To start Strapi programmatically in a TypeScript project the Strapi instance requires the compiled code location. This section describes how to set and indicate the compiled code directory.
-### Use the `strapi()` factory
+### Use the `createStrapi()` factory
-Strapi can be run programmatically by using the `strapi()` factory. Since the code of TypeScript projects is compiled in a specific directory, the parameter `distDir` should be passed to the factory to indicate where the compiled code should be read:
+Strapi can be run programmatically by using the `strapi.createStrapi()` factory. Since the code of TypeScript projects is compiled in a specific directory, the parameter `distDir` should be passed to the factory to indicate where the compiled code should be read:
```js title="./server.js"
-
const strapi = require('@strapi/strapi');
-const app = strapi({ distDir: './dist' });
-app.start();
+const app = strapi.createStrapi({ distDir: './dist' });
+app.start();
```
### Use the `strapi.compile()` function
@@ -129,7 +130,7 @@ The `strapi.compile()` function should be mostly used for developing tools that
```js
const strapi = require('@strapi/strapi');
-strapi.compile().then(appContext => strapi(appContext).start());
+strapi.compile().then((appContext) => strapi(appContext).start());
```
## Develop a plugin using TypeScript
diff --git a/docusaurus/docs/dev-docs/typescript/development/api-reference.md b/docusaurus/docs/dev-docs/typescript/development/api-reference.md
new file mode 100644
index 0000000000..58486e18b7
--- /dev/null
+++ b/docusaurus/docs/dev-docs/typescript/development/api-reference.md
@@ -0,0 +1,12 @@
+---
+title: TypeScript - API Reference
+sidebar_label: API Reference
+description: API Reference for Strapi Type System
+tags:
+ - typescript
+ - api
+---
+
+# API Reference
+
+:building_construction: **Still under construction, come back later** :construction:
diff --git a/docusaurus/docs/dev-docs/typescript/development/guides.md b/docusaurus/docs/dev-docs/typescript/development/guides.md
new file mode 100644
index 0000000000..db67c57c2d
--- /dev/null
+++ b/docusaurus/docs/dev-docs/typescript/development/guides.md
@@ -0,0 +1,18 @@
+---
+title: TypeScript - Guides
+sidebar_label: Guides
+description: List of TypeScript guides to get started with Strapi and TypeScript
+tags:
+ - typescript
+ - guides
+---
+
+# TypeScript Guides
+
+This page includes a curated list of common examples useful to use types while [developing a Strapi TypeScript application](/dev-docs/typescript/development).
+
+
+
+
+
+
diff --git a/docusaurus/docs/dev-docs/typescript/development/guides/documents-and-entries.md b/docusaurus/docs/dev-docs/typescript/development/guides/documents-and-entries.md
new file mode 100644
index 0000000000..ec288d7b2f
--- /dev/null
+++ b/docusaurus/docs/dev-docs/typescript/development/guides/documents-and-entries.md
@@ -0,0 +1,214 @@
+---
+title: TypeScript - Manipulating Documents and Entries
+sidebar_label: Manipulating Documents and Entries
+description: TypeScript guide to get started with manipulating documents and entries
+tags:
+ - typescript
+ - guides
+ - data
+ - document
+ - component
+ - uid
+ - entries
+---
+
+# Manipulating documents and entries
+
+This guide will explore TypeScript patterns for manipulating documents and entries in a Strapi v5 application, including how to leverage Strapi's `UID` and `Data` namespaces to interact with both generic and known entity types safely. If you're working on a TypeScript-based Strapi project, mastering these approaches will help you take full advantage of type safety and code completion, ensuring robust, error-free interactions with your application’s content and components.
+
+:::prerequisites
+
+- **Strapi Application:** A Strapi v5 application. If you don't have one, follow the [documentation](/dev-docs/quick-start) to get started.
+- **TypeScript:** Ensure TypeScript is set up in your Strapi project. You can follow Strapi's [official guide](/dev-docs/typescript#getting-started-with-typescript-in-strapi) on configuring TypeScript.
+- **Generated Types:** Application types [have been generated](/dev-docs/typescript/development#generate-typings-for-content-types-schemas) and are accessible.
+ :::
+
+## Type Imports
+
+The `UID` namespace contains literal unions representing the available resources in the application.
+
+```typescript
+import type { UID } from '@strapi/strapi';
+```
+
+- `UID.ContentType` represents a union of every content-type identifier in the application
+- `UID.Component` represents a union of every component identifier in the application
+- `UID.Schema` represents a union of every schema (content-type or component) identifier in the application
+- And others...
+
+---
+
+Strapi provides a `Data` namespace containing several built-in types for entity representation.
+
+```typescript
+import type { Data } from '@strapi/strapi';
+```
+
+- `Data.ContentType` represents a Strapi document object
+- `Data.Component` represents a Strapi component object
+- `Data.Entity` represents either a document or a component
+
+:::tip
+Both the entities' type definitions and UIDs are based on the generated schema types for your application.
+
+In case of a mismatch or error, you can always [regenerate the types](/dev-docs/typescript/development#generate-typings-for-content-types-schemas).
+:::
+
+## Usage
+
+### Generic entities
+
+When dealing with generic data, it is recommended to use non-parametrized forms of the `Data` types.
+
+#### Generic documents
+
+```typescript
+async function save(name: string, document: Data.ContentType) {
+ await writeCSV(name, document);
+ // ^ {
+ // id: Data.ID;
+ // documentId: string;
+ // createdAt?: DateTimeValue;
+ // updatedAt?: DateTimeValue;
+ // publishedAt?: DateTimeValue;
+ // ...
+ // }
+}
+```
+
+:::warning
+In the preceding example, the resolved properties for `document` are those common to every content-type.
+
+Other properties have to be checked manually using type guards.
+
+```typescript
+if ('my_prop' in document) {
+ return document.my_prop;
+}
+```
+
+:::
+
+#### Generic components
+
+```typescript
+function renderComponent(parent: Node, component: Data.Component) {
+ const elements: Element[] = [];
+ const properties = Object.entries(component);
+
+ for (const [name, value] of properties) {
+ // ^ ^
+ // string any
+ const paragraph = document.createElement('p');
+
+ paragraph.textContent = `Key: ${name}, Value: ${value}`;
+
+ elements.push(paragraph);
+ }
+
+ parent.append(...elements);
+}
+```
+
+### Known entities
+
+When manipulating known entities, it is possible to parametrize `Data` types for better type safety and code completion.
+
+#### Known documents
+
+```typescript
+const ALL_CATEGORIES = ['food', 'tech', 'travel'];
+
+function validateArticle(article: Data.ContentType<'api::article.article'>) {
+ const { title, category } = article;
+ // ^? ^?
+ // string Data.ContentType<'api::category.category'>
+
+ if (title.length < 5) {
+ throw new Error('Title too short');
+ }
+
+ if (!ALL_CATEGORIES.includes(category.name)) {
+ throw new Error(`Unknown category ${category.name}`);
+ }
+}
+```
+
+#### Known components
+
+```typescript
+function processUsageMetrics(
+ id: string,
+ metrics: Data.Component<'app.metrics'>
+) {
+ telemetry.send(id, { clicks: metrics.clicks, views: metrics.views });
+}
+```
+
+### Advanced use cases
+
+#### Entities subsets
+
+Using the types' second parameter (`TKeys`), it is possible to obtain a subset of an entity.
+
+```typescript
+type Credentials = Data.ContentType<'api::acount.acount', 'email' | 'password'>;
+// ^? { email: string; password: string }
+```
+
+```typescript
+type UsageMetrics = Data.Component<'app.metrics', 'clicks' | 'views'>;
+// ^? { clicks: number; views: number }
+```
+
+#### Type argument inference
+
+It is possible to bind and restrict an entity type based on other function parameters.
+
+In the following example, the `uid` type is inferred upon usage as `T` and used as a type parameter for the `document`.
+
+```typescript
+import type { UID } from '@strapi/strapi';
+
+function display(
+ uid: T,
+ document: Data.ContentType
+) {
+ switch (uid) {
+ case 'api::article.article': {
+ return document.title;
+ // ^? string
+ // ^? Data.ContentType<'api::article.article'>
+ }
+ case 'api::category.category': {
+ return document.name;
+ // ^? string
+ // ^? Data.ContentType<'api::category.category'>
+ }
+ case 'api::account.account': {
+ return document.email;
+ // ^? string
+ // ^? Data.ContentType<'api::account.account'>
+ }
+ default: {
+ throw new Error(`unknown content-type uid: "${uid}"`);
+ }
+ }
+}
+```
+
+When calling the function, the `document` type needs to match the given `uid`.
+
+```typescript
+declare const article: Data.Document<'api::article.article'>;
+declare const category: Data.Document<'api::category.category'>;
+declare const account: Data.Document<'api::account.account'>;
+
+display('api::article.article', article);
+display('api::category.category', category);
+display('api::account.account', account);
+// ^ ✅
+
+display('api::article.article', category);
+// ^ Error: "category" is not assignable to parameter of type ContentType<'api::article.article'>
+```
diff --git a/docusaurus/docs/dev-docs/upgrade-tool.md b/docusaurus/docs/dev-docs/upgrade-tool.md
index 98fc1f4d62..1026b24bae 100644
--- a/docusaurus/docs/dev-docs/upgrade-tool.md
+++ b/docusaurus/docs/dev-docs/upgrade-tool.md
@@ -1,7 +1,7 @@
---
title: Upgrade tool
description: The Strapi upgrade tool is a CLI command that helps automatically upgrading to a new Strapi version.
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_next: dev-docs/migration/v4-to-v5/breaking-changes
sidebar_label: Upgrade tool reference
tags:
@@ -55,20 +55,25 @@ Strapi version numbers respect the [semantic versioning](https://semver.org/) co
- The second number is the **minor** version number.
- The third number is the **patch** version number.
-The upgrade tool allows upgrading to a major, minor, or patch version.
+The upgrade tool allows upgrading to a `major`, `minor`, or `patch` version.
-What the upgrade tool does depends on the latest existing version and the command you run.
+Alternatively, you can choose to upgrade to the `latest` available version.
-For instance, if the latest Strapi v4 version is v4.25.9:
+What the upgrade tool does depends on three things:
-| My Strapi application is currently on… | If I run… | My Strapi application will be upgraded to … |
-|----------------------------------------|-----------------------------|--------------------------------------------------------------------------------------------|
-| v4.25.1 | `npx @strapi/upgrade patch` | v4.25.9
(because v4.25.9 is the latest patch version for the v4.25 minor version) |
-| v4.14.1 | `npx @strapi/upgrade minor` | v4.25.9 |
-| v4.14.1 | `npx @strapi/upgrade major` | Nothing.
I first need to run `npx @strapi/upgrade minor` to upgrade to v4.25.9. |
-| v4.25.9 | `npx @strapi/upgrade major` | v5.0.0 |
+- the project Strapi version
+- the latest available version of Strapi
+- the command you run.
+For instance, if the latest Strapi v4 version is v4.25.9, and the latest Strapi v5 version is v5.1.2:
+| My Strapi application is currently on… | If I run… | My Strapi application will be upgraded to … |
+|----------------------------------------|------------------------------|-------------------------------------------------------------------------------------------------|
+| v4.25.1 | `npx @strapi/upgrade patch` | v4.25.9
(because v4.25.9 is the latest patch version for the v4.25 minor version) |
+| v4.14.1 | `npx @strapi/upgrade minor` | v4.25.9 |
+| v4.14.1 | `npx @strapi/upgrade major` | Nothing.
I first need to run `npx @strapi/upgrade minor` to upgrade to v4.25.9. |
+| v4.25.9 | `npx @strapi/upgrade major` | v5.1.2 |
+| v4.14.1 | `npx @strapi/upgrade latest` | v5.1.2
A confirmation prompt appears to make sure the major version bump is intended. |
## Upgrade to a new version
@@ -78,21 +83,23 @@ Before running the upgrade process, make sure you've created a backup of your co
### Upgrade to a major version
-Run the upgrade tool with the `major` parameter to upgrade the project to the next major version of Strapi:
+Run the upgrade tool with the `major` parameter to upgrade the project to the latest release of the next major Strapi version:
```bash
npx @strapi/upgrade major
```
-During the upgrade process, the application dependencies are updated and installed, and the related codemods are executed.
+During the upgrade process, the application dependencies are updated and installed, and the related codemods are executed (if any).
:::note
-If your application is not already running the latest minor and patch version in the current major, the `major` upgrade is prevented, and you will first need to upgrade to the latest [minor.patch](#upgrade-to-a-minor-version) version in the current major version. This means that moving from v4.14.4 to v5.0.0 is a 2-step process because the latest v4 version is v4.16.2.
+If your application is not already running the latest minor and patch version in the current major, the `major` upgrade is prevented, and you will first need to upgrade to the latest [minor.patch](#upgrade-to-a-minor-version) version in the current major version.
+
+This means that moving from v4.14.4 to v5.0.0 is a 2-step process because the latest v4 version is v4.16.2.
:::
### Upgrade to a minor version
-Run the upgrade tool with the `minor` parameter to upgrade the project to the latest minor and patch version of Strapi:
+Run the upgrade tool with the `minor` parameter to upgrade the project to the latest minor and patch version of Strapi for the current major:
```bash
npx @strapi/upgrade minor
@@ -110,6 +117,23 @@ npx @strapi/upgrade patch
During the upgrade process, the project dependencies are updated and installed, and the related codemods are executed (if any).
+### Upgrade to the latest version
+
+Run the upgrade tool with the `latest` parameter to upgrade the project to the latest available version regardless of the current Strapi version:
+
+```bash
+npx @strapi/upgrade latest
+```
+
+During the upgrade process, the project dependencies are updated and installed, and the related codemods are executed (if any).
+
+:::note
+If a `major` version upgrade is detected, the upgrade tool displays a confirmation prompt to make sure the change is
+intended.
+
+In the scenario where the major bump isn't the desired option, see [the minor upgrade](#upgrade-to-a-minor-version).
+:::
+
## Run codemods only
Run the upgrade tool with the `codemods` parameter to execute a utility that allows selecting the codemods to be executed. With this command, only the codemods are run, the dependencies are not updated nor installed.
@@ -136,20 +160,20 @@ npx @strapi/upgrade codemods run 5.0.0-strapi-codemod-uid
The `npx @strapi/upgrade [major|minor|patch]` commands can accept the following options:
-| Option | Description | Default |
-| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------|----------|
-| [`-n, --dry`](#simulate-the-upgrade-without-updating-any-files-dry-run) | [Simulate](#simulate-the-upgrade-without-updating-any-files-dry-run) the upgrade without updating any files | false |
-| [`-d, --debug`](#get-detailed-debugging-information) | Get [more logs](#get-detailed-debugging-information) in debug mode | false |
-| [`-s, --silent`](#execute-the-upgrade-silently) | [Don't log anything](#execute-the-upgrade-silently) | false |
-| [`-p, --project-path `](#select-a-path-for-the-strapi-application-folder) | [Path](#select-a-path-for-the-strapi-application-folder) to the Strapi project | - |
-| [`-y, --yes`](#answer-yes-to-every-prompt) | Automatically [answer "yes"](#answer-yes-to-every-prompt) to every prompt | false |
+| Option | Description | Default |
+|-----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------|
+| [`-n, --dry`](#simulate-the-upgrade-without-updating-any-files-dry-run) | [Simulate](#simulate-the-upgrade-without-updating-any-files-dry-run) the upgrade without updating any files | false |
+| [`-d, --debug`](#get-detailed-debugging-information) | Get [more logs](#get-detailed-debugging-information) in debug mode | false |
+| [`-s, --silent`](#execute-the-upgrade-silently) | [Don't log anything](#execute-the-upgrade-silently) | false |
+| [`-p, --project-path `](#select-a-path-for-the-strapi-application-folder) | [Path](#select-a-path-for-the-strapi-application-folder) to the Strapi project | - |
+| [`-y, --yes`](#answer-yes-to-every-prompt) | Automatically [answer "yes"](#answer-yes-to-every-prompt) to every prompt | false |
-The following options can be run either with the `npx @strapi/upgrade` command alone or with the `npx @strapi/upgrade [major|minor|patch]` commands:
+The following options can be run either with the `npx @strapi/upgrade` command alone or with the `npx @strapi/upgrade [major|minor|patch|latest]` commands:
-| Option | Description |
-| ------------------------------------------------------------------------ | ---------------------------------------------------------------- |
-| [`-V, --version`](#get-the-current-version) | Output the [version number](#get-the-current-version) |
-| [`-h, --help`](#get-help) | [Print](#get-help) command line options |
+| Option | Description |
+|---------------------------------------------|-------------------------------------------------------|
+| [`-V, --version`](#get-the-current-version) | Output the [version number](#get-the-current-version) |
+| [`-h, --help`](#get-help) | [Print](#get-help) command line options |
### Simulate the upgrade without updating any files (dry run)
@@ -161,6 +185,7 @@ Examples:
npx @strapi/upgrade major --dry
npx @strapi/upgrade minor --dry
npx @strapi/upgrade patch --dry
+npx @strapi/upgrade latest --dry
```
### Select a path for the Strapi application folder
@@ -226,9 +251,10 @@ Options:
-h, --help Print command line options
Commands:
- major [options] Upgrade to the next available major version of Strapi
+ major [options] Upgrade to ...
minor [options] Upgrade to ...
patch [options] Upgrade to ...
+ latest [options] Upgrade to ...
help [command] Print options for a specific command
```
diff --git a/docusaurus/docs/dev-docs/upgrades.md b/docusaurus/docs/dev-docs/upgrades.md
index be88a73b6a..54c754ea8f 100644
--- a/docusaurus/docs/dev-docs/upgrades.md
+++ b/docusaurus/docs/dev-docs/upgrades.md
@@ -1,7 +1,7 @@
---
title: Upgrades
description: Learn more about Strapi 5's upgrade process
-displayed_sidebar: cmsSidebar
+displayed_sidebar: devDocsSidebar
pagination_prev: dev-docs/plugins
pagination_next: dev-docs/upgrade-tool
tags:
diff --git a/docusaurus/docs/dev-docs/whats-new.md b/docusaurus/docs/dev-docs/whats-new.md
index 46cf720f47..7eb55d521b 100644
--- a/docusaurus/docs/dev-docs/whats-new.md
+++ b/docusaurus/docs/dev-docs/whats-new.md
@@ -13,24 +13,24 @@ tags:
Strapi 5 brings many new features and improvements, and this page quickly highlights the most important documentation changes.
-🧑🎨 The **[Draft & Publish](/user-docs/content-manager/saving-and-publishing-content)** feature has been fully reworked. When Draft & Publish is enabled, the Content Manager edit view shows 2 different tabs, one for the draft version and one for the published version, and both can handle different content.
+ The **[Draft & Publish](/user-docs/content-manager/saving-and-publishing-content)** feature has been fully reworked. When Draft & Publish is enabled, the Content Manager edit view shows 2 different tabs, one for the draft version and one for the published version, and both can handle different content.
-🧙♀️ The new **[Content History](/user-docs/content-manager/working-with-content-history)** feature allows you to view and restore previous versions of your content from the Content Manager.
+ The new **[Content History](/user-docs/content-manager/working-with-content-history)** feature allows you to view and restore previous versions of your content from the Content Manager.
-🧑🏫 Strapi 5 now use **[documents](/dev-docs/api/document)** and introduces a new **[Document Service API](/dev-docs/api/document-service)** to replace the Entity Service API from v4, leveraging the new Draft & Publish system and paving the way for more upcoming features.
+ The new **[Preview](/user-docs/content-manager/previewing-content)** feature allows you to preview your content in your front end application directly from Strapi's admin panel.
-🕵️ The **[REST API](/dev-docs/api/rest)** and **[GraphQL API](/dev-docs/api/graphql)** have been updated, with a simplified response data format for both and partial support for Relay-style queries for GraphQL.
+ Strapi 5 now use **[documents](/dev-docs/api/document)** and introduces a new **[Document Service API](/dev-docs/api/document-service)** to replace the Entity Service API from v4, leveraging the new Draft & Publish system and paving the way for more upcoming features.
-👩🚀 The **[Plugin SDK](/dev-docs/plugins/development/plugin-sdk)** is a new CLI tool that helps you develop and publish Strapi plugins.
+ The **[REST API](/dev-docs/api/rest)** and **[GraphQL API](/dev-docs/api/graphql)** have been updated, with a simplified response data format for both and partial support for Relay-style queries for GraphQL.
-🦾 Another whole new CLI **[upgrade tool](/dev-docs/upgrade-tool)** will help you migrate to any patch, minor, and major version of Strapi, automating most of the common tasks through codemods.
+ The **[Plugin SDK](/dev-docs/plugins/development/plugin-sdk)** is a new CLI tool that helps you develop and publish Strapi plugins.
-👷 Also, we have some resources ready to help you **[upgrade to Strapi 5](/dev-docs/migration/v4-to-v5/introduction-and-faq)**, including a [step-by-step guide](/dev-docs/migration/v4-to-v5/step-by-step), a list of [breaking changes](/dev-docs/migration/v4-to-v5/breaking-changes) and [specific resources](/dev-docs/migration/v4-to-v5/additional-resources/introduction) to read for when you will consider upgrading to Strapi 5.
+ Another whole new CLI **[upgrade tool](/dev-docs/upgrade-tool)** will help you migrate to any patch, minor, and major version of Strapi, automating most of the common tasks through codemods.
-👀 There are much more content updates: new or updated pages are identified in the table of contents with or badges.
+ Also, we have some resources ready to help you **[upgrade to Strapi 5](/dev-docs/migration/v4-to-v5/introduction-and-faq)**, including a [step-by-step guide](/dev-docs/migration/v4-to-v5/step-by-step), a list of [breaking changes](/dev-docs/migration/v4-to-v5/breaking-changes) and [specific resources](/dev-docs/migration/v4-to-v5/additional-resources/introduction) to read for when you will consider upgrading to Strapi 5.
-🏷️ We introduced a new **tagging system** to provide another layer of information architecture. Tags can be found at the bottom of each page. Clicking on a tag will point you to an index page listing all pages with the same tag. The list of all available tags is visible by visiting the [/tags](/tags) page.
+ We introduced a new **tagging system** to provide another layer of information architecture. Tags can be found at the bottom of each page. Clicking on a tag will point you to an index page listing all pages with the same tag. The list of all available tags is visible by visiting the [/tags](/tags) page.
-➕ You will also soon find more **official guides** and more references to **external resources** (contributor documentation, design system documentation, and blog articles) throughout the docs pages.
+ You will also soon find more **official guides** and more references to **external resources** (contributor documentation, design system documentation, and blog articles) throughout the docs pages.
-🤖 Also, last but not least, you might have noticed that the search bar in the top navigation bar now combines 2 buttons: the left button, **🔎 Search**, triggers a regular search, while the right part is our new AI-based chatbot! Click **Ask AI** to ask your questions. The chatbot keeps the context of previous answers, so you can ask follow-up questions as long as you don't close the chatbot window.
+ Also, last but not least, you might have noticed that the search bar now sits in the left sidebar and combines 2 buttons: the left button, ** Search**, triggers a regular search, while the right part is our new AI-based chatbot! Click ** Ask AI** to ask your questions. The chatbot keeps the context of previous answers, so you can ask follow-up questions as long as you don't close the chatbot window.
diff --git a/docusaurus/docs/release-notes.md b/docusaurus/docs/release-notes.md
index 570ab20254..6d403947fa 100644
--- a/docusaurus/docs/release-notes.md
+++ b/docusaurus/docs/release-notes.md
@@ -1,6 +1,7 @@
---
title: Release notes
description: Learn what has changed with each version of the Strapi 5 documentation, with links to GitHub pull requests for more information.
+toc_max_heading_level: 2
custom_edit_url: null
---
@@ -9,7 +10,7 @@ custom_edit_url: null
This page lists all the Strapi Docs version numbers and their corresponding updates.
-🧐 Strapi Docs version numbers explained:
+ Strapi Docs version numbers explained:
The **Strapi Documentation** (Strapi Docs) at [docs.strapi.io](https://docs.strapi.io) **always documents the latest version of Strapi (CMS and Cloud) products**.
@@ -18,22 +19,511 @@ Since Strapi Docs version 5.0.0, the **docs' version number is independent from
Strapi Docs now follow the **[semantic versioning](https://semver.org/)** philosophy, but adapted to docs:
- **Major version** (6.0.0, 7.0.0…): A **significant rewrite** of the docs (content or framework). This may impact the user experience, redesign the site, or break old links (redirections are handled, but broken links can be [reported](https://github.com/strapi/documentation/issues/new/choose)).
-- **Minor version** (5.1.0, 5.2.0…): **New Strapi features or improvements** to the docs (e.g., new components or tools).
+- **Minor version** (5.1.0, 5.2.0…): **New Strapi features** or improvements to the docs (e.g., new components or tools).
- **Patch version** (5.1.1, 5.1.2…): **Content updates**, including improvement or extension of existing pages, code examples fixes, and typos.
New versions (minor or patch) are generally released weekly, on Wednesdays.
+
+## 5.5.2
+
+### Chore, fixes, typos, and other improvements
+
+#### Dev Docs
+- [Add graphQL landingPage configuration and update Apollo playground to sandbox](https://github.com/strapi/documentation/pull/2343)
+- [Add the --verbose option to the data transfer command description](https://github.com/strapi/documentation/pull/2352)
+- [Removing the note about unmodified fields on the update](https://github.com/strapi/documentation/pull/2351)
+- [Fix typo in admonition](https://github.com/strapi/documentation/pull/2349)
+- [Fix Document Service API example typo](https://github.com/strapi/documentation/pull/2348)
+
+#### Strapi Cloud
+- [Update Cloud backups (restoration timestamp)](https://github.com/strapi/documentation/pull/2346)
+- [Add the SSO badge for the new, paid add-on](https://github.com/strapi/documentation/pull/2341)
+- [Update text for add environment button](https://github.com/strapi/documentation/pull/2299)
+
+#### Repository
+- [Add Amplitude's browser SDK and web experiment for future A/B testing](https://github.com/strapi/documentation/pull/2345)
+
+***
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+## 5.5.1
+### Chore, fixes, typos, and other improvements
+
+#### User Guide
+- [Update User Guide intro. for stable new homepage](https://github.com/strapi/documentation/pull/2338)
+
+#### Dev Docs
+- [Fix typo in react-router-dom-6.md](https://github.com/strapi/documentation/pull/2337)
+- [Use yarn/npm tabs in Strapi CLI examples](https://github.com/strapi/documentation/pull/2332)
+
+#### Strapi Cloud
+- [Remove account preferences section from cloud docs](https://github.com/strapi/documentation/pull/2333)
+
+
+***
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+## 5.5.0
+
+ The Strapi Docs website now has a brand new design! We hope you like it as much as we loved creating it.
+Please feel free to [share your feedback](https://forms.gle/9NM8npMGoTkYetxGA).
+
+### Updated content
+
+#### User Guide
+- [Mention new admin panel homepage and update screenshots](https://github.com/strapi/documentation/pull/2322)
+
+### Chore, fixes, typos, and other improvements
+
+#### Dev Docs
+- [fix locale prerequisites](https://github.com/strapi/documentation/pull/2320)
+- [fix wrong import](https://github.com/strapi/documentation/pull/2319)
+- [Fix SDK plugin init command example in the SDK reference](https://github.com/strapi/documentation/pull/2318)
+- [SDK beta callout](https://github.com/strapi/documentation/pull/2317)
+
+#### Strapi Cloud
+- [Add section about importing env vars](https://github.com/strapi/documentation/pull/2326)
+- [Adding notes about GitLab groups](https://github.com/strapi/documentation/pull/2323)
+
+#### Repository
+- [Update docs content for Preview switching from beta to stable](https://github.com/strapi/documentation/pull/2325)
+
+***
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+## 5.4.0
+### New content
+
+#### Repository
+- [First iteration of Growth plan](https://github.com/strapi/documentation/pull/2303)
+
+### Chore, fixes, typos, and other improvements
+
+#### Dev Docs
+- [Add a cross-link to the "commonly asked questions" about Strapi 5 article from the blog](https://github.com/strapi/documentation/pull/2313)
+- [Add watchIgnoreFiles demo](https://github.com/strapi/documentation/pull/2312)
+- [Fix unit testing docs for Strapi 5](https://github.com/strapi/documentation/pull/2308)
+- [Mention Preview is under a feature flag](https://github.com/strapi/documentation/pull/2307)
+
+***
+
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+## 5.3.0
+
+### New content
+
+#### Dev Docs
+- [Setting up the Preview feature](https://github.com/strapi/documentation/pull/2295)
+
+#### User Guide
+- [Previewing content in the Content Manager](https://github.com/strapi/documentation/pull/2295)
+
+### Updated content
+
+#### Strapi Cloud
+- [Rename a project](https://github.com/strapi/documentation/pull/2300)
+
+### Chore, fixes, typos, and other improvements
+
+#### Dev Docs
+- [Update cross-link to U&P plugin from dev docs routes documentation](https://github.com/strapi/documentation/pull/2305)
+
+#### Strapi Cloud
+- [Update Cloud plans screenshot](https://github.com/strapi/documentation/pull/2304)
+
+***
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+## 5.2.2
+
+### Chore, fixes, typos, and other improvements
+
+#### Dev Docs
+
+- [Collapse prerequisites and display step 1 in Quick Start Guide](https://github.com/strapi/documentation/pull/2296)
+
+#### Strapi Cloud
+- [Design system v2 and new header in cloud docs](https://github.com/strapi/documentation/pull/2298)
+- [Deleted old cloud assets](https://github.com/strapi/documentation/pull/2297)
+- [Add restoration timestamp to docs and ressources](https://github.com/strapi/documentation/pull/2292)
+
+***
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+
+## 5.2.1
+
+### Updated content
+
+- [Add `strapi cloud environment link` to Cloud CLI](https://github.com/strapi/documentation/pull/2282)
+- [Add new Cloud regions](https://github.com/strapi/documentation/pull/2290)
+
+### Chore, fixes, typos, and other improvements
+
+#### Dev Docs
+- [Add useTypescriptMigrations](https://github.com/strapi/documentation/pull/2283)
+- [Fix typo in retro-compatibility flag value](https://github.com/strapi/documentation/pull/2294)
+- [Fix typo in example code for injectComponent in Admin Panel API docs ](https://github.com/strapi/documentation/pull/2287)
+- [Fix outdated mention of Gold plan in SSO docs](https://github.com/strapi/documentation/pull/2286)
+- [Fix locale param. example in Interactive Query Builder](https://github.com/strapi/documentation/pull/2285)
+- [Fix discardDraft() Document Service API example](https://github.com/strapi/documentation/pull/2284)
+
+#### Strapi Cloud
+- [Update credit cards handling](https://github.com/strapi/documentation/pull/2262)
+
+#### Repository
+- [Add release notes script](https://github.com/strapi/documentation/pull/2289)
+
+***
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+
+## 5.2.0
+
+### New content
+
+#### Dev Docs
+
+- [Add WIP API Reference and Guides for TypeScript](https://github.com/strapi/documentation/pull/2266)
+
+### Updated content
+
+#### Dev Docs
+
+- [Add Knex Config function support](https://github.com/strapi/documentation/pull/2252)
+
+#### User Guide
+
+- [Integration between the Releases and Review Workflows features](https://github.com/strapi/documentation/pull/2273)
+
+### Chore, fixes, typos, and other improvements
+
+#### Cloud
+
+- [Minor Cloud Docs changes](https://github.com/strapi/documentation/pull/2264)
+- [Remove Strapi 5 warning for Cloud in FAQ](https://github.com/strapi/documentation/pull/2272)
+- [Move custom cloud provider config warnings higher](https://github.com/strapi/documentation/pull/2278)
+
+#### Dev Docs
+
+- [Fix example request for update method in Document Service API](https://github.com/strapi/documentation/pull/2275)
+
+#### Repo
+
+- [Align navbar search box with 100% width](https://github.com/strapi/documentation/pull/2280)
+
+***
+
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+
+
+## 5.1.3
+
+### Chore, fixes, typos, and other improvements
+
+- [Improve instructions for upgrading to Apollo v4](https://github.com/strapi/documentation/pull/2271)
+- [Fix code example in breaking change for new response format](https://github.com/strapi/documentation/pull/2270)
+- [Update names of removed mutations in GraphQL breaking change](https://github.com/strapi/documentation/pull/2269)
+- [Fix typo in a snippet used in Cloud docs](https://github.com/strapi/documentation/pull/2268)
+
+***
+
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+
+
+## 5.1.2
+
+### Updated content
+
+#### Dev Docs
+
+- [Add support for 'latest' parameter in the upgrade tool](https://github.com/strapi/documentation/pull/2259)
+- [Add example code and resulting screenshot for theme extension](https://github.com/strapi/documentation/pull/2261)
+
+### Chore, fixes, typos, and other improvements
+
+#### Strapi Cloud
+
+- [Update cloud deployment logs screen](https://github.com/strapi/documentation/pull/2263)
+- [Update confirmation modal text in Cloud Update Repository](https://github.com/strapi/documentation/pull/2258)
+
+#### Repository
+
+- [Restore bigger font-size for categories title in sidebar](https://github.com/strapi/documentation/pull/2260)
+
+***
+
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+
+
+## 5.1.1
+
+### Updated content
+
+#### Strapi Cloud
+
+* [List environments with Cloud CLI](https://github.com/strapi/documentation/pull/2239)
+
+#### Dev Docs
+
+* [`publicationAt` breaking change](https://github.com/strapi/documentation/pull/2249)
+
+### Chore, fixes, typos, and other improvements
+
+#### Strapi Cloud
+
+* [Update wording on purchasable extra Seats](https://github.com/strapi/documentation/pull/2238)
+
+#### Dev Docs
+
+* [Clarify sorting for relational fields in the Content Manager list view](https://github.com/strapi/documentation/pull/2224)
+* [Fix typo for `v4CompatibilityMode` flag](https://github.com/strapi/documentation/pull/2257)
+* [Fix step-by-step v4 → v5 migration (v4CompatibilityMode flag)](https://github.com/strapi/documentation/pull/2255)
+* [Update environment declaration in Docker guide](https://github.com/strapi/documentation/pull/2253)
+* [Fix createStrapi method in TypeScript development documentation](https://github.com/strapi/documentation/pull/2248)
+* [Fix links in the REST API documentation](https://github.com/strapi/documentation/pull/2247)
+* [Fix CheckPagePermissions code example in helper-plugin deprecation guide](https://github.com/strapi/documentation/pull/2244)
+* [Fix typo for init command in Plugin SDK](https://github.com/strapi/documentation/pull/2243)
+* [Add link to ms package for examples for JWT expiresIn](https://github.com/strapi/documentation/pull/2242)
+
+#### Repository
+
+* [Update LICENSE](https://github.com/strapi/documentation/pull/2251)
+
+
+***
+
+This release was made possible thanks to the following contributors. Thank you! 🫶
+
+
+
+
+
## 5.1.0
-### ✨ New content
+### New content
#### Cloud Docs
* [Multi-Environments](https://github.com/strapi/documentation/pull/2229)
-### 🖌 Updated content
+### Updated content
#### User Guide
@@ -43,7 +533,7 @@ New versions (minor or patch) are generally released weekly, on Wednesdays.
* [Clarify helper-plugin migration guide](https://github.com/strapi/documentation/pull/2230)
-### 🧹 Chore, fixes, typos, and other improvements
+### Chore, fixes, typos, and other improvements
#### Dev Docs
@@ -91,7 +581,7 @@ This release was made possible thanks to the following contributors. Thank you!
_The following is an extensive list of all the pull requests that were merged since we started working on Strapi 5 documentation. For a quicker tour, please refer to the [What's new page](/dev-docs/whats-new)._
-### ✨ New content
+### New content
#### Dev Docs
@@ -150,7 +640,7 @@ _The following is an extensive list of all the pull requests that were merged si
* [Tagging system](https://github.com/strapi/documentation/pull/2076)
* [New homepage](https://github.com/strapi/documentation/pull/2087)
-### 🖌 Updated content
+### Updated content
#### Dev Docs
@@ -196,7 +686,7 @@ _The following is an extensive list of all the pull requests that were merged si
* [Make main categories clickable in breadcrumbs](https://github.com/strapi/documentation/pull/2198)
-### 🧹 Chore, fixes, typos, and other improvements
+### Chore, fixes, typos, and other improvements
* [AI bot improvements](https://github.com/strapi/documentation/pull/2142)
diff --git a/docusaurus/docs/snippets/backend-custom-intro-crosslink.md b/docusaurus/docs/snippets/backend-custom-intro-crosslink.md
index fcc3619b35..c8c707f2e7 100644
--- a/docusaurus/docs/snippets/backend-custom-intro-crosslink.md
+++ b/docusaurus/docs/snippets/backend-custom-intro-crosslink.md
@@ -1 +1 @@
-For a general overview and understanding of the Strapi backend elements, please refer to the backend customization [introduction](/dev-docs/backend-customization) and [diagram](/dev-docs/backend-customization#interactive-diagram).
+For a general overview and understanding of the Strapi backend elements, please refer to the backend customization [introduction](/dev-docs/backend-customization) and [diagram](/dev-docs/backend-customization#diagram).
diff --git a/docusaurus/docs/snippets/invoices-statuses.md b/docusaurus/docs/snippets/invoices-statuses.md
index 8d3aac62e3..02bfd25484 100644
--- a/docusaurus/docs/snippets/invoices-statuses.md
+++ b/docusaurus/docs/snippets/invoices-statuses.md
@@ -2,10 +2,10 @@ Invoices can have any of the following statuses:
- Paid: the payment has been done and the invoice is available, no additional action is required.
- Payment pending: the invoice is not complete or validated yet
-- Payment due: the paiement didn't go through and needs to be fixed
+- Payment due: the payment didn't go through and needs to be fixed
- Not paid: the payment has failed and won't automatically be retried
- Voided: the invoice has been cancelled.
:::tip
-Click the  icon to download an invoice.
-:::
\ No newline at end of file
+Click the icon to download an invoice.
+:::
diff --git a/docusaurus/docs/user-docs/content-manager/adding-content-to-releases.md b/docusaurus/docs/user-docs/content-manager/adding-content-to-releases.md
index 1e718cea7c..ab6d801c82 100644
--- a/docusaurus/docs/user-docs/content-manager/adding-content-to-releases.md
+++ b/docusaurus/docs/user-docs/content-manager/adding-content-to-releases.md
@@ -4,14 +4,14 @@ description: Instructions to include content in a release
displayed_sidebar: userDocsSidebar
tags:
- admin panel
+- Growth feature
- Enterprise feature
- releases feature
- Strapi Cloud
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
-# Including content in a release {#add-to-release}
+# Including content in a release {#add-to-release}
+
Using the [Releases](/user-docs/releases/introduction) feature, you can group several entries to publish them altogether. Adding entries to a release is done from the Content Manager. You can also remove an entry from a release while updating the entry.
@@ -45,8 +45,8 @@ An entry can be added to a [release](/user-docs/releases/introduction) while edi
To add an entry to a release:
-1. Click on  in the _Entry_ area on the right side of the interface.
-2. In the list, click on the  **Add to release** button.
+1. Click on in the _Entry_ area on the right side of the interface.
+2. In the list, click on the **Add to release** button.
2. Select which release to add this entry to.
3. Click on the **Publish** or **Unpublish** button depending on whether you want the entry to be published or unpublished when the release itself is published, then click **Continue**.
@@ -62,7 +62,7 @@ An entry can be removed from a [release](/user-docs/releases/introduction) while
To remove an entry from a release:
-1. In the *Releases* box in the right sidebar, click on  below the name of the release.
+1. In the *Releases* box in the right sidebar, click on below the name of the release.
2. Click the **Remove from release** button.
diff --git a/docusaurus/docs/user-docs/content-manager/configuring-view-of-content-type.md b/docusaurus/docs/user-docs/content-manager/configuring-view-of-content-type.md
index fa5d40f619..4d9ad56d70 100644
--- a/docusaurus/docs/user-docs/content-manager/configuring-view-of-content-type.md
+++ b/docusaurus/docs/user-docs/content-manager/configuring-view-of-content-type.md
@@ -10,15 +10,13 @@ tags:
- Content-type edit view
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Configuring the views of a content-type
Depending on their type, content-types can be divided into 2 interfaces: the list view and the edit view. Both interfaces can be configured.
## Configuring the list view
-On the right side of the list view interface, right above the table, a settings button  is displayed. It allows to access the configurations that can be set for the list view of your collection type, and to choose which fields to display in the table.
+On the right side of the list view interface, right above the table, a settings button is displayed. It allows to access the configurations that can be set for the list view of your collection type, and to choose which fields to display in the table.
:::note
The configurations only apply to the list view of the collection type from which the settings are accessed (i.e. disabling the filters or search options for a collection type will not automatically also disable these same options for all other collection types).
@@ -37,7 +35,7 @@ Note also that the explanations below explain how to permanently configure which
### List view settings
-1. In the list view of your collection type, click on the settings button  then  **Configure the view** to be redirected to the list view configuration interface.
+1. In the list view of your collection type, click on the settings button then **Configure the view** to be redirected to the list view configuration interface.
2. In the Settings area, define your chosen new settings:
| Setting name | Instructions |
@@ -53,12 +51,12 @@ Note also that the explanations below explain how to permanently configure which
### List view display
-1. In the list view of your collection type, click on the settings button  then  **Configure the view** to be redirected to the list view configuration interface.
+1. In the list view of your collection type, click on the settings button then **Configure the view** to be redirected to the list view configuration interface.
2. In the View area, define what fields to display in the list view table, and in what order:
- - Click the add button  to add a new field.
- - Click the delete button  to remove a field.
- - Click the reorder button  and drag and drop it to the place you want it to be displayed among the other fields.
-3. Click the edit button  to access its available own settings:
+ - Click the add button to add a new field.
+ - Click the delete button to remove a field.
+ - Click the reorder button and drag and drop it to the place you want it to be displayed among the other fields.
+3. Click the edit button to access its available own settings:
| Setting name | Instructions |
| ------------------------- | ------------------------------------------------------------------------- |
@@ -74,15 +72,13 @@ Relational fields can also be displayed in the list view. There are however some
- Only first-level fields can be displayed (i.e. fields from the relation of a relation can't be displayed).
- If the displayed field contains more than one value, not all its values will be displayed, but a counter indicating the number of values. You can hover this counter to see a tooltip indicating the first 10 values of the relational field.
-Note also that relational fields have a couple limitations when it comes to sorting options:
+Note also that relational fields cannot be set as default sort.
-- Sorting cannot be enabled for relational fields which display several fields.
-- Relational fields cannot be set as default sort.
:::
## Configuring the edit view
-In the edit view of a content-type, a  button is displayed, which leads to the  **Configure the view** button. It allows to access the configurations that can be set for the edit view of the content-type, such as the entry title, and the display of the fields of the content-type, including the relational ones.
+In the edit view of a content-type, a button is displayed, which leads to the **Configure the view** button. It allows to access the configurations that can be set for the edit view of the content-type, such as the entry title, and the display of the fields of the content-type, including the relational ones.
button then **Configure the view**.
2. In the Settings area, define your chosen new settings:
| Setting name | Instructions |
@@ -105,12 +101,12 @@ In the edit view of a content-type, a  button then  **Configure the view**.
+1. In the edit view of your content-type, click on the button then **Configure the view**.
2. In the View area, define what fields (including relational fields) to display in the list view table, in what order and what size:
- - Click the  **Insert another field** button to add a new field.
- - Click the delete button  to remove a field.
- - Click the reorder button  and drag and drop it to the place you want it to be displayed among the other fields.
-3. Click the edit button  of a field to access its available settings:
+ - Click the **Insert another field** button to add a new field.
+ - Click the delete button to remove a field.
+ - Click the reorder button and drag and drop it to the place you want it to be displayed among the other fields.
+3. Click the edit button of a field to access its available settings:
| Setting name | Instructions |
| --------------- | ----------------------------------------------------------------------------------------- |
diff --git a/docusaurus/docs/user-docs/content-manager/introduction-to-content-manager.md b/docusaurus/docs/user-docs/content-manager/introduction-to-content-manager.md
index ed2cbc15a1..c83bc60b0e 100644
--- a/docusaurus/docs/user-docs/content-manager/introduction-to-content-manager.md
+++ b/docusaurus/docs/user-docs/content-manager/introduction-to-content-manager.md
@@ -13,24 +13,23 @@ tags:
- introduction
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ScreenshotNumberReference from '/src/components/ScreenshotNumberReference.jsx';
-# Introduction to the Content Manager
+# Introduction to the Content Manager
The Content Manager is a core feature of Strapi. It is always enabled by default and cannot be disabled. It is accessible both when the application is in a development and production environment.
-The Content Manager is accessible from  *Content Manager* in the main navigation, which opens a sub navigation displaying 2 categories: _Collection types_ and _Single types_. Each category contains the available collection and single content-types which were created beforehand using the [Content-type Builder](/user-docs/content-type-builder/introduction-to-content-types-builder.md). From these 2 categories, administrators can create, manage, and publish content.
+The Content Manager is accessible from *Content Manager* in the main navigation, which opens a sub navigation displaying 2 categories: _Collection types_ and _Single types_. Each category contains the available collection and single content-types which were created beforehand using the [Content-type Builder](/user-docs/content-type-builder/introduction-to-content-types-builder.md). From these 2 categories, administrators can create, manage, and publish content.
-:::tip
-Click the search icon  in the sub navigation to use a text search and find one of your content-types more quickly!
+:::tip
+Click the search icon in the sub navigation to use a text search and find one of your content-types more quickly!
:::
-## Collection types {#collection-types}
+## Collection types {#collection-types}
-The _Collection types_ category of the Content Manager displays the list of available collection types which are accessible from the  Content Manager sub navigation.
+The _Collection types_ category of the Content Manager displays the list of available collection types which are accessible from the Content Manager sub navigation.
-For each available collection type multiple entries can be created which is why each collection type is divided into 2 interfaces: the list view and the edit view (see [Writing content](writing-content.md)).
+For each available collection type multiple entries can be created which is why each collection type is divided into 2 interfaces: the list view and the edit view (see [Writing content](writing-content.md)).
The list view of a collection type displays all entries created for that collection type.
@@ -42,16 +41,16 @@ The list view of a collection type displays all entries created for that collect
}}
/>
-From the list view, it is possible to:
+From the list view, it is possible to:
- create a new entry ,
- make a textual search or set filters to find specific entries,
- if [Internationalization (i18n)](/user-docs/plugins/strapi-plugins#i18n) is enabled, filter by locale to display only the entries [translated](/user-docs/content-manager/translating-content) in a chosen locale ,
- configure the fields displayed in the table of the list view ,
- if [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content) is enabled, see the status of each entry ,
-- perform actions on a specific entry by clicking on  at the end of the row:
- - edit  (see [Writing content](/user-docs/content-manager/writing-content.md)), duplicate , or delete  (see [Deleting content](/user-docs/content-manager/saving-and-publishing-content.md#deleting-content)) the entry,
- - if [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content) is enabled,  unpublish the entry,  or discard its changes,
+- perform actions on a specific entry by clicking on at the end of the row:
+ - edit (see [Writing content](/user-docs/content-manager/writing-content.md)), duplicate , or delete (see [Deleting content](/user-docs/content-manager/saving-and-publishing-content.md#deleting-content)) the entry,
+ - if [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content) is enabled, unpublish the entry, or discard its changes,
- if [Internationalization (i18n)](/user-docs/plugins/strapi-plugins#i18n) is enabled,  delete a given locale,
- select multiple entries to simultaneously [publish, unpublish](/user-docs/content-manager/saving-and-publishing-content#bulk-publishing-and-unpublishing), or [delete](/user-docs/content-manager/saving-and-publishing-content.md#deleting-content).
@@ -59,9 +58,9 @@ From the list view, it is possible to:
Sorting can be enabled for most fields displayed in the list view table (see [Configuring the views of a content-type](../content-manager/configuring-view-of-content-type.md)). Click on a field name, in the header of the table, to sort on that field.
:::
-### Filtering entries {#filtering-entries}
+### Filtering entries {#filtering-entries}
-Right above the list view table, on the left side of the interface, a  **Filters** button is displayed. It allows to set one or more condition-based filters, which add to one another (i.e. if you set several conditions, only the entries that match all the conditions will be displayed).
+Right above the list view table, on the left side of the interface, a **Filters** button is displayed. It allows to set one or more condition-based filters, which add to one another (i.e. if you set several conditions, only the entries that match all the conditions will be displayed).
**Filters** button.
2. Click on the 1st drop-down list to choose the field on which the condition will be applied.
3. Click on the 2nd drop-down list to choose the type of condition to apply.
4. Enter the value(s) of the condition in the remaining textbox.
5. Click on the **Add filter** button.
-:::note
-When active, filters are displayed next to the  **Filters** button. They can be removed by clicking on the delete icon .
+:::note
+When active, filters are displayed next to the **Filters** button. They can be removed by clicking on the delete icon .
:::
### Creating a new entry
@@ -95,18 +94,12 @@ New entries are only considered created once some of their content has been writ
### Configuring the table fields
-Above the list view table, on the right, a settings button  is displayed. It allows to temporarily choose which fields to display in the table or to access permanent view settings.
-
-#### Test h4
-
-Above the list view table, on the right, a settings button  is displayed. It allows to temporarily choose which fields to display in the table or to access permanent view settings.
+Above the list view table, on the right, a settings button is displayed. It allows to temporarily choose which fields to display in the table or to access permanent view settings.
-:::note
-Configuring the displayed field of the table in the way detailed below is only temporary: the configurations will be reset as soon as the page is refreshed or when navigating outside the Content Manager. For permanent configurations, go to the list view configuration interface by clicking on the settings button  and clicking on the  **Configure the view** button (see [Configuring the views of a content-type](../content-manager/configuring-view-of-content-type.md)).
+:::note
+Configuring the displayed field of the table in the way detailed below is only temporary: the configurations will be reset as soon as the page is refreshed or when navigating outside the Content Manager. For permanent configurations, go to the list view configuration interface by clicking on the settings button and clicking on the **Configure the view** button (see [Configuring the views of a content-type](../content-manager/configuring-view-of-content-type.md)).
:::
-
-
-To temporarily configure the fields displayed in the table:
+To temporarily configure the fields displayed in the table:
-1. Click on the settings button .
+1. Click on the settings button .
2. Tick the boxes associated with the field you want to be displayed in the table.
3. Untick the boxes associated with the fields you do not want to be displayed in the table.
-:::tip
+:::tip
Relational fields can also be displayed in the list view. Please refer to [Configuring the views of a content-type](../content-manager/configuring-view-of-content-type.md) for more information on their specificities.
:::
-## Single types {#single-types}
+## Single types {#single-types}
-The _Single types_ category of the Content Manager displays the list of available single types, which are accessible from the  Content Manager sub navigation.
+The _Single types_ category of the Content Manager displays the list of available single types, which are accessible from the Content Manager sub navigation.
Unlike collection types which have multiple entries, single types are not created for multiple uses. In other words, there can only be one default entry per available single type. There is therefore no list view in the Single types category.
diff --git a/docusaurus/docs/user-docs/content-manager/managing-relational-fields.md b/docusaurus/docs/user-docs/content-manager/managing-relational-fields.md
index 6252315303..ace12b34a5 100644
--- a/docusaurus/docs/user-docs/content-manager/managing-relational-fields.md
+++ b/docusaurus/docs/user-docs/content-manager/managing-relational-fields.md
@@ -10,8 +10,6 @@ tags:
- one-choice relational fields
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Managing relational fields
Relation-type fields added to a content-type from the Content-type Builder allow establishing a relation with another collection type. These fields are called "relational fields".
@@ -75,7 +73,7 @@ To select the only relevant relational field's entry:
You can click on the name of the selected entry to be redirected to the edit view of the relational field's content type. Make sure you save your page first, to avoid losing your last modifications.
:::
-To remove the entry selected in the drop-down list, click on the delete button .
+To remove the entry selected in the drop-down list, click on the delete button .
## Managing multiple-choice relational fields
@@ -100,6 +98,6 @@ To select the relevant relational field's entries:
All selected entries are listed right below the drop-down list. Click on the name of an entry to be redirected to the edit view of the relational field's content-type. Make sure you save your page first, to avoid losing your last modifications.
:::
-To remove an entry, click on the cross button  in the selected entries list.
+To remove an entry, click on the cross button in the selected entries list.
-Entries from multiple-choice relational fields can be reordered, indicated by a drag button . To move an entry, click and hold it, drag it to the desired position, then release it.
+Entries from multiple-choice relational fields can be reordered, indicated by a drag button . To move an entry, click and hold it, drag it to the desired position, then release it.
diff --git a/docusaurus/docs/user-docs/content-manager/previewing-content.md b/docusaurus/docs/user-docs/content-manager/previewing-content.md
new file mode 100644
index 0000000000..00065e2a53
--- /dev/null
+++ b/docusaurus/docs/user-docs/content-manager/previewing-content.md
@@ -0,0 +1,48 @@
+---
+title: Previewing content
+description: With the Preview feature, you can preview your front-end directly from the Content Manager
+displayedSidebar: userSidebar
+tags:
+- content manager
+- preview
+---
+
+# Previewing content
+
+With the Preview feature, you can preview your front end application directly from Strapi's admin panel. This is helpful to see how updates to your content in the Edit View of the Content Manager will affect the final result.
+
+
+
+
+:::prerequisites
+- The Strapi admin panel user should have read permissions for the content-type.
+- The Preview feature should be configured in the code of the `config/admin` file (see [Developer Docs](/dev-docs/preview)).
+- A front-end application should already be created and running so you can preview it.
+:::
+
+When the Preview feature is properly set up, an **Open preview** button is visible on the right in the Edit View of the Content Manager. Clicking it will display the preview of your content as it will appear in your front-end application, but directly within Strapi's the admin panel:
+
+
+
+
+From the Preview screen, you can:
+
+- click the close button  in the upper left corner to go back to the Edit View of the Content Manager,
+- switch between previewing the draft and the published version (if [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content) is enabled for the content-type),
+- and click the link icon  in the upper right corner to copy the preview link. Depending on the preview tab you are currently viewing, this will either copy the link to the preview of the draft or the published version.
+
+:::note
+In the Edit view of the Content Manager, the Open preview button will be disabled if you have unsaved changes. Save your latest changes and you should be able to preview content again.
+:::
diff --git a/docusaurus/docs/user-docs/content-manager/reviewing-content.md b/docusaurus/docs/user-docs/content-manager/reviewing-content.md
index 4aec74ab59..8541c775bf 100644
--- a/docusaurus/docs/user-docs/content-manager/reviewing-content.md
+++ b/docusaurus/docs/user-docs/content-manager/reviewing-content.md
@@ -7,9 +7,8 @@ tags:
- review workflows
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
-# Reviewing content
+# Reviewing content
+
Using the [Review Workflows](/user-docs/settings/review-workflows) feature, you can manage content throughout the content creation process. In the Content Manager, you can change the review stage of the content from the edit view, and keep moving it between stages as needed. You can also change the assignee of the content, assigning it to a Strapi admin user for review.
diff --git a/docusaurus/docs/user-docs/content-manager/saving-and-publishing-content.md b/docusaurus/docs/user-docs/content-manager/saving-and-publishing-content.md
index 60870c6806..821ed9969d 100644
--- a/docusaurus/docs/user-docs/content-manager/saving-and-publishing-content.md
+++ b/docusaurus/docs/user-docs/content-manager/saving-and-publishing-content.md
@@ -10,8 +10,6 @@ tags:
- unpublishing content
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Saving, publishing and deleting content
Strapi allows you to manage your content throughout its whole lifecycle, whether you are working on its draft version, about to finish it and share it with the world, or wanting to delete it when it's obsolete.
@@ -52,7 +50,7 @@ By default, each newly created content is a draft. Drafts can be modified and sa
Once you made changes to a draft, you have 3 possible options, all available in the _Entry_ box on the right side of the interface:
- **Publish** your document (see [publishing a draft](#publishing-a-draft)),
- **Save** your draft for later retrieval,
-- or discard changes, by clicking on  and choosing  **Discard changes**.
+- or discard changes, by clicking on and choosing **Discard changes**.
### Publishing and unpublishing
@@ -89,11 +87,11 @@ To schedule publication, i.e., convert a draft to a published entry at a given d
Previously published content can be unpublished.
-To unpublish content, from the _Draft_ tab, click on  in the _Entry_ box on the right side of the interface and choose the **Unpublish** button.
+To unpublish content, from the _Draft_ tab, click on in the _Entry_ box on the right side of the interface and choose the **Unpublish** button.
If the draft version of the document contains content different from the published version, you can decide what to do with both content when unpublishing:
-1. From the _Draft_ tab, click on  in the _Entry_ box on the right side of the interface and choose the **Unpublish** button.
+1. From the _Draft_ tab, click on in the _Entry_ box on the right side of the interface and choose the **Unpublish** button.
2. In the Confirmation dialog that opens, you can choose to:
- **Unpublish and keep last draft**, so that all the content you currently have in the _Draft_ tab is preserved, but the all the content from the _Published_ tab is definitely gone
- **Unpublish and replace last draft** to discard any existing content in the _Draft_ tab and replace it with the content of all fields from the _Published_ tab
@@ -131,10 +129,10 @@ To publish several entries at the same time:
2. Click on the **Publish** button located above the header of the table.
3. In the _Publish entries_ dialog, check the list of selected entries and their status:
- -  Ready to publish: the entry can be published
- -  "[field name] is required", "[field name] is too short" or "[field name] is too long": the entry cannot be published because of the issue stated in the red warning message.
+ - Ready to publish: the entry can be published
+ - "[field name] is required", "[field name] is too short" or "[field name] is too long": the entry cannot be published because of the issue stated in the red warning message.
-4. (optional) If some of your entries have a  status, click the  edit buttons to fix the issues until all entries have the  Ready to publish status. Note that you will have to click on the **Refresh** button to update the _Publish entries_ dialog as you fix the various entries issues.
+4. (optional) If some of your entries have a status, click the edit buttons to fix the issues until all entries have the Ready to publish status. Note that you will have to click on the **Refresh** button to update the _Publish entries_ dialog as you fix the various entries issues.
5. Click the **Publish** button.
6. In the confirmation dialog box, confirm your choice by clicking again on the **Publish** button.
@@ -150,11 +148,11 @@ To unpublish several entries at the same time:
You can delete content by deleting any entry of a collection type, or the default entry of a single type.
-1. In the edit view of the entry, click on  at the top right of the interface, and click the **Delete document** button. If Internationalization is enabled for the content-type, you can also choose to delete only the currently selected locale by clicking on the **Delete locale** button.
+1. In the edit view of the entry, click on at the top right of the interface, and click the **Delete document** button. If Internationalization is enabled for the content-type, you can also choose to delete only the currently selected locale by clicking on the **Delete locale** button.
2. In the window that pops up, click on the **Confirm** button to confirm the deletion.
:::tip
-You can delete entries from the list view of a collection type, by clicking on  on the right side of the entry's record in the table, then choosing the  **Delete document** button. If Internationalization is enabled for the content-type, **Delete document** deletes all locales while **Delete locale** only deletes the currently listed locale.
+You can delete entries from the list view of a collection type, by clicking on on the right side of the entry's record in the table, then choosing the **Delete document** button. If Internationalization is enabled for the content-type, **Delete document** deletes all locales while **Delete locale** only deletes the currently listed locale.
:::
diff --git a/docusaurus/docs/user-docs/content-manager/translating-content.md b/docusaurus/docs/user-docs/content-manager/translating-content.md
index 077b22f8d7..bc550a4440 100644
--- a/docusaurus/docs/user-docs/content-manager/translating-content.md
+++ b/docusaurus/docs/user-docs/content-manager/translating-content.md
@@ -12,8 +12,6 @@ tags:
- single type
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Translating content
With the [Internationalization feature](/user-docs/plugins/strapi-plugins#i18n) enabled for a content-type, it is possible to manage content in more than one language, called "locale". To manage content in a specific locale, the latter must be added beforehand through the Internationalization settings (see [Configuring Internationalization locales](../settings/internationalization)).
@@ -49,5 +47,5 @@ To translate content in another locale:
4. Translate your content by filling up your content-type's fields (see [Writing content](writing-content.md)).
:::tip
-Click on the  *Fill in from another locale* button, in the top right corner, for all non relational fields to be filled up with the values of another chosen locale. It can be useful if you do not remember what was the exact content in another locale.
+Click on the *Fill in from another locale* button, in the top right corner, for all non relational fields to be filled up with the values of another chosen locale. It can be useful if you do not remember what was the exact content in another locale.
:::
diff --git a/docusaurus/docs/user-docs/content-manager/working-with-content-history.md b/docusaurus/docs/user-docs/content-manager/working-with-content-history.md
index 9e233562ed..0a9f94ad11 100644
--- a/docusaurus/docs/user-docs/content-manager/working-with-content-history.md
+++ b/docusaurus/docs/user-docs/content-manager/working-with-content-history.md
@@ -7,7 +7,8 @@ tags:
- Content History
---
-# Content History
+# Content History
+
The Content History feature of the Content Manager gives you the ability to browse and restore previous versions of documents created with the Content Manager.
@@ -23,7 +24,7 @@ sources={{
Content History is accessible from the Edit View of any document created with the Content Manager.
-To browse Content History, while editing a document in the Content Manager, click on  at the top right of the interface, and click the  **Content History** button. You will be presented with the Content History view:
+To browse Content History, while editing a document in the Content Manager, click on at the top right of the interface, and click the **Content History** button. You will be presented with the Content History view:
- The sidebar on the right lists the total number of versions available, and for each version, the date and time when the version was created, the user who created it, and whether its status is Draft, Modified, or Published (see [Draft & Publish](/user-docs/content-manager/saving-and-publishing-content#saving--publishing-content) for more information about document statuses).
- The main view on the left lists the fields and their content for the version selected in the sidebar on the right.
@@ -46,7 +47,7 @@ You can choose to restore a previous version of a document. When restoring a ver
To restore a version:
-1. While editing a document in the Content Manager, click on  at the top right of the interface, and click the  **Content History** button.
+1. While editing a document in the Content Manager, click on at the top right of the interface, and click the **Content History** button.
2. Browse the Content History and select a version in the sidebar on the right.
3. Click the **Restore** button.
4. In the _Confirmation_ window, click **Restore**.
diff --git a/docusaurus/docs/user-docs/content-manager/writing-content.md b/docusaurus/docs/user-docs/content-manager/writing-content.md
index 66d589381d..e459441d12 100644
--- a/docusaurus/docs/user-docs/content-manager/writing-content.md
+++ b/docusaurus/docs/user-docs/content-manager/writing-content.md
@@ -39,7 +39,7 @@ If Draft & Publish is enabled for your content-type (it's enabled by default), t
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Text | Write your content in the textbox. |
| Rich text (Markdown) | Write your textual content in the editor, in Markdown. Some basic formatting options (titles, bold, italics, underline) are available in the top bar of the editor to apply to selected text. A **Preview mode/Markdown mode** button to switch between modes is also available.
💡 The box can be expanded by clicking on **Expand** in the bottom bar. It displays side by side, at the same time, the textbox that you can edit and the preview. |
-| Rich text (Blocks) | Write and manage your content in the editor, which automatically renders live all additions/updates. In the Blocks editor, paragraphs behave as blocks of text: hovering on a paragraph will display an icon  on which to click to reorder the content. Options to format or enrich the content are also accessible from the top bar of the editor (basic formatting options, code, links, image etc.).
💡 You can use text formatting keyboard shortcuts in the Blocks editor (e.g. bold, italics, underline, and pasting link). |
+| Rich text (Blocks) | Write and manage your content in the editor, which automatically renders live all additions/updates. In the Blocks editor, paragraphs behave as blocks of text: hovering on a paragraph will display an icon on which to click to reorder the content. Options to format or enrich the content are also accessible from the top bar of the editor (basic formatting options, code, links, image etc.).
💡 You can use text formatting keyboard shortcuts in the Blocks editor (e.g. bold, italics, underline, and pasting link). |
| Number | Write your number in the textbox. Up and down arrows, displayed on the right of the box, allow to increase or decrease the current number indicated in the textbox. |
| Date | 1. Click the date and/or time box. 2. Type the date and time or choose a date using the calendar and/or a time from the list. The calendar view fully supports keyboard-based navigation. |
| Media | 1. Click the media area. 2. Choose an asset from the [Media Library](/user-docs/media-library) or from a [folder](/user-docs/media-library/organizing-assets-with-folders.md) if you created some, or click the **Add more assets** button to add a new file to the Media Library.
💡 It is possible to drag and drop the chosen file in the media area. |
@@ -47,7 +47,7 @@ If Draft & Publish is enabled for your content-type (it's enabled by default), t
| Boolean | Click on **TRUE** or **FALSE**. |
| JSON | Write your content, in JSON format, in the code textbox. |
| Email | Write a complete and valid email address. |
-| Password | Write a password.
💡 Click the  icon, displayed on the right of the box, to show the password. |
+| Password | Write a password.
💡 Click the icon, displayed on the right of the box, to show the password. |
| Enumeration | 1. Click the drop-down list. 2. Choose an entry from the list. |
| UID | Write a unique identifier in the textbox. A "Regenerate" button, displayed on the right of the box, allows automatically generating a UID based on the content type name. |
@@ -84,10 +84,10 @@ Non-repeatable components are a combination of fields that can be used only once
By default, the combination of fields is not directly displayed in the edit view:
-1. Click on the add button  to add the component.
+1. Click on the add button to add the component.
2. Fill in the fields of the component.
-To delete the non-repeatable component, click on the delete button , located in the top right corner of the component area.
+To delete the non-repeatable component, click on the delete button , located in the top right corner of the component area.
#### Repeatable components
@@ -104,14 +104,14 @@ Repeatable components are also a combination of fields, but they allow the creat
To add a new entry and display its combination of fields:
-1. Click on the add button  to add the component.
+1. Click on the add button to add the component.
2. Fill in the fields of the component.
3. (optional) Click on the **Add an entry** button and fill in the fields again.
The repeatable component entries can be reordered or deleted directly in the edit view, using buttons displayed on the right of the entry area.
-- Use the drag & drop button  to reorder entries of your repeatable component.
-- Use the delete button  to delete an entry from your repeatable component.
+- Use the drag & drop button to reorder entries of your repeatable component.
+- Use the delete button to delete an entry from your repeatable component.
:::note
Unlike regular fields, the order of the entries of a repeatable component is important. It should correspond exactly to how end users will read/see the content.
@@ -137,17 +137,17 @@ Dynamic zones are a combination of components, which themselves are composed of
}}
/>
-1. Click on the  **Add a component to [dynamic zone name]** button.
+1. Click on the **Add a component to [dynamic zone name]** button.
2. Choose a component available for the dynamic zone.
3. Fill in the fields of the component.
Dynamic zones' components can also be reordered or deleted directly in the edit view, using buttons displayed in the top right corner of the component area.
-- Use the drag & drop button  to reorder components in your dynamic zone.
-- Use the delete button  to delete a component from your dynamic zone.
+- Use the drag & drop button to reorder components in your dynamic zone.
+- Use the delete button to delete a component from your dynamic zone.
:::tip
-You can also use the keyboard to reorder components: focus the component using Tab, press Space on the drag & drop button  and use the arrow keys to then re-order, pressing Space again to drop the item.
+You can also use the keyboard to reorder components: focus the component using Tab, press Space on the drag & drop button and use the arrow keys to then re-order, pressing Space again to drop the item.
:::
:::note
diff --git a/docusaurus/docs/user-docs/content-type-builder/configuring-fields-content-type.md b/docusaurus/docs/user-docs/content-type-builder/configuring-fields-content-type.md
index 0412ed9777..e1abc45512 100644
--- a/docusaurus/docs/user-docs/content-type-builder/configuring-fields-content-type.md
+++ b/docusaurus/docs/user-docs/content-type-builder/configuring-fields-content-type.md
@@ -12,8 +12,6 @@ tags:
- password
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Configuring fields for content-types
:::note Development-only
@@ -275,7 +273,7 @@ The Boolean field displays a toggle button to manage boolean values (e.g. Yes or
|----------------|-----------------------------------------------------------------------------|
| Default value | Choose the default value of the Boolean field: *true*, *null* or *false*. |
| Private field | Tick to make the field private and prevent it from being found via the API. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
| Unique field | Tick to prevent another field to be identical to this one. |
@@ -302,7 +300,7 @@ The JSON field allows to configure data in a JSON format, to store JSON objects
| Setting name | Instructions |
|----------------|-----------------------------------------------------------------------------|
| Private field | Tick to make the field private and prevent it from being found via the API. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
@@ -329,7 +327,7 @@ The Email field displays an email address field with format validation to ensure
|----------------|-----------------------------------------------------------------------------|
| Default value | Write the default value of the Email field. |
| Private field | Tick to make the field private and prevent it from being found via the API. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
| Unique field | Tick to prevent another field to be identical to this one. |
| Maximum length | Tick to define a maximum number of characters allowed. |
@@ -359,7 +357,7 @@ The Password field displays a password field that is encrypted.
|----------------|-----------------------------------------------------------------------------|
| Default value | Write the default value of the Password field. |
| Private field | Tick to make the field private and prevent it from being found via the API. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
| Maximum length | Tick to define a maximum number of characters allowed. |
| Minimum length | Tick to define a minimum number of characters allowed. |
@@ -392,7 +390,7 @@ The Enumeration field allows to configure a list of values displayed in a drop-d
| Default value | Choose the default value of the Enumeration field. |
| Name override for GraphQL | Write a custom GraphQL schema type to override the default one for the field. |
| Private field | Tick to make the field private and prevent it from being found via the API. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
@@ -456,7 +454,7 @@ The Rich Text (Markdown) field displays an editor with basic formatting options
|----------------|-----------------------------------------------------------------------------|
| Default value | Write the default value of the Rich Text field. |
| Private field | Tick to make the field private and prevent it from being found via the API. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the field to have a different value per locale. |
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
| Maximum length | Tick to define a maximum number of characters allowed. |
| Minimum length | Tick to define a minimum number of characters allowed. |
@@ -500,7 +498,7 @@ When configuring a component through the Content-type Builder, it is possible to
| Private field | Tick to make the field private and prevent it from being found via the API. |
| Maximum value | For repeatable components only - Tick to define a maximum number of characters allowed. |
| Minimum value | For repeatable components only - Tick to define a minimum number of characters allowed. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the component to be translated per available locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the component to be translated per available locale. |
@@ -527,7 +525,7 @@ Dynamic zones are a combination of components that can be added to content-types
| Required field | Tick to prevent creating or saving an entry if the field is not filled in. |
| Maximum value | Tick to define a maximum number of characters allowed. |
| Minimum value | Tick to define a minimum number of characters allowed. |
-| Enable localization for this field | (if [Internationalization plugin](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the dynamic zone to be translated per available locale. |
+| Enable localization for this field | (if [Internationalization](/user-docs/plugins/strapi-plugins#i18n) is enabled for the content-type) Allow the dynamic zone to be translated per available locale. |
diff --git a/docusaurus/docs/user-docs/content-type-builder/creating-new-content-type.md b/docusaurus/docs/user-docs/content-type-builder/creating-new-content-type.md
index 337a64a83a..b03c0d5fc3 100644
--- a/docusaurus/docs/user-docs/content-type-builder/creating-new-content-type.md
+++ b/docusaurus/docs/user-docs/content-type-builder/creating-new-content-type.md
@@ -9,8 +9,6 @@ tags:
- single type
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Creating content-types
:::note Development-only
@@ -74,7 +72,7 @@ To create a new component:
2. In the component creation window, configure the base settings of the new component:
- Write the name of the component in the *Display name* textbox.
- Select an available category, or enter in the textbox a new category name to create one.
- - _(optional)_ Choose an icon representing the new component. You can use the search  to find an icon instead of scrolling through the list.
+ - _(optional)_ Choose an icon representing the new component. You can use the search to find an icon instead of scrolling through the list.
3. Click on the **Continue** button.
4. Add and configure chosen fields for your component (see [Configuring fields for content-types](/user-docs/content-type-builder/configuring-fields-content-type)).
5. Click on the **Save** button.
diff --git a/docusaurus/docs/user-docs/content-type-builder/introduction-to-content-types-builder.md b/docusaurus/docs/user-docs/content-type-builder/introduction-to-content-types-builder.md
index b56cc4a551..5c1841edf4 100644
--- a/docusaurus/docs/user-docs/content-type-builder/introduction-to-content-types-builder.md
+++ b/docusaurus/docs/user-docs/content-type-builder/introduction-to-content-types-builder.md
@@ -11,13 +11,11 @@ tags:
pagination_next: user-docs/content-type-builder/creating-new-content-type
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Introduction to the Content-type Builder
The Content-type Builder is a core plugin of Strapi. It is a feature that is always activated by default and cannot be deactivated. The Content-type Builder is however only accessible when the application is in a development environment.
-Administrators can access the Content-type Builder from  _Content-type Builder_ in the main navigation of the admin panel.
+Administrators can access the Content-type Builder from _Content-type Builder_ in the main navigation of the admin panel.
in the Content-type Builder sub navigation to find a specific collection type, single type, or component.
:::
diff --git a/docusaurus/docs/user-docs/content-type-builder/managing-content-types.md b/docusaurus/docs/user-docs/content-type-builder/managing-content-types.md
index e026b0e20a..da64952143 100644
--- a/docusaurus/docs/user-docs/content-type-builder/managing-content-types.md
+++ b/docusaurus/docs/user-docs/content-type-builder/managing-content-types.md
@@ -9,7 +9,6 @@ tags:
- single type
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ScreenshotNumberReference from '/src/components/ScreenshotNumberReference.jsx';
# Managing content-types
@@ -34,13 +33,13 @@ Managing a content-type or component can include editing the general settings an
}}
/>
-- Next to the name and optional description of the content-type or component, an  **Edit** button allows to access the [basic settings](#editing-content-type-or-component-settings) of the content-type or component.
+- Next to the name and optional description of the content-type or component, an **Edit** button allows to access the [basic settings](#editing-content-type-or-component-settings) of the content-type or component.
- In the top right corner:
- the **Add new/another field** and **Save** buttons allow to respectively add another field to the content-type or component (see [Configuring fields for content-types](/user-docs/content-type-builder/configuring-fields-content-type)), or save any ongoing modification.
- the **Configure the view** button allows to access the view configuration interface (see [Configuring the edit view](/user-docs/content-manager/configuring-view-of-content-type#configuring-the-edit-view))
- Below the previous editing options, a table lists all the fields created and configured for the content-type or component. From the fields table, it is possible to:
- - Click on the edit button  to edit a field
- - Click on the delete button  to delete a field
+ - Click on the edit button to edit a field
+ - Click on the delete button to delete a field
:::caution
Editing a field allows renaming it. However, keep in mind that regarding the database, renaming a field means creating a whole new field and deleting the former one. Although nothing is deleted from the database, the data that was associated with the former field name will not be accessible from the admin panel of your application anymore.
@@ -93,7 +92,7 @@ Content types and components can be deleted through the Content-type Builder. De
To delete a content-type or component:
1. In the Content-type Builder sub navigation, click on the name of the content-type or component to delete.
-2. In the edition interface of the chosen content-type or component, click on the  **Edit** button on the right side of the content-type's or component's name.
+2. In the edition interface of the chosen content-type or component, click on the **Edit** button on the right side of the content-type's or component's name.
3. In the edition window, click on the **Delete** button.
4. In the confirmation window, confirm the deletion.
diff --git a/docusaurus/docs/user-docs/getting-started/setting-up-admin-panel.md b/docusaurus/docs/user-docs/getting-started/setting-up-admin-panel.md
index 066eb3fc0b..80206c7c49 100644
--- a/docusaurus/docs/user-docs/getting-started/setting-up-admin-panel.md
+++ b/docusaurus/docs/user-docs/getting-started/setting-up-admin-panel.md
@@ -33,11 +33,12 @@ To access the admin panel:
2. Enter your credentials to log in.
3. Click on the **Login** button. You should be redirected to the homepage of the admin panel.
-### Using SSO for authentication {#using-sso}
+### Using SSO for authentication
+
If your Strapi application was configured to allow authentication through SSO (see [Configuring Single Sign-On](/user-docs/settings/single-sign-on)), you can access the admin panel using a specific provider instead of logging in with a regular Strapi administrator account.
-To do so, in the login page of your Strapi application, click on a chosen provider. If you cannot see your provider, click the  button to access the full list of all available providers. You will be redirected to your provider's own login page where you will be able to authenticate.
+To do so, in the login page of your Strapi application, click on a chosen provider. If you cannot see your provider, click the button to access the full list of all available providers. You will be redirected to your provider's own login page where you will be able to authenticate.
## Setting up your administrator profile
@@ -77,9 +78,9 @@ To change the password of your account:
| Password modification | |
| --------------------- | ---------------------------------------------------------------------------------------------------------------- |
-| Current password | Write your current password in the textbox. 💡 You can click on the  icon for the password to be shown. |
-| Password | Write the new password in the textbox. 💡 You can click on the  icon for the password to be shown. |
-| Password confirmation | Write the same new password in the textbox. 💡 You can click on the  icon for the password to be shown. |
+| Current password | Write your current password in the textbox. 💡 You can click on the icon for the password to be shown. |
+| Password | Write the new password in the textbox. 💡 You can click on the icon for the password to be shown. |
+| Password confirmation | Write the same new password in the textbox. 💡 You can click on the icon for the password to be shown. |
3. Click on the **Save** button.
diff --git a/docusaurus/docs/user-docs/getting-started/user-guide-fundamentals.md b/docusaurus/docs/user-docs/getting-started/user-guide-fundamentals.md
index 16983f8243..f18edd59be 100644
--- a/docusaurus/docs/user-docs/getting-started/user-guide-fundamentals.md
+++ b/docusaurus/docs/user-docs/getting-started/user-guide-fundamentals.md
@@ -19,7 +19,7 @@ Before going any further into this user guide, we recommend you to acknowledge t
- **Versions** Strapi is constantly evolving and growing. This implies that new releases are quite frequent, to improve what is already available but also to add new features to Strapi. For every new Strapi version, we communicate through our main channels and by sending notifications both on your terminal (when launching your Strapi application), and on your application's admin panel. We always recommend to use the latest version. However, we always keep live both the documentation of the current Strapi version, and the documentation of the previous major version — the latter being officially and actively maintained for up to 12 months after the release of the newest Strapi version.
-- **License and Pricing Plans** As a Strapi user you have the choice between using the Community Edition, which is entirely free, or the [Enterprise Edition](https://strapi.io/pricing-self-hosted). In this user guide, if a feature is only available for the Enterprise Edition, an badge is displayed beside the section's title. Strapi can also be hosted on Strapi Cloud by subscribing to a tier that meets the functionality, support, and customization options specified on [Strapi Cloud](https://strapi.io/pricing-cloud). In this user guide, the , , and badges can be displayed beside a section's title to indicate the feature is available on the tier.
+- **License and Pricing Plans** As a Strapi user you have the choice between using the Community Edition, which is entirely free, the [Growth plan](https://strapi.io/pricing-self-hosted), or the [Enterprise plan](https://strapi.io/pricing-self-hosted). In this user guide, if a feature is available for the Growth plan, or for the Enterprise plan, then respectively a or an badge will be displayed beside the section's title. Strapi can also be hosted on Strapi Cloud by subscribing to a tier that meets the functionality, support, and customization options specified on [Strapi Cloud](https://strapi.io/pricing-cloud). In this user guide, the , , and badges can be displayed below a section's title to indicate the feature is available on the tier.
- **Future flags** Some incoming Strapi features are not yet ready to be shipped to all users, but Strapi still offers community users the opportunity to provide early feedback on these new features or changes. This feedback is invaluable in enhancing the feature before the final release. Such experimental features are indicated by a badge throughout the documentation and enabling these features requires enabling the corresponding future flags (see [Developer Docs](/dev-docs/configurations/features#enabling-a-future-flag)).
diff --git a/docusaurus/docs/user-docs/intro.md b/docusaurus/docs/user-docs/intro.md
index 699de40052..97c848dbdc 100644
--- a/docusaurus/docs/user-docs/intro.md
+++ b/docusaurus/docs/user-docs/intro.md
@@ -1,7 +1,7 @@
---
displayed_sidebar: userDocsSidebar
description: The Strapi User Guide contains the functional documentation related to all features available in the main navigation of your Strapi application.
-# sidebar_label: Welcome!
+sidebar_label: Welcome!
tags:
- admin panel
- guides
@@ -11,15 +11,14 @@ pagination_next: user-docs/getting-started/user-guide-fundamentals
# Welcome to the Strapi User Guide!
-
+:::callout Developer Docs, User Guide, and Strapi Cloud documentation
The documentation for Strapi contains 3 main sections, accessible from the top navigation bar:
-- 🧑💻 The **[Developer Docs](/dev-docs/intro)** contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
-- 🧑🏫 The **User Guide** that you're currently reading is all about using Strapi's admin panel.
-- ☁️ The **[Strapi Cloud](/cloud/intro)** documentation is about deploying your Strapi application to Strapi Cloud and managing your Strapi Cloud projects and settings.
-
-
+- The **[Developer Docs](/dev-docs/intro)** contain all the technical information related to the setup, advanced usage, customization, and update of your Strapi 5 application.
+- The **User Guide** that you're currently reading is all about using Strapi's admin panel.
+- The **[Strapi Cloud documentation ](/cloud/intro)** is about deploying your Strapi application to Strapi Cloud and managing your Strapi Cloud projects and settings.
+:::
This user guide contains the functional documentation related to all features available in the main navigation of your Strapi application.
@@ -28,11 +27,13 @@ Once you have logged in, you can access your Strapi admin panel:
+The  admin panel homepage can display the guided tour (if you have not skipped or completed it yet) and last edited and published entries if you have any.
+
If you are not sure where to begin on this User Guide, we suggest you to:
1. Go through the [User Guide fundamentals](/user-docs/getting-started/user-guide-fundamentals).
diff --git a/docusaurus/docs/user-docs/media-library/adding-assets.md b/docusaurus/docs/user-docs/media-library/adding-assets.md
index bb087b269b..48e5195d9d 100644
--- a/docusaurus/docs/user-docs/media-library/adding-assets.md
+++ b/docusaurus/docs/user-docs/media-library/adding-assets.md
@@ -9,8 +9,6 @@ tags:
- media library
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Adding assets
The Media Library displays all assets uploaded in the application, either via the [Media Library](/user-docs/media-library) or the [Content Manager](/user-docs/content-manager/writing-content.md#filling-up-fields) when managing a media field.
@@ -29,7 +27,7 @@ To add new assets to the media library:
2. Choose whether you want to upload the new asset from your computer or from an URL:
- from the computer, either drag & drop the asset directly or browse files on your system,
- from an URL, type or copy and paste an URL(s) in the _URL_ field, making sure multiple URLs are separated by carriage returns, then click **Next**.
-3. (optional) Click the edit button  to view asset metadata and define a _File name_, _Alternative text_ and a _Caption_ for the asset (see [editing and deleting assets](managing-assets.md)).
+3. (optional) Click the edit button to view asset metadata and define a _File name_, _Alternative text_ and a _Caption_ for the asset (see [editing and deleting assets](managing-assets.md)).
4. (optional) Add more assets by clicking **Add new assets** and going back to step 2.
5. Click on **Upload assets to the library**.
diff --git a/docusaurus/docs/user-docs/media-library/introduction-to-the-media-library.md b/docusaurus/docs/user-docs/media-library/introduction-to-the-media-library.md
index c82f0b5b73..1f42fb95cd 100644
--- a/docusaurus/docs/user-docs/media-library/introduction-to-the-media-library.md
+++ b/docusaurus/docs/user-docs/media-library/introduction-to-the-media-library.md
@@ -12,14 +12,13 @@ tags:
pagination_next: user-docs/media-library/adding-assets
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ScreenshotNumberReference from '/src/components/ScreenshotNumberReference.jsx';
# Introduction to the Media Library
The Media Library is a Strapi plugin that is always activated by default and cannot be deactivated. It is accessible both when the application is in a development and production environment.
-Administrators can access the Media Library from  _Media Library_ in the main navigation of the admin panel.
+Administrators can access the Media Library from _Media Library_ in the main navigation of the admin panel.
,
- sort the assets and folders or set filters to find assets and folders more easily,
-- toggle between the list view  and the grid view  to display assets, access settings  to [configure the view](#configuring-the-view), and make a textual search  to find a specific asset or folder,
+- toggle between the list view and the grid view to display assets, access settings to [configure the view](#configuring-the-view), and make a textual search to find a specific asset or folder,
- and view, navigate through, and manage folders .
:::tip
-Click the search icon  on the right side of the user interface to use a text search and find one of your assets or folders more quickly!
+Click the search icon on the right side of the user interface to use a text search and find one of your assets or folders more quickly!
:::
## Filtering assets
-Right above the list of folders and assets, on the left side of the interface, a  **Filters** button is displayed. It allows setting one or more condition-based filters, which add to one another (i.e. if you set several conditions, only the assets that match all the conditions will be displayed).
+Right above the list of folders and assets, on the left side of the interface, a **Filters** button is displayed. It allows setting one or more condition-based filters, which add to one another (i.e. if you set several conditions, only the assets that match all the conditions will be displayed).
**Filters** button.
2. Click on the 1st drop-down list to choose the field on which the condition will be applied.
3. Click on the 2nd drop-down list to choose the type of condition to apply.
4. For conditions based on the type of asset to filter, click on the 3rd drop-down list and choose a file type to include or exclude. For conditions based on date and time (i.e. _createdAt_ or _updatedAt_ fields), click on the left field to select a date and click on the right field to select a time.
5. Click on the **Add filter** button.
:::note
-When active, filters are displayed next to the  **Filters** button. They can be removed by clicking on the delete icon .
+When active, filters are displayed next to the **Filters** button. They can be removed by clicking on the delete icon .
:::
## Sorting assets
@@ -76,11 +75,11 @@ When active, filters are displayed next to the  **Filters** button, on the left side of the interface, a drop-down button is displayed. It allows to sort the assets by upload date, alphabetical order or date of update. Click on the drop-down button and select an option in the list to automatically display the sorted assets.
+Just above the list of folders and assets and next to the **Filters** button, on the left side of the interface, a drop-down button is displayed. It allows to sort the assets by upload date, alphabetical order or date of update. Click on the drop-down button and select an option in the list to automatically display the sorted assets.
## Configuring the view
-Just above the list of folders and assets, on the right side of the interface, there is a group of 3 buttons. Click on  to configure the default view for the Media library.
+Just above the list of folders and assets, on the right side of the interface, there is a group of 3 buttons. Click on to configure the default view for the Media library.
button.
## Editing assets
-Clicking on the edit  button of an asset opens up a "Details" window, with all the available options.
+Clicking on the edit button of an asset opens up a "Details" window, with all the available options.
- On the left, above the preview of the asset, control buttons allow performing various actions:
- - click on the delete button  to delete the asset,
- - click on the download button  to download the asset,
- - click on the copy link button  to copy the asset's link to the clipboard,
- - optionally, click on the crop button  to enter cropping mode for the image (see [cropping images](#cropping-images)).
+ - click on the delete button to delete the asset,
+ - click on the download button to download the asset,
+ - click on the copy link button to copy the asset's link to the clipboard,
+ - optionally, click on the crop button to enter cropping mode for the image (see [cropping images](#cropping-images)).
- On the right, meta data for the asset is displayed at the top of the window and the fields below can be used to update the _File name_, _Alternative text_, _Caption_ and _Location_ (see [organizing assets with folders](/user-docs/media-library/organizing-assets-with-folders.md)) for the asset .
- At the bottom, the **Replace Media** button can be used to replace the asset file but keep the existing content of the other editable fields, and the **Finish** button is used to confirm any updates to the fields.
@@ -42,7 +41,7 @@ An individual asset can be moved to a folder when editing its details.
To move an asset:
-1. Click on the edit  button for the asset to be moved.
+1. Click on the edit button for the asset to be moved.
2. In the window that pops up, click the _Location_ field and choose a different folder from the drop-down list.
3. Click **Save** to confirm.
@@ -56,10 +55,10 @@ Images can be cropped when editing the asset's details.
To crop an image:
-1. Click on the edit  button for the asset to be cropped.
-2. In the window that pops up, click the crop button  to enter cropping mode.
+1. Click on the edit button for the asset to be cropped.
+2. In the window that pops up, click the crop button to enter cropping mode.
3. Crop the image using handles in the corners to resize the frame. The frame can also be moved by drag & drop.
-4. Click the crop  button to validate the new dimensions, and choose either to **crop the original asset** or to **duplicate & crop the asset** (i.e. to create a copy with the new dimensions while keeping the original asset untouched). Alternatively, click the stop cropping  button to cancel and quit cropping mode.
+4. Click the crop button to validate the new dimensions, and choose either to **crop the original asset** or to **duplicate & crop the asset** (i.e. to create a copy with the new dimensions while keeping the original asset untouched). Alternatively, click the stop cropping button to cancel and quit cropping mode.
5. Click **Finish** to save changes to the file.
@@ -69,10 +68,10 @@ An individual asset can be deleted when editing its details.
To delete an asset:
-1. Click on the edit  button for the asset to be deleted.
-2. In the window that pops up, click the delete button  in the control buttons bar above the asset's preview.
+1. Click on the edit button for the asset to be deleted.
+2. In the window that pops up, click the delete button in the control buttons bar above the asset's preview.
3. Click **Confirm**.
:::tip
-Assets can also be deleted individually or in bulk from the main view of the Media Library. Select assets by clicking on their checkbox in the top left corner, then click the Delete icon  at the top of the window, below the filters and sorting options.
+Assets can also be deleted individually or in bulk from the main view of the Media Library. Select assets by clicking on their checkbox in the top left corner, then click the Delete icon at the top of the window, below the filters and sorting options.
:::
diff --git a/docusaurus/docs/user-docs/media-library/organizing-assets-with-folders.md b/docusaurus/docs/user-docs/media-library/organizing-assets-with-folders.md
index f3e548c9f7..e45c9d8922 100644
--- a/docusaurus/docs/user-docs/media-library/organizing-assets-with-folders.md
+++ b/docusaurus/docs/user-docs/media-library/organizing-assets-with-folders.md
@@ -10,7 +10,6 @@ tags:
- Users, Roles & Permissions
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
import ScreenshotNumberReference from '/src/components/ScreenshotNumberReference.jsx';
# Organizing assets with folders
@@ -57,7 +56,7 @@ To create a new folder in the Media Library:
4. Click **Create**.
:::note
-There is no limit to how deep your folders hierarchy can go, but bear in mind it might take some effort to reach a deeply nested subfolder, as the Media Library currently has no visual hierarchy indication. Searching for files using the  on the right side of the user interface might be a faster alternative to finding the asset you are looking for.
+There is no limit to how deep your folders hierarchy can go, but bear in mind it might take some effort to reach a deeply nested subfolder, as the Media Library currently has no visual hierarchy indication. Searching for files using the on the right side of the user interface might be a faster alternative to finding the asset you are looking for.
:::
## Moving assets to a folder
@@ -75,7 +74,7 @@ Assets and folders can be moved to another folder from the root view of the Medi
To bulk move assets and folders to another folder:
1. Select assets and folder to be moved, by clicking the checkbox on the left of the folder name or clicking the asset itself.
-2. Click the  **Move** button at the top of the interface.
+2. Click the **Move** button at the top of the interface.
3. In the _Move elements to_ pop-up window, select the new folder from the _Location_ drop-down list.
4. Click **Move**.
@@ -87,7 +86,7 @@ An individual asset can also be moved to a folder when [editing the asset](/user
Once created, a folder can be renamed, moved or deleted. To manage a single folder:
-1. In the Folders part of the Media library, hover the folder to be edited and click its edit button .
+1. In the Folders part of the Media library, hover the folder to be edited and click its edit button .
2. In the window that pops up, update the name and location with the _Name_ field and _Location_ drop-down list, respectively.
3. Click **Save**.
@@ -98,9 +97,9 @@ Deleting a folder can be done either from the list of folders of the Media Libra
To delete a folder, from the Media Library:
1. Click the checkbox on the left of the folder name. Multiple folders can be selected.
-2. Click the  **Delete** button above the Folders list.
+2. Click the **Delete** button above the Folders list.
3. In the _Confirmation_ dialog, click **Confirm**.
:::note
-A single folder can also be deleted when editing it: hover the folder, click on its edit icon , and in the window that pops up, click the **Delete folder** button and confirm the deletion.
+A single folder can also be deleted when editing it: hover the folder, click on its edit icon , and in the window that pops up, click the **Delete folder** button and confirm the deletion.
:::
diff --git a/docusaurus/docs/user-docs/plugins/installing-plugins-via-marketplace.md b/docusaurus/docs/user-docs/plugins/installing-plugins-via-marketplace.md
index 38ac745875..d09d3d2082 100644
--- a/docusaurus/docs/user-docs/plugins/installing-plugins-via-marketplace.md
+++ b/docusaurus/docs/user-docs/plugins/installing-plugins-via-marketplace.md
@@ -9,13 +9,9 @@ tags:
- upload plugin
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Using the Marketplace
-
-
-The Marketplace is where users can find additional plugins to customize Strapi applications, and additional [providers](/user-docs/plugins#providers) to extend plugins. The Marketplace is located in the admin panel, indicated by  _Marketplace_. In the Marketplace, users can browse or search for plugins and providers, link to detailed descriptions for each, and submit new plugins and providers.
+The Marketplace is where users can find additional plugins to customize Strapi applications, and additional [providers](/user-docs/plugins#providers) to extend plugins. The Marketplace is located in the admin panel, indicated by _Marketplace_. In the Marketplace, users can browse or search for plugins and providers, link to detailed descriptions for each, and submit new plugins and providers.
:::note strapi In-app Marketplace vs. Market website
The Marketplace in the admin panel displays all existing plugins, regardless of the version of Strapi they are for. All plugins can also be discoverable through the [Strapi Market](https://market.strapi.io) website.
@@ -35,10 +31,10 @@ The Plugins and Providers tabs display each plugin/provider on individual cards
- their name, sometimes followed by either of the following badges:
-  to indicate it is made by Strapi,
- -  to indicate it was verified by Strapi.
+ - to indicate it was verified by Strapi.
- the number of times the plugin/provider was starred on GitHub and downloaded
- the description
-- a **More**  button to be redirected to the Market website for additional information, including about the version of Strapi the plugin is for, and implementation instructions
+- a **More** button to be redirected to the Market website for additional information, including about the version of Strapi the plugin is for, and implementation instructions
In the top right corner of the Marketplace, the **Submit plugin** button redirects to the Strapi Market where it is possible to submit your own plugin and provider.
@@ -57,7 +53,7 @@ Marketplace plugins and providers are installed and deleted from the user's term
To install a new plugin or provider via the Marketplace:
-1. Go to the  *Marketplace*.
+1. Go to the *Marketplace*.
2. Choose the **Plugins** tab to browse available plugins or the **Providers** tab to browse available providers.
-3. Choose an available plugin/provider and click on the **More**  button.
+3. Choose an available plugin/provider and click on the **More** button.
4. Once redirected to the Strapi Market website, follow the plugin/provider-specific implementation instructions.
diff --git a/docusaurus/docs/user-docs/plugins/introduction-to-plugins.md b/docusaurus/docs/user-docs/plugins/introduction-to-plugins.md
index df8f00e3e1..75d4e3e8e5 100644
--- a/docusaurus/docs/user-docs/plugins/introduction-to-plugins.md
+++ b/docusaurus/docs/user-docs/plugins/introduction-to-plugins.md
@@ -12,8 +12,6 @@ tags:
pagination_next: user-docs/plugins/installing-plugins-via-marketplace
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Introduction to plugins
Strapi is built around different types of plugins. Every default Strapi application comes with the following pre-installed plugins:
diff --git a/docusaurus/docs/user-docs/plugins/strapi-plugins.md b/docusaurus/docs/user-docs/plugins/strapi-plugins.md
index 4b7deeee55..b593443436 100644
--- a/docusaurus/docs/user-docs/plugins/strapi-plugins.md
+++ b/docusaurus/docs/user-docs/plugins/strapi-plugins.md
@@ -13,8 +13,6 @@ tags:
- Strapi plugin
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# List of Strapi plugins
Strapi builds and maintains plugins that extend the functionality of a core Strapi application. This section is a reference guide to the pre-installed plugins and additional plugins developed by Strapi, which are available in the [Marketplace](/user-docs/plugins/installing-plugins-via-marketplace/). Additional documentation on plugins is provided in the relevant sections of the User Guide and the Developer Documentation, however, a brief plugin description, how the installed plugin works, and changes to the admin panel is provided.
@@ -22,8 +20,8 @@ Strapi builds and maintains plugins that extend the functionality of a core Stra
:::note
- Some Strapi Starters and Templates might install additional plugins beyond the default plugins listed below.
-- If plugin options are only available with an [Enterprise edition license](https://strapi.io/pricing-self-hosted), they are marked with in this reference guide.
-- All plugin installations can be confirmed in  *Settings > Plugins* in the admin panel.
+- If plugin options are only available with a [paid plan](https://strapi.io/pricing-self-hosted), they are marked with a or an badge in this reference guide.
+- All plugin installations can be confirmed in *Settings > Plugins* in the admin panel.
:::
@@ -43,7 +41,7 @@ The Internationalization feature affects several parts of the admin panel. The t
| Section impacted | Options and settings |
|------------------|----------------------------------------------------------------|
-| Settings |
Addition of a new "Internationalization" setting sub-section, where locales can be added, edited or deleted from the application (see [Configuring Internationalization locales](/user-docs/settings/internationalization)). 👉 Path reminder:  *Settings > Global Settings > Internationalization*
Addition of new permissions for administrator roles: access to Content-types, as well as possible actions on the Content-types, can be defined depending on the locale (see [Configuring permissions](/user-docs/users-roles-permissions/configuring-administrator-roles#configuring-roles-permissions)). 👉 Path reminder:  *Settings > Administration panel*
Addition of role-based permissions settings where the access for each user type can be enabled or restricted (see [Configuring permissions](/user-docs/users-roles-permissions/configuring-administrator-roles#editing-a-role)). 👉 Path reminder:  *Settings > Administration panel > Roles > select role > Settings*
|
+| Settings |
Addition of a new "Internationalization" setting sub-section, where locales can be added, edited or deleted from the application (see [Configuring Internationalization locales](/user-docs/settings/internationalization)). Path reminder: *Settings > Global Settings > Internationalization*
Addition of new permissions for administrator roles: access to Content-types, as well as possible actions on the Content-types, can be defined depending on the locale (see [Configuring permissions](/user-docs/users-roles-permissions/configuring-administrator-roles#configuring-roles-permissions)). Path reminder: *Settings > Administration panel*
Addition of role-based permissions settings where the access for each user type can be enabled or restricted (see [Configuring permissions](/user-docs/users-roles-permissions/configuring-administrator-roles#editing-a-role)). Path reminder: *Settings > Administration panel > Roles > select role > Settings*
|
| Content-type Builder |
Addition of a new setting at the Content-type level, to allow or not localization/translation of the content-type (see [Creating a new content-type](/user-docs/content-type-builder/creating-new-content-type#creating-a-new-content-type)).
Addition of a new setting at field level, to allow or not localization/translation of the content-type (see [Configuring fields for content-types](/user-docs/content-type-builder/configuring-fields-content-type#regular-fields)).
|
| Content Manager |
Addition of a new *Locales* filter in collection types list view, to manage entries per locale (see [Introduction to the Content Manager](/user-docs/content-manager#collection-types)).
Addition of new options in Content-types edit view, to translate content and manage it per locale (see [Translating content](/user-docs/content-manager/translating-content)).
|
@@ -62,7 +60,7 @@ The Users & Permissions plugin impacts several parts of the admin panel. The tab
| Section impacted | Options and settings |
|------------------|------------------------------------------------------|
-| Settings |
Addition of a "Users & Permissions plugin" setting section, which contains 4 sub-sections: Roles (see [Configuring end-user roles](/user-docs/users-roles-permissions/configuring-end-users-roles)), Providers, Email Templates, and Advanced Settings (see [Configuring Users & Permissions plugin](/user-docs/settings/configuring-users-permissions-plugin-settings)). 👉 Path reminder:  *Settings > Users & Permissions plugin*
|
+| Settings |
Addition of a "Users & Permissions plugin" setting section, which contains 4 sub-sections: Roles (see [Configuring end-user roles](/user-docs/users-roles-permissions/configuring-end-users-roles)), Providers, Email Templates, and Advanced Settings (see [Configuring Users & Permissions plugin](/user-docs/settings/configuring-users-permissions-plugin-settings)). Path reminder: *Settings > Users & Permissions plugin*
|
| Content-type Builder |
Creation of a default collection type "User" which allows for the management of the end users, the end-user roles and their permissions. This collection type cannot be deleted and the composing fields cannot be edited, but the addition of new fields is possible.
|
| Content Manager |
Addition of the default "User" collection type that allows for the management of end-user accounts (see [Managing end-user accounts](/user-docs/users-roles-permissions/managing-end-users)).
By default, the following fields are available: Username, Email, Password, as well as Confirmed and Blocked as boolean fields.
The "User" collection type has a relation established with the "Role" collection type. All end-user accounts must have a designated role: by default, the end user is attributed the end-user role set as default, but that role can be changed via the end-user entries directly in the Content Manager.
|
@@ -72,7 +70,7 @@ The Email plugin allows users to send email from the server or from external pro
| Section impacted | Options and settings |
|------------------|----------------------|
-| Settings |
Addition of "Email plugin" setting section, which contains a "Configuration" sub-section. In the Configuration section, only the email address field under "Test email delivery" is modifiable by users. A **send test email** button sends a test email.
Addition of "Email" to the permissions for authenticated and public users. In the Email section the ability to send emails via the API can be enabled or disabled. 👉 Path reminder:  *Settings > Users and Permissions > Roles*
|
+| Settings |
Addition of "Email plugin" setting section, which contains a "Configuration" sub-section. In the Configuration section, only the email address field under "Test email delivery" is modifiable by users. A **send test email** button sends a test email.
Addition of "Email" to the permissions for authenticated and public users. In the Email section the ability to send emails via the API can be enabled or disabled. Path reminder: *Settings > Users and Permissions > Roles*
|
## Additional plugins
@@ -89,7 +87,7 @@ The Documentation plugin affects multiple parts of the admin panel. The table be
| Section impacted | Options and settings |
|------------------|-------------------------------------------------------------|
| Documentation |
Addition of a new Documentation option in the main navigation under the plugins heading, which contains links to open and refresh the documentation.
|
-| Settings |
Addition of a "Documentation plugin" setting section, which controls whether the documentation endpoint is private or not. 👉 Path reminder:  *Settings > Documentation plugin*
Activation of role based access control for accessing, updating, deleting, and regenerating the documentation. Administrators can authorize different access levels to different types of users in the *Plugins* tab and the *Settings* tab. 👉 Path reminder:  *Settings > Administration Panel > Roles*
|
+| Settings |
Addition of a "Documentation plugin" setting section, which controls whether the documentation endpoint is private or not. Path reminder: *Settings > Documentation plugin*
Activation of role based access control for accessing, updating, deleting, and regenerating the documentation. Administrators can authorize different access levels to different types of users in the *Plugins* tab and the *Settings* tab. Path reminder: *Settings > Administration Panel > Roles*
|
### Gatsby preview {#gatsby}
@@ -99,7 +97,7 @@ The Gatsby preview plugin affects multiple parts of the admin panel. The table b
| Section impacted | Options and settings |
|------------|-----------------|
-| Settings | Addition of a "Gatsby preview plugin" setting section, enables/disables collection types and single types, and allows the Gatsby Content Sync URL to be added. 👉 Path reminder:  *Settings > Gatsby preview plugin* | |
+| Settings | Addition of a "Gatsby preview plugin" setting section, enables/disables collection types and single types, and allows the Gatsby Content Sync URL to be added. Path reminder: *Settings > Gatsby preview plugin* | |
| Content Manager | Addition of the **open Gatsby preview** button in the right-side navigation. |
### GraphQL {#graphql}
@@ -124,8 +122,8 @@ The Strapi SEO plugin affects multiple parts of the admin panel. The table below
| Section impacted | Options and settings |
|-------------------|--------------------------------------------|
| Content Manager |
Addition of SEO field to Collection Types with the SEO component.
Addition of SEO menu in the right-side navigation
Addition of **Browser Preview** and **Social Preview** buttons in the right-side navigation,
Addition of SEO Summary and link for details in the right-side navigation.
|
-| Content-type Builder |
Addition of `shared - metaSocial` and `shared - seo` components in the Content-type Builder sub navigation. The `shared - metaSocial` and `shared - seo` components can be added to a collection type or single type using the  **Add another field** button and adding an existing component (see [Configuring fields for content-types](/user-docs/content-type-builder/configuring-fields-content-type#components)).
|
-|Main navigation |
Addition of  *SEO* to the main navigation. By clicking on  *SEO* a list of Collection Types and Single Types, with the SEO status, is available.
+| Content-type Builder |
Addition of `shared - metaSocial` and `shared - seo` components in the Content-type Builder sub navigation. The `shared - metaSocial` and `shared - seo` components can be added to a collection type or single type using the **Add another field** button and adding an existing component (see [Configuring fields for content-types](/user-docs/content-type-builder/configuring-fields-content-type#components)).
|
+|Main navigation |
Addition of *SEO* to the main navigation. By clicking on *SEO* a list of Collection Types and Single Types, with the SEO status, is available.
### Sentry {#sentry}
diff --git a/docusaurus/docs/user-docs/releases/creating-a-release.md b/docusaurus/docs/user-docs/releases/creating-a-release.md
index e88dbc5ed5..3d9d7e4175 100644
--- a/docusaurus/docs/user-docs/releases/creating-a-release.md
+++ b/docusaurus/docs/user-docs/releases/creating-a-release.md
@@ -3,16 +3,16 @@ title: Creating a release
description: Instructions to create a release from the admin panel
tags:
- admin panel
+- Growth feature
- Enterprise feature
- Releases feature
- Strapi Cloud
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
+# Creating a release
+
-# Creating a release
-
-The  [Releases](/user-docs/releases/introduction) page allows creating new releases that will be used to organize entries.
+The [Releases](/user-docs/releases/introduction) page allows creating new releases that will be used to organize entries.
feature (see [scheduling a release](/user-docs/releases/managing-a-release#scheduling-a-release) for details).
+3. (_optional_) If you want to schedule the release publication instead of publishing the release manually, check the **Schedule release** checkbox (see [scheduling a release](/user-docs/releases/managing-a-release#scheduling-a-release) for details).
4. Click the **Continue** button.
Adding entries to a release must be done from the Content Manager. You can add a single entry to a release while creating or editing the entry [in the edit view](/user-docs/content-manager/adding-content-to-releases).
diff --git a/docusaurus/docs/user-docs/releases/introduction.md b/docusaurus/docs/user-docs/releases/introduction.md
index 7b31dfe6e7..06364b9dc3 100644
--- a/docusaurus/docs/user-docs/releases/introduction.md
+++ b/docusaurus/docs/user-docs/releases/introduction.md
@@ -3,6 +3,7 @@ title: Introduction to Releases
description: Introduction to the Releases feature that enables content managers to organize entries to publish/unpublish simultaneously
tags:
- admin panel
+- Growth feature
- Enterprise feature
- introduction
- Releases feature
@@ -10,7 +11,8 @@ tags:
pagination_next: user-docs/releases/creating-a-release
---
-# Releases
+# Releases
+
Releases enables content managers to organize entries into containers that can perform publish and unpublish actions simultaneously. A release can contain entries from different content types and can mix locales.
@@ -22,7 +24,7 @@ Releases enables content managers to organize entries into containers that can p
}}
/>
-Administrators can access Releases from  _Releases_ in the main navigation of the admin panel.
+Administrators can access Releases from _Releases_ in the main navigation of the admin panel.
From the Releases view, it is possible to:
diff --git a/docusaurus/docs/user-docs/releases/managing-a-release.md b/docusaurus/docs/user-docs/releases/managing-a-release.md
index 1b04ad10fb..7367437938 100644
--- a/docusaurus/docs/user-docs/releases/managing-a-release.md
+++ b/docusaurus/docs/user-docs/releases/managing-a-release.md
@@ -3,12 +3,14 @@ title: Managing a release
description: Instructions on how to manage a Release from the admin panel
tags:
- admin panel
+- Growth feature
- Enterprise feature
- Releases feature
- Strapi Cloud
---
-# Managing a release
+# Managing a release
+
Adding entries to a [release](/user-docs/releases/introduction) allow viewing them altogether on a single page.
@@ -39,8 +41,8 @@ Since publishing an entry with a release means turning a draft entry into a publ
You can rename a release. To do so, while on a release page:
-1. Click on the  button in the top right corner of the admin panel.
-2. Select  **Edit**.
+1. Click on the button in the top right corner of the admin panel.
+2. Select **Edit**.
3. In the modal, change the name of the release in the _Name_ field.
4. Click **Continue** to save the change.
@@ -53,8 +55,8 @@ You can schedule a release:
- or once the release is already created, by editing it.
To schedule an existing release, while on a release page:
-1. Click on the  button in the top right corner of the admin panel.
-2. Select  **Edit**.
+1. Click on the button in the top right corner of the admin panel.
+2. Select **Edit**.
3. In the modal, check the **Schedule release** checkbox.
4. Select a date, time, and timezone for the release to be published.
5. Click **Save**.
@@ -77,7 +79,7 @@ A release includes multiple entries. You can set the state of each entry with th
## Removing entries from a release
-Entries can be removed from a release. To do so, click the  at the end of the row of an entry and select the **Remove from release** button.
+Entries can be removed from a release. To do so, click the at the end of the row of an entry and select the **Remove from release** button.
## Publishing a release
@@ -85,11 +87,13 @@ Publishing a release means that all the actions (publish or unpublish) defined f
The _Status_ column displays the status of each entry:
- -  Already published: the entry is already published and publishing the release will not affect this entry
- -  Ready to publish: the entry is ready to be published with the release
- -  "[field name] is required", "[field name] is too short" or "[field name] is too long": the entry cannot be published because of the issue stated in the red warning message. In this case, the release will be indicated as *Blocked* until all issues have been fixed.
-
-If some of your entries have a  status, click the  and the **Edit the entry** button to fix the issues until all entries have the  status. Note that you will have to click on the **Refresh** button to update the release page as you fix the various entries issues.
+ - Already published: the entry is already published and publishing the release will not affect this entry
+ - Already unpublished: the entry is already unpublished, and publishing the release will not affect this entry.
+ - Ready to publish: the entry is ready to be published with the release
+ - Ready to unpublish: the entry is ready to be unpublished with the release
+ - Not ready to publish: the entry cannot be published because some fields are incorrectly filled, or it hasn't reached the required stage for publishing. In this case, the release will be indicated as *Blocked* until all issues have been fixed.
+
+If some of your entries have a status, click the and the **Edit the entry** button to fix the issues until all entries have the status. Note that you will have to click on the **Refresh** button to update the release page as you fix the various entries issues.
:::caution
Once a release is published, the release itself cannot be updated. You can not re-release that specific release with the same group of entries with some modifications; you must create another release.
@@ -99,6 +103,6 @@ Once a release is published, the release itself cannot be updated. You can not r
You can delete a release. Deleting a release will only delete the release itself, but not the content-type entries included in the release. To delete a release, while on the release page:
-1. Click on the  button in the top right corner of the admin panel.
-2. Select  **Delete**.
-3. In the confirmation dialog, click  **Confirm**.
+1. Click on the button in the top right corner of the admin panel.
+2. Select **Delete**.
+3. In the confirmation dialog, click **Confirm**.
diff --git a/docusaurus/docs/user-docs/settings/API-tokens.md b/docusaurus/docs/user-docs/settings/API-tokens.md
index dc010bdc98..8cac8455c0 100644
--- a/docusaurus/docs/user-docs/settings/API-tokens.md
+++ b/docusaurus/docs/user-docs/settings/API-tokens.md
@@ -7,8 +7,6 @@ tags:
- GraphQL API
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Managing API tokens
:::prerequisites
@@ -16,7 +14,7 @@ import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
* The *Global settings > API Tokens* sub-section of the settings interface is accessible in the admin panel only if the _API tokens > Read_ permission is granted.
:::
-API tokens allow users to authenticate REST and GraphQL API queries (see [Developer Documentation](/dev-docs/configurations/api-tokens)). Administrators can manage API tokens from  *Settings > Global settings > API Tokens*.
+API tokens allow users to authenticate REST and GraphQL API queries (see [Developer Documentation](/dev-docs/configurations/api-tokens)). Administrators can manage API tokens from *Settings > Global settings > API Tokens*.
to edit an API token's name, description, type, duration or [regenerate the token](#regenerating-an-api-token).
+- Click on the to delete an API token.
## Creating a new API token
@@ -48,7 +46,7 @@ To create a new API token:
| Token type | Choose a token type: *Read-only*, *Full access*, or *Custom*. |
3. (optional) For the *Custom* token type, define specific permissions for your API endpoints by clicking on the content-type name and using checkboxes to enable or disable permissions.
-4. Click on the **Save** button. The new API token will be displayed at the top of the interface, along with a copy button .
+4. Click on the **Save** button. The new API token will be displayed at the top of the interface, along with a copy button .
Global settings > Overview*.
+The default Strapi logos, displayed in the main navigation of a Strapi application and the authentication pages, can be modified from *Settings > Global settings > Overview*.
:::note
Both logos can also be customized programmatically via the Strapi application's configuration files (see [Developer Documentation](/dev-docs/admin-panel-customization/options#logos)). However, the logos uploaded via the admin panel supersedes any logo set through the configuration files.
@@ -33,5 +31,5 @@ To customize the logos:
5. Click on the **Save** button in the top right corner.
:::tip
-Once uploaded, the new logo can be replaced with another one , or reset  with the default Strapi logo or the logo set in the configuration files.
+Once uploaded, the new logo can be replaced with another one , or reset with the default Strapi logo or the logo set in the configuration files.
:::
diff --git a/docusaurus/docs/user-docs/settings/audit-logs.md b/docusaurus/docs/user-docs/settings/audit-logs.md
index d5c7a9cd67..690fa0d8d5 100644
--- a/docusaurus/docs/user-docs/settings/audit-logs.md
+++ b/docusaurus/docs/user-docs/settings/audit-logs.md
@@ -10,9 +10,8 @@ tags:
- Strapi Cloud
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
-# Audit Logs
+# Audit Logs
+
The **Audit Logs** section provides a searchable and filterable display of all activities performed by users of the Strapi application.
@@ -77,7 +76,7 @@ Click the **Search** icon to search for a specific log. The search is performed
## Log details
-For any log item, click the  icon to display a modal with more details about that action.
+For any log item, click the icon to display a modal with more details about that action.
_Settings_ in the main navigation of the admin panel. This settings section allows to configure the available providers, email templates and the advanced settings of the plugin. It also allows to define the end-users roles and their related permissions (see [Configuring end-user roles](../users-roles-permissions/configuring-end-users-roles.md)).
## Configuring providers
The Users & Permissions plugin allows to enable and configure providers, for end users to login via a third-party provider to access the content of a front-end application through the Strapi application API. By default, a list of providers is available including one, "Email", enabled by default for all Strapi applications with the Users & Permissions plugin installed.
Providers* sub-section of the settings interface.
-2. Click on the edit  button of the provider to enable and configure.
-3. In the provider edition window, click on the **TRUE** button of the *Enable* option.
+1. Go to the _Users & Permissions plugin > Providers_ sub-section of the settings interface.
+2. Click on the edit button of the provider to enable and configure.
+3. In the provider edition window, click on the **TRUE** button of the _Enable_ option.
4. Fill in the provider's configurations. Each provider has its own specific set of configurations, detailed in our developer documentation (see [Setting up the provider](/dev-docs/plugins/users-permissions#setting-up-the-provider---examples)).
5. Click on the **Save** button.
@@ -39,7 +37,7 @@ Other providers that are not proposed by default by Strapi can be added manually
@@ -51,8 +49,8 @@ The Users & Permissions plugin uses 2 email templates, "Email address confirmati
- if they need to reset the password of their Strapi account.
Email templates* sub-section of the settings interface.
-2. Click on the edit  button of the email template to configure and edit.
+1. Go to the _Users & Permissions plugin > Email templates_ sub-section of the settings interface.
+2. Click on the edit button of the email template to configure and edit.
3. Configure the email template:
-| Setting name | Instructions |
-|--------------- | ----------------------------------------------- |
-| Shipper name | Indicate the name of the shipper of the email. |
-| Shipper email | Indicate the email address of the shipper of the email. |
-| Response email | (optional) Indicate the email address to which responses emails from the end users will be sent. |
-| Subject | Write the subject of the email. Variables can be used (see [Developer documentation](https://strapi.io/documentation/developer-docs/latest/development/plugins/users-permissions.html#templating-emails)). |
+| Setting name | Instructions |
+| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Shipper name | Indicate the name of the shipper of the email. |
+| Shipper email | Indicate the email address of the shipper of the email. |
+| Response email | (optional) Indicate the email address to which responses emails from the end users will be sent. |
+| Subject | Write the subject of the email. Variables can be used (see [Developer documentation](https://strapi.io/documentation/developer-docs/latest/development/plugins/users-permissions.html#templating-emails)). |
4. Edit the content of the email in the "Message" textbox. Email templates content is in HTML and uses variables (see [Developer documentation](https://docs.strapi.io/developer-docs/latest/plugins/users-permissions.html#templating-emails)).
5. Click on the **Finish** button.
## Configuring advanced settings
-All settings related to the Users & Permissions plugin are managed from the *Advanced Settings* sub-section, including the choice of a default role for end users, the enablement of sign-ups and email confirmation, as well as the choice of landing page for resetting a password.
+All settings related to the Users & Permissions plugin are managed from the _Advanced Settings_ sub-section, including the choice of a default role for end users, the enablement of sign-ups and email confirmation, as well as the choice of landing page for resetting a password.
-1. Go to the *Users & Permissions plugin > Advanced settings* sub-section of the settings interface.
+1. Go to the _Users & Permissions plugin > Advanced settings_ sub-section of the settings interface.
2. Configure the settings:
-| Setting name | Instructions |
-| ------------------------------------ | --------------------------------------------------------------|
-| Default role for authenticated users | Click the drop-down list to choose the default role for new end users. |
-| One account per email address | Click on the **TRUE** button to limit to 1 the number of end-user accounts with the same email address. Click on **FALSE** to disable this limitation and allow several end-user accounts to be associated with the same email address (e.g. `kai.doe@strapi.io` can be used when logging in via several different providers). |
-| Enable sign-ups | Click on the **TRUE** button to enable end-user sign-ups. Click on **FALSE** to prevent end-user registration to your front-end application(s). |
-| Reset password page | Indicate the URL of the reset password page for your front-end application(s). |
-| Enable email confirmation | Click on the **TRUE** button to enable end-user account confirmation by sending them a confirmation email. Click on **FALSE** to disable account confirmation. |
-| Redirection url | Indicate the URL of the page where end users should be redirected after confirming their Strapi account. |
+| Setting name | Instructions |
+| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| Default role for authenticated users | Click the drop-down list to choose the default role for new end users. |
+| One account per email address | Click on the **TRUE** button to limit to 1 the number of end-user accounts with the same email address. Click on **FALSE** to disable this limitation and allow several end-user accounts to be associated with the same email address (e.g. `kai.doe@strapi.io` can be used when logging in via several different providers). |
+| Enable sign-ups | Click on the **TRUE** button to enable end-user sign-ups. Click on **FALSE** to prevent end-user registration to your front-end application(s). |
+| Reset password page | Indicate the URL of the reset password page for your front-end application(s). |
+| Enable email confirmation | Click on the **TRUE** button to enable end-user account confirmation by sending them a confirmation email. Click on **FALSE** to disable account confirmation. |
+| Redirection url | Indicate the URL of the page where end users should be redirected after confirming their Strapi account. |
+| Error confirmation redirection URL | Indicate the URL of the page where users should be redirected if they click on an invalid or expired email confirmation link. |
3. Click the **Save** button.
diff --git a/docusaurus/docs/user-docs/settings/internationalization.md b/docusaurus/docs/user-docs/settings/internationalization.md
index 928fb7b001..ea1fa071b3 100644
--- a/docusaurus/docs/user-docs/settings/internationalization.md
+++ b/docusaurus/docs/user-docs/settings/internationalization.md
@@ -7,11 +7,9 @@ tags:
- plugins
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Configuring Internationalization locales
-The [Internationalization feature](/user-docs/plugins/strapi-plugins.md#i18n) allows to manage content in different languages, called "locales". Once the Internationalization plugin is installed in a Strapi application (see [Installing plugins via the Marketplace](/user-docs/plugins/installing-plugins-via-marketplace.md)), administrators can manage locales from  *Settings > Global settings > Internationalization*.
+The [Internationalization feature](/user-docs/plugins/strapi-plugins.md#i18n) allows to manage content in different languages, called "locales". Once the Internationalization plugin is installed in a Strapi application (see [Installing plugins via the Marketplace](/user-docs/plugins/installing-plugins-via-marketplace.md)), administrators can manage locales from *Settings > Global settings > Internationalization*.
to edit a locale
+- Click on the delete button to delete a locale
## Adding a new locale
diff --git a/docusaurus/docs/user-docs/settings/introduction.md b/docusaurus/docs/user-docs/settings/introduction.md
index d9e5df49cd..6dc16b0913 100644
--- a/docusaurus/docs/user-docs/settings/introduction.md
+++ b/docusaurus/docs/user-docs/settings/introduction.md
@@ -9,7 +9,7 @@ tags:
pagination_next: user-docs/settings/configuring-users-permissions-plugin-settings
---
-The  _Settings_ section in the main navigation of the admin panel includes all the required set-up information that determines how an administrator interacts with and manages their Strapi application.
+The _Settings_ section in the main navigation of the admin panel includes all the required set-up information that determines how an administrator interacts with and manages their Strapi application.
[Customize logo](/user-docs/settings/admin-panel)
[Manage and regenerate API tokens](/user-docs/settings/API-tokens)
[Manage content in different languages](/user-docs/settings/internationalization)
[Configure assets uploaded in Strapi application](/user-docs/settings/media-library-settings)
|
diff --git a/docusaurus/docs/user-docs/settings/media-library-settings.md b/docusaurus/docs/user-docs/settings/media-library-settings.md
index 40410d69b7..bcb39a624a 100644
--- a/docusaurus/docs/user-docs/settings/media-library-settings.md
+++ b/docusaurus/docs/user-docs/settings/media-library-settings.md
@@ -7,11 +7,9 @@ tags:
- plugins
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Configuring the Media Library
-The [Media Library](/user-docs/media-library) displays all assets uploaded in the Strapi application. The Media Library settings allow controlling the format, file size, and orientation of uploaded assets. Those settings can be configured from  *Settings > Global settings > Media Library*.
+The [Media Library](/user-docs/media-library) displays all assets uploaded in the Strapi application. The Media Library settings allow controlling the format, file size, and orientation of uploaded assets. Those settings can be configured from *Settings > Global settings > Media Library*.
-The [Releases](/user-docs/releases/introduction) feature enables content managers to organize entries into containers that can perform publish and unpublish actions simultaneously. The default timezone to use when scheduling a publication can be modified from  *Settings > Global settings > Releases*.
+The [Releases](/user-docs/releases/introduction) feature enables content managers to organize entries into containers that can perform publish and unpublish actions simultaneously. The default timezone to use when scheduling a publication can be modified from *Settings > Global settings > Releases*.
+# Managing Review Workflows
+
The Review Workflows feature allows you to create and manage workflows for your various content-types. Each workflow can consist of any review stages for your content, enabling your team to collaborate in the content creation flow from draft to publication.
@@ -24,9 +23,9 @@ The Review Workflows feature allows you to create and manage workflows for your
In many organizations different teams review different parts of content. By using different review workflows for different content-types, it is possible to adjust each workflow to the needs of each team involved.
-The default workflow is configured to have 4 stages: To do, In progress, Ready to review, and Reviewed. All 4 stages can be edited, reordered or deleted as needed, and it is also possible to add new stages.
+The default workflow is configured to have 4 stages: To do, In progress, Ready to review, and Reviewed. All 4 stages can be edited, reordered or deleted as needed, and it is also possible to add new stages. Additionally, any stage can be defined as a required stage for publishing, ensuring content must pass through that stage before it can be published.
-Before being available in the [Content Manager](/user-docs/content-manager/reviewing-content), review workflows must be configured from  *Settings > Global settings > Review Workflows*. The Review workflows settings are only available to users with the Super Admin role by default. Other roles must be granted the **Review workflows** permissions. See [Users, Roles, & Permissions](/user-docs/users-roles-permissions) for more information.
+Before being available in the [Content Manager](/user-docs/content-manager/reviewing-content), review workflows must be configured from *Settings > Global settings > Review Workflows*. The Review workflows settings are only available to users with the Super Admin role by default. Other roles must be granted the **Review workflows** permissions. See [Users, Roles, & Permissions](/user-docs/users-roles-permissions) for more information.
## Creating or editing a workflow
@@ -38,7 +37,7 @@ Before being available in the [Content Manager](/user-docs/content-manager/revie
}}
/>
-1. Click on the **Create new workflow** button or on the edit button  of a workflow.
+1. Click on the **Create new workflow** button or on the edit button of a workflow.
2. In the workflow edit interface, configure the new workflow:
| Setting name | Instructions |
@@ -46,6 +45,7 @@ Before being available in the [Content Manager](/user-docs/content-manager/revie
| Workflow name | Write a unique name of workflow. |
| Associated to | (optional) Assign this workflow to one or more existing content-types. |
| Stages | Add review stages (see [Adding a new stage](#adding-a-new-stage)). |
+ | Required stage | Define any stage as required for publishing. |
3. Click on the **Save** button. The new workflow will be displayed in the list-view and for every content-type assigned.
@@ -64,7 +64,7 @@ To add a new stage in the review workflows:
4. Select *Roles* that can change the stage, if the entity is currently in that review stage.
5. Click on the **Save** button.
-By default new stages are appended, but they can be reordered anytime using the  button.
+By default new stages are appended, but they can be reordered anytime using the button.
:::tip
To set up roles for each stage, you can either click "Apply to all stages" to apply the current roles to all other stages of the workflow or use "Duplicate stage" of the stage context menu.
@@ -80,7 +80,7 @@ To set up roles for each stage, you can either click "Apply to all stages" to ap
### Deleting a stage
-To delete a stage, click  in the context menu of the stage, then **Delete**.
+To delete a stage, click in the context menu of the stage, then **Delete**.
If you delete a stage that has pending reviews, the reviews will be moved to first stage in the workflow. Every workflow needs to
contain at least one stage and therefore it is not possible to delete the last stage.
@@ -88,7 +88,7 @@ contain at least one stage and therefore it is not possible to delete the last s
## Deleting a workflow
-To delete a workflow click on the delete button  of a workflow in the list view.
+To delete a workflow click on the delete button of a workflow in the list view.
:::note
It is not possible to delete the last workflow.
diff --git a/docusaurus/docs/user-docs/settings/single-sign-on.md b/docusaurus/docs/user-docs/settings/single-sign-on.md
index e9516d454b..941f327bfd 100644
--- a/docusaurus/docs/user-docs/settings/single-sign-on.md
+++ b/docusaurus/docs/user-docs/settings/single-sign-on.md
@@ -7,9 +7,8 @@ tags:
- Single Sign-On (SSO)
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
-# Configuring Single Sign-On (SSO)
+# Configuring Single Sign-On (SSO)
+
Single Sign-On (SSO) can be made available on a Strapi application to allow administrators to authenticate through an identity provider (e.g. Microsoft Azure Active Directory). SSO configurations can be done from  *Settings > Global settings > Single Sign-On*.
diff --git a/docusaurus/docs/user-docs/settings/transfer-tokens.md b/docusaurus/docs/user-docs/settings/transfer-tokens.md
index 3005e6788a..ab1e9b3e21 100644
--- a/docusaurus/docs/user-docs/settings/transfer-tokens.md
+++ b/docusaurus/docs/user-docs/settings/transfer-tokens.md
@@ -7,8 +7,6 @@ tags:
- transfer tokens
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Managing transfer tokens
:::prerequisites
@@ -17,7 +15,7 @@ import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
* A `transfer.token.salt` should be defined in the admin panel configuration file (see [Developer Documentation](/dev-docs/configurations/admin-panel)).
:::
-Transfer tokens allow users to authorize the `strapi transfer` CLI command (see [Developer Documentation](/dev-docs/data-management/transfer)). Administrators can manage API tokens from  *Settings > Global settings > Transfer Tokens*.
+Transfer tokens allow users to authorize the `strapi transfer` CLI command (see [Developer Documentation](/dev-docs/data-management/transfer)). Administrators can manage API tokens from *Settings > Global settings > Transfer Tokens*.
to edit a transfer token's name, description, or type, or [regenerate the token](#regenerating-a-transfer-token).
+- Click on the to delete a Transfer token.
## Creating a new transfer token
@@ -48,7 +46,7 @@ To create a new Transfer token:
| Token duration | Choose a token duration: *7 days*, *30 days*, *90 days*, or *Unlimited*. |
| Token type | Choose a token type:
*Push* to allow transfers from local to remote instances only,
*Pull* to allow transfers from remote to local instances only,
or *Full Access* to allow both types of transfer.
|
-3. Click on the **Save** button. The new Transfer token will be displayed at the top of the interface, along with a copy button .
+3. Click on the **Save** button. The new Transfer token will be displayed at the top of the interface, along with a copy button .
*Settings* sub navigation.
The *Administration panel* section is divided into 2 sub-sections: *Roles* and *Users* (see [Managing administrators](./managing-administrators)).
@@ -42,7 +40,7 @@ To create a new role, click on the **Add new role** button.
Clicking on the **Add new role** button will redirect you to the roles edition interface, where you will be able to edit the role's details and configure its permissions (see [Editing a role](#editing-roles-details)).
:::tip
-In the *Roles* interface, from the table, you can click on the duplicate button  to create a new role by duplicating an existing one.
+In the *Roles* interface, from the table, you can click on the duplicate button to create a new role by duplicating an existing one.
:::
## Deleting a role
@@ -51,7 +49,7 @@ Administrator roles can be deleted from the *Administration panel > Roles* inter
To delete a role:
-1. Click on the delete button  on the right side of the role's record.
+1. Click on the delete button on the right side of the role's record.
2. In the deletion window, click on the **Confirm** button to confirm the deletion.
## Editing a role
@@ -64,7 +62,7 @@ To delete a role:
}}
/>
-The role edition interface allows to edit the details of an administrator role as well as configure in detail the permissions to all sections of your Strapi application. It is accessible from *Administration panel > Roles* either after clicking on the edit button  on the right side of a role's record, or after clicking on the **Add new role** button (see [Creating a new role](#creating-a-new-role)).
+The role edition interface allows to edit the details of an administrator role as well as configure in detail the permissions to all sections of your Strapi application. It is accessible from *Administration panel > Roles* either after clicking on the edit button on the right side of a role's record, or after clicking on the **Add new role** button (see [Creating a new role](#creating-a-new-role)).
:::caution
It isn't possible to edit the permissions of the Super Admin role. All configurations are in read-only mode.
@@ -124,7 +122,7 @@ By default, plugins permissions can be configured for the Content-type Builder,
| Content-Manager |
Single types
"Configure view" - allows to configure the edit view of a single type
Collection types
"Configure view" - allows to configure the edit view of a collection type
Components
"Configure Layout" - allows to configure the layout of a component
|
| Content-Type-Builder |
General
"Read" - gives access to the Content-type Builder plugin in read-only mode
|
| Upload *(Media Library)* |
General
"Access the Media Library" - gives access to the Media Library plugin
"Configure view" - allows to configure the view of the Media Library
Assets
"Create (upload)" - allows to upload media files
"Update (crop, details, replace) + delete" - allows to edit uploaded media files
"Download" - allows to download uploaded media files
"Copy link" - allows to copy the link of an uploaded media file
|
-| Users-Permissions |
Roles
"Create" - allows to create end-user roles
"Read" - allows to see created end-user roles
"Update" - allows to edit end-user roles
"Delete" - allows to delete end-user roles
Providers
"Read" - allows to see providers
"Edit" - allows to edit providers
Email Templates
"Read" - allows to access the email templates
"Edit" - allows to edit email templates
Advanced settings
"Read" - allows to access the advanced settings of the Users & Permissions plugin
"Access the Media Library settings page" - gives access to Media Library settings
Path reminder to Media Library settings: *General > Settings > Global Settings - Media Library* |
+| Internationalization |
Locales
"Create" - allows to create new locales
"Read" - allows to see available locales
"Update" - allows to edit available locales
"Delete" - allows to delete locales
Path reminder to the Internationalization settings: *General > Settings > Global Settings - Internationalization* |
+| Review Workflows |
"Create" - allows to create workflows
"Read" - allows to see created workflows
"Update" - allows to edit workflows
"Delete" - allows to delete workflows
Path reminder to Review workflows settings: *General > Settings > Global Settings - Review workflows* |
+| Single sign on |
Options
"Read" - allows to access the SSO settings
"Update" - allows to edit the SSO settings
Path reminder to the SSO settings: *General > Settings > Global Settings - Single Sign-On* |
+| Audit Logs |
Options
"Read" - allows to access the Audit Logs settings
Path reminder to the Audit Logs settings: *General > Settings > Admin Panel - Audit Logs* |
| Plugins and Marketplace |
Marketplace
"Access the Marketplace" - gives access to the Marketplace
|
-| Webhooks |
General
"Create" - allows to create webhooks
"Read" - allows to see created webhooks
"Update" - allows to edit webhooks
"Delete" - allows to delete webhooks
👉 Path reminder to Webhook settings: *General > Settings > Global Settings - Webhook* |
-| Users and Roles |
Users
"Create (invite)" - allows to create administrator accounts
"Read" - allows to see existing administrator accounts
"Update" - allows to edit administrator accounts
"Delete" - allows to delete administrator accounts
Roles
"Create" - allows to create administrator roles
"Read" - allows to see created administrator roles
"Update" - allows to edit administrator roles
"Delete" - allows to delete administrator roles
👉 Path reminder to the RBAC feature: *General > Settings > Administration Panel* |
-| API Tokens |
API tokens
"Access the API tokens settings page" - toggles access to the API tokens page
General
"Create (generate)" - allows the creation of API tokens
"Read" - allows you to see created API tokens (disabling this permission will disable access to the *Global Settings - API Tokens* settings)
"Update" - allows editing of API tokens
"Delete (revoke)" - allows deletion of API tokens
"Regenerate" - allows regeneration of the API token
👉 Path reminder to API Tokens settings: *General > Settings > Global Settings - API Tokens* |
+| Webhooks |
General
"Create" - allows to create webhooks
"Read" - allows to see created webhooks
"Update" - allows to edit webhooks
"Delete" - allows to delete webhooks
Path reminder to Webhook settings: *General > Settings > Global Settings - Webhook* |
+| Users and Roles |
Users
"Create (invite)" - allows to create administrator accounts
"Read" - allows to see existing administrator accounts
"Update" - allows to edit administrator accounts
"Delete" - allows to delete administrator accounts
Roles
"Create" - allows to create administrator roles
"Read" - allows to see created administrator roles
"Update" - allows to edit administrator roles
"Delete" - allows to delete administrator roles
Path reminder to the RBAC feature: *General > Settings > Administration Panel* |
+| API Tokens |
API tokens
"Access the API tokens settings page" - toggles access to the API tokens page
General
"Create (generate)" - allows the creation of API tokens
"Read" - allows you to see created API tokens (disabling this permission will disable access to the *Global Settings - API Tokens* settings)
"Update" - allows editing of API tokens
"Delete (revoke)" - allows deletion of API tokens
"Regenerate" - allows regeneration of the API token
Path reminder to API Tokens settings: *General > Settings > Global Settings - API Tokens* |
| Project |
General
"Update the project level settings" - allows to edit the settings of the project
"Read the project level settings" - gives access to settings of the project
|
-| Transfer Tokens |
Transfer tokens
"Access the Transfer tokens settings page" - toggles access to the Transfer tokens page
General
"Create (generate)" - allows the creation of Transfer tokens
"Read" - allows you to see created Transfer tokens (disabling this permission will disable access to the *Global Settings - Transfer Tokens* settings)
"Update" - allows editing of Transfer tokens
"Delete (revoke)" - allows deletion of Transfer tokens
"Regenerate" - allows regeneration of the Transfer token
👉 Path reminder to Transfer Tokens settings: *General > Settings > Global Settings - Transfer Tokens* |
+| Transfer Tokens |
Transfer tokens
"Access the Transfer tokens settings page" - toggles access to the Transfer tokens page
General
"Create (generate)" - allows the creation of Transfer tokens
"Read" - allows you to see created Transfer tokens (disabling this permission will disable access to the *Global Settings - Transfer Tokens* settings)
"Update" - allows editing of Transfer tokens
"Delete (revoke)" - allows deletion of Transfer tokens
"Regenerate" - allows regeneration of the Transfer token
Path reminder to Transfer Tokens settings: *General > Settings > Global Settings - Transfer Tokens* |
@@ -156,7 +154,7 @@ Settings permissions can be configured for all settings accessible from *General
### Setting custom conditions for permissions
-For each permission of each category, a  **Settings** button is displayed. It allows to push the permission configuration further by defining additional conditions for the administrators to be granted the permission. There are 2 default additional conditions:
+For each permission of each category, a **Settings** button is displayed. It allows to push the permission configuration further by defining additional conditions for the administrators to be granted the permission. There are 2 default additional conditions:
- the administrator must be the creator,
- the administrator must have the same role as the creator.
@@ -175,17 +173,17 @@ Other custom conditions can be available if they have been created beforehand fo
To set custom conditions:
-1. Click on the  **Settings** button of the permission already granted for the role.
+1. Click on the **Settings** button of the permission already granted for the role.
2. In the *Define conditions* window, each available permission can be customized with a specific condition. Click on the drop-down list related to the permission you want to customize.
3. Define the custom condition for the chosen permission. You can either:
- Tick the Default option for all available additional conditions to be applied.
- - Click on the arrow button  to see the available additional conditions and tick only the chosen one(s).
+ - Click on the arrow button to see the available additional conditions and tick only the chosen one(s).
4. Click on the **Apply** button.
:::tip
-Once a custom condition is set for a permission, a dot is displayed next to the permission's name and the  **Settings** button.
+Once a custom condition is set for a permission, a dot is displayed next to the permission's name and the **Settings** button.
:::
:::caution
-Custom conditions can only be set for permissions that have been ticked to be granted for the role. If not, when clicking the  **Settings** button, the window that opens will remain empty, as no custom condition option will be available.
+Custom conditions can only be set for permissions that have been ticked to be granted for the role. If not, when clicking the **Settings** button, the window that opens will remain empty, as no custom condition option will be available.
:::
diff --git a/docusaurus/docs/user-docs/users-roles-permissions/configuring-end-users-roles.md b/docusaurus/docs/user-docs/users-roles-permissions/configuring-end-users-roles.md
index cfe4ff5e20..636a59c6f0 100644
--- a/docusaurus/docs/user-docs/users-roles-permissions/configuring-end-users-roles.md
+++ b/docusaurus/docs/user-docs/users-roles-permissions/configuring-end-users-roles.md
@@ -5,15 +5,13 @@ displayed_sidebar: userDocsSidebar
sidebar_position: 4
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Configuring end-user roles
End-users are the users who consume the content that is created and managed with a Strapi application and displayed on front-end applications (e.g. websites, mobile applications, connected devices etc.). Unlike the administrators, they do not have access to the admin panel.
With the [Users & Permissions plugin](../plugins/strapi-plugins#users-and-permissions) activated, it is possible to manage end users. This plugin is however not entirely managed and configured from one same place of the admin panel: end-user accounts are managed from the Content Manager (see [Managing end-user accounts](../users-roles-permissions/managing-end-users)) but end-user roles and permissions are managed in the Settings interface.
-The configurations of the end-user roles and permissions are available in the *Users & Permissions plugin* section of the  _Settings_ sub navigation.
+The configurations of the end-user roles and permissions are available in the *Users & Permissions plugin* section of the _Settings_ sub navigation.
above the table to use a text search and find one of your administrator roles more quickly!
:::
By default, 2 end-user roles are defined for any Strapi application:
@@ -57,8 +55,8 @@ Although the 2 default end-user roles cannot be deleted, the other ones can, as
To delete a role:
-1. Click on the delete button  on the right side of the role's record.
-2. In the deletion window, click on the  **Confirm** button to confirm the deletion.
+1. Click on the delete button on the right side of the role's record.
+2. In the deletion window, click on the **Confirm** button to confirm the deletion.
## Editing a role
@@ -70,7 +68,7 @@ To delete a role:
}}
/>
-The role edition interface allows to edit the details of an end-user role as well as to configure in detail the permissions to access the content of a front-end application. It is accessible from *Users & Permissions plugin > Roles* either after clicking on the edit button  on the right side of a role's record, or after clicking on the **Add new role** button (see [Creating a new role](#creating-a-new-role)).
+The role edition interface allows to edit the details of an end-user role as well as to configure in detail the permissions to access the content of a front-end application. It is accessible from *Users & Permissions plugin > Roles* either after clicking on the edit button on the right side of a role's record, or after clicking on the **Add new role** button (see [Creating a new role](#creating-a-new-role)).
### Editing role's details
diff --git a/docusaurus/docs/user-docs/users-roles-permissions/introduction-to-users-roles-permissions.md b/docusaurus/docs/user-docs/users-roles-permissions/introduction-to-users-roles-permissions.md
index 1ffdfd69f7..8b15945052 100644
--- a/docusaurus/docs/user-docs/users-roles-permissions/introduction-to-users-roles-permissions.md
+++ b/docusaurus/docs/user-docs/users-roles-permissions/introduction-to-users-roles-permissions.md
@@ -10,7 +10,7 @@ sidebar_position: 1
Some features of the admin panel, as well as the content managed with Strapi itself, are ruled by a system of permissions. These permissions can be assigned to roles, which are associated with the users who have access to the admin panel, the administrators. But it is also possible to grant permissions more publicly, to give access to content to the end users of your Strapi application.
-Depending on what users and their roles and permissions you want to manage, you should either use the Role Based Access Control (RBAC) feature, or the Users & Permissions plugin. Both are managed from  _Settings_, accessible from the main navigation of the admin panel.
+Depending on what users and their roles and permissions you want to manage, you should either use the Role Based Access Control (RBAC) feature, or the Users & Permissions plugin. Both are managed from _Settings_, accessible from the main navigation of the admin panel.
_Settings_ sub navigation.
The *Administration panel* section is divided into 2 sub-sections: *Roles* (see [Configuring administrator roles](configuring-administrator-roles.md)) and *Users*.
@@ -39,11 +38,11 @@ Sorting can be enabled for most fields displayed in the table. Click on a field
## Creating a new account
-On the top right side of the *Administration panel > Users* interface, a  **Invite new user** button is displayed. It allows to create a new administrator account for your Strapi application.
+On the top right side of the *Administration panel > Users* interface, a **Invite new user** button is displayed. It allows to create a new administrator account for your Strapi application.
To create a new administrator account:
-1. Click on the  **Invite new user** button.
+1. Click on the **Invite new user** button.
2. In the *Invite new user* window, fill in the Details information about the new administrator:
| User information | Instructions |
@@ -60,7 +59,7 @@ To create a new administrator account:
| Connect with SSO | (optional) Click **TRUE** or **FALSE** to connect the new administrator account with SSO. |
4. Click on the **Invite user** button in the bottom right corner of the *Add new user* window.
-5. A URL appears at the top of the window: it is the URL to send the new administrator for them to log in for the first time to your Strapi application. Click the copy button  to copy the URL.
+5. A URL appears at the top of the window: it is the URL to send the new administrator for them to log in for the first time to your Strapi application. Click the copy button to copy the URL.
6. Click on the **Finish** button in the bottom right corner to finish the new administrator account creation. The new administrator should now be listed in the table.
:::note
@@ -73,7 +72,7 @@ Administrator accounts can be deleted from the *Administration panel > Users* in
To delete an administrator:
-1. Click on the delete button  on the right side of the account's record, or select one or more accounts by ticking the boxes on the left side of the accounts' records then click on the  **Delete** button above the table.
+1. Click on the delete button on the right side of the account's record, or select one or more accounts by ticking the boxes on the left side of the accounts' records then click on the **Delete** button above the table.
2. In the deletion window, click on the **Confirm** button to confirm the deletion.
## Editing an account
@@ -106,7 +105,7 @@ To edit an administrator account:
3. (optional) In the *Roles* area, edit the role of the administrator:
- Click on the drop-down list to choose a new role, and/or add it to the already attributed one.
- - Click on the delete button  to delete an already attributed role.
+ - Click on the delete button to delete an already attributed role.
4. Click on the **Save** button in the top right corner.
diff --git a/docusaurus/docs/user-docs/users-roles-permissions/managing-end-users.md b/docusaurus/docs/user-docs/users-roles-permissions/managing-end-users.md
index 5eecb5674f..dc4303813a 100644
--- a/docusaurus/docs/user-docs/users-roles-permissions/managing-end-users.md
+++ b/docusaurus/docs/user-docs/users-roles-permissions/managing-end-users.md
@@ -5,13 +5,11 @@ displayed_sidebar: userDocsSidebar
sidebar_position: 5
---
-import NotV5 from '/docs/snippets/_not-updated-to-v5.md'
-
# Managing end-user accounts
End-users are the users who consume the content that is created and managed with a Strapi application and displayed on front-end applications (e.g. websites, mobile applications, connected devices etc.). Unlike the administrators, they do not have access to the admin panel.
-With the [Users & Permissions plugin](/user-docs/plugins/strapi-plugins#users-and-permissions) activated, it is possible to manage end users. This plugin is however not entirely managed and configured from one same place of the admin panel: end-user roles and permissions are managed in the  _Settings_ interface (see [Configuring end-user roles](../users-roles-permissions/configuring-end-users-roles)), but end-user accounts are managed from the  _Content Manager_.
+With the [Users & Permissions plugin](/user-docs/plugins/strapi-plugins#users-and-permissions) activated, it is possible to manage end users. This plugin is however not entirely managed and configured from one same place of the admin panel: end-user roles and permissions are managed in the _Settings_ interface (see [Configuring end-user roles](../users-roles-permissions/configuring-end-users-roles)), but end-user accounts are managed from the _Content Manager_.
With the Users & Permissions plugin, the end users and their account information are managed as a content-type. When the plugin is installed on a Strapi application, 3 collection types are automatically created (see [Users & Permissions plugin](/user-docs/plugins/strapi-plugins#users-and-permissions)), including "User" which is the only one available directly in the Content Manager.
@@ -39,7 +37,7 @@ To create a new end-user account:
| --------- | ---------------------------- |
| Username | Write the username of the end user. |
| Email | Write the complete email address of the end user in the textbox. |
-| Password | (optional) Write a new password in the textbox. You can click on the  icon for the password to be shown. |
+| Password | (optional) Write a new password in the textbox. You can click on the icon for the password to be shown. |
| Confirmed | (optional) Click **ON** for the end-user account to be confirmed. |
| Blocked | (optional) Click **ON** to block the account of the end user, to prevent them to access content. |
| Role | (optional) Indicate the role that should be granted to the new end user. If this field is not filled in, the end user will be attributed the role set as default (see [Managing Users & Permissions plugin settings](../settings/configuring-users-permissions-plugin-settings)). |
diff --git a/docusaurus/docusaurus.config.js b/docusaurus/docusaurus.config.js
index 5a84fe9ec6..51cb1f3447 100644
--- a/docusaurus/docusaurus.config.js
+++ b/docusaurus/docusaurus.config.js
@@ -1,7 +1,7 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
-const {themes} = require('prism-react-renderer');
+const { themes } = require('prism-react-renderer');
// const lightCodeTheme = themes.github;
const darkCodeTheme = themes.dracula;
@@ -24,6 +24,18 @@ const config = {
locales: ['en'],
},
+ headTags: [
+ {
+ // Useful for SEO even if we don't have multiple languages
+ tagName: 'link',
+ attributes: {
+ rel: 'alternate',
+ href: 'https://docs.strapi.io',
+ hreflang: 'en',
+ },
+ },
+ ],
+
markdown: {
mermaid: true,
},
@@ -80,12 +92,20 @@ const config = {
'data-project-name': 'Strapi',
'data-project-logo': 'https://strapi.io/assets/favicon-32x32.png',
'data-button-hide': 'true',
- 'data-modal-disclaimer': 'Disclaimer: Answers are AI-generated and might be inaccurate. Please ensure you double-check the information provided by visiting source pages.',
+ 'data-modal-disclaimer':
+ 'Disclaimer: Answers are AI-generated and might be inaccurate. Please ensure you double-check the information provided by visiting source pages.',
'data-project-color': '#4945FF',
'data-button-bg-color': '#32324D',
// 'data-modal-open-on-command-k': 'true',
- 'data-modal-override-open-class': "kapa-widget-button",
+ 'data-modal-override-open-class': 'kapa-widget-button',
'data-modal-title-ask-ai': 'Ask your question',
+ 'data-modal-border-radius': '4px',
+ 'data-submit-query-button-bg-color': '#4945FF',
+ 'data-modal-body-padding-top': '20px',
+ async: true,
+ },
+ {
+ src: `https://cdn.amplitude.com/script/181a95e5a6b8053f7ffb7da9f0ef7ef4.experiment.js`,
async: true,
},
],
@@ -104,7 +124,8 @@ const config = {
docs: {
routeBasePath: '/',
sidebarPath: require.resolve('./sidebars.js'),
- editUrl: 'https://github.com/strapi/documentation/edit/main/docusaurus',
+ editUrl:
+ 'https://github.com/strapi/documentation/edit/main/docusaurus',
admonitions: {
keywords: [
// Admonitions defaults
@@ -150,7 +171,7 @@ const config = {
announcementBar: {
id: 'support_us',
content:
- "You are viewing an experimental version of Strapi Docs 👨🏻🔬 Official docs for Strapi 5 are still hosted at docs.strapi.io.",
+ "Strapi Docs has a brand new design. We hope you like it! Please feel free to share your feedback",
backgroundColor: '#F3E5FA',
textColor: '#091E42',
isCloseable: true,
@@ -161,9 +182,9 @@ const config = {
},
},
algolia: {
- appId: '392RJ63O14',
- apiKey: 'ed62374a794e8da5accb298e13618614',
- indexName: 'strapiDocsv5beta',
+ appId: '392RJ63O14',
+ apiKey: 'ed62374a794e8da5accb298e13618614',
+ indexName: 'strapiDocsNextstrapiDocsNext',
},
navbar: {
hideOnScroll: false,
@@ -173,18 +194,25 @@ const config = {
srcDark: 'img/logo-v5-dark.png',
},
items: [
+ {
+ type: 'doc',
+ docId: 'user-docs/intro',
+ position: 'left',
+ // label: 'CMS',
+ html: ' User Guide',
+ },
{
type: 'doc',
docId: 'dev-docs/intro',
position: 'left',
// label: 'CMS',
- html: ' CMS'
+ html: ' Dev Docs',
},
{
type: 'doc',
docId: 'cloud/getting-started/intro',
position: 'left',
- html: ' Cloud',
+ html: ' Cloud Docs',
},
{
href: 'https://github.com/strapi/documentation',
@@ -201,44 +229,44 @@ const config = {
items: [
{
label: "What's new?",
- href: '/dev-docs/whats-new'
+ href: '/dev-docs/whats-new',
},
{
- label: "Release notes",
- href: '/release-notes'
+ label: 'Release notes',
+ href: '/release-notes',
},
{
- label: "FAQ",
- href: '/dev-docs/faq'
+ label: 'FAQ',
+ href: '/dev-docs/faq',
},
{
- label: "Community & Support",
- href: '/dev-docs/community'
+ label: 'Community & Support',
+ href: '/dev-docs/community',
},
{
- label: "Usage information",
- href: '/dev-docs/usage-information'
+ label: 'Usage information',
+ href: '/dev-docs/usage-information',
},
- ]
+ ],
},
{
title: 'Additional resources',
items: [
{
label: 'v4 Docs',
- href: 'https://docs-v4.strapi.io'
+ href: 'https://docs-v4.strapi.io',
},
{
label: 'Contributor Docs',
- href: 'https://contributor.strapi.io'
+ href: 'https://contributor.strapi.io',
},
{
label: 'Strapi Design System',
- href: 'https://design-system.strapi.io/'
+ href: 'https://design-system.strapi.io/',
},
{
label: 'v3 Docs (unsupported)',
- href: 'https://docs-v3.strapi.io'
+ href: 'https://docs-v3.strapi.io',
},
],
},
@@ -305,6 +333,7 @@ const config = {
* related to the Docusaurus canary build or not.
*/
],
+ clientModules: [require.resolve('./src/analytics/amplitude.js')],
};
module.exports = config;
diff --git a/docusaurus/package.json b/docusaurus/package.json
index 3533fa0ab5..7b95f94db7 100644
--- a/docusaurus/package.json
+++ b/docusaurus/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-docs",
- "version": "5.1.0",
+ "version": "5.5.2",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
@@ -14,6 +14,7 @@
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
+ "@amplitude/analytics-browser": "^2.11.11",
"@docusaurus/core": "3.5.2",
"@docusaurus/plugin-client-redirects": "3.5.2",
"@docusaurus/plugin-google-tag-manager": "3.5.2",
@@ -26,6 +27,7 @@
"docusaurus-plugin-hubspot": "^1.0.1",
"docusaurus-plugin-image-zoom": "^0.1.1",
"docusaurus-plugin-sass": "^0.2.3",
+ "docusaurus2-dotenv": "^1.4.0",
"embla-carousel-autoplay": "^7.1.0",
"embla-carousel-react": "^7.1.0",
"embla-carousel-wheel-gestures": "^3.0.0",
diff --git a/docusaurus/release-notes-script.sh b/docusaurus/release-notes-script.sh
new file mode 100755
index 0000000000..094f43041f
--- /dev/null
+++ b/docusaurus/release-notes-script.sh
@@ -0,0 +1,306 @@
+#!/bin/bash
+
+# Terminal colors
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+BLUE='\033[0;34m'
+NC='\033[0m'
+
+REPO="strapi/documentation"
+OUTPUT_DIR="docs"
+OUTPUT_FILE="$OUTPUT_DIR/temp-new-release-notes.md"
+TEMP_DIR="/tmp/release-notes-$$"
+
+# Create temporary directory at the start
+mkdir -p "$TEMP_DIR"
+
+# Make sure to clean up temp directory on exit
+trap 'rm -rf "$TEMP_DIR"' EXIT
+
+# GitHub Configuration
+setup_github_auth() {
+ if [ -z "$GITHUB_TOKEN" ]; then
+ if [ -f ~/.github_token ]; then
+ GITHUB_TOKEN=$(cat ~/.github_token)
+ else
+ echo -e "${BLUE}No GitHub token found.${NC}"
+ echo -e "Please create a token at https://github.com/settings/tokens"
+ echo -n "Enter your GitHub token: "
+ read -r GITHUB_TOKEN
+ echo -n "Do you want to save this token for later use? (y/N) "
+ read -r save_token
+ if [[ "$save_token" =~ ^[Yy]$ ]]; then
+ echo "$GITHUB_TOKEN" > ~/.github_token
+ chmod 600 ~/.github_token
+ echo -e "${GREEN}Token saved in ~/.github_token${NC}"
+ fi
+ fi
+ fi
+}
+
+# Function to make GitHub API requests
+gh_api_get() {
+ local endpoint="$1"
+ curl -s -H "Authorization: token $GITHUB_TOKEN" \
+ -H "Accept: application/vnd.github.v3+json" \
+ "https://api.github.com/repos/$REPO/$endpoint"
+}
+
+# Function to select a milestone
+select_milestone() {
+ # Ask about including closed milestones
+ milestone_state="open" # Default to open
+ echo -e "${BLUE}Do you want to include closed milestones? (y/N)${NC}"
+ read -r include_closed
+ # Only change if explicitly answered yes
+ if [[ "$include_closed" =~ ^[Yy]$ ]]; then
+ milestone_state="all"
+ fi
+
+ echo -e "${BLUE}Fetching milestones...${NC}"
+ milestones=$(gh_api_get "milestones?state=$milestone_state&sort=created&direction=desc")
+
+ if [ "$(echo "$milestones" | jq length)" -eq 0 ]; then
+ echo -e "${RED}No milestones found${NC}"
+ exit 1
+ fi
+
+ # Create temporary file with milestone options
+ echo "$milestones" | jq -r '.[] | "\(.number)) \(.title)"' > "$TEMP_DIR/milestones.txt"
+
+ # Read options into array
+ local options=()
+ while IFS= read -r line; do
+ options+=("$line")
+ done < "$TEMP_DIR/milestones.txt"
+
+ local total=${#options[@]}
+
+ if [ $total -eq 0 ]; then
+ echo -e "${RED}No options available${NC}"
+ return 1
+ fi
+
+ # Save terminal state and setup cleanup
+ saved_tty="$(stty -g 2>/dev/null)"
+
+ cleanup() {
+ printf "\033[?25h" # Show cursor
+ if [ -n "$saved_tty" ]; then
+ stty "$saved_tty" 2>/dev/null
+ fi
+ }
+
+ trap cleanup EXIT INT TERM
+
+ # Prepare terminal
+ printf "\033[?25l" # Hide cursor
+ stty raw -echo 2>/dev/null
+
+ # Initialize selection
+ local selected=0
+
+ # Main selection loop
+ while true; do
+ # Clear screen and display header
+ printf "\033[H\033[2J" # Move to top and clear screen
+ printf "${BLUE}Use arrows to select a milestone (Enter to confirm, 'q' to quit):${NC}\n\n"
+
+ # Display all options with absolute positioning
+ for ((i=0; i %s${NC}" "${options[$i]}"
+ else
+ printf " %s" "${options[$i]}"
+ fi
+ done
+
+ # Read user input
+ IFS= read -r -n1 input
+
+ case "$input" in
+ $'\x1b') # ESC sequence
+ read -r -n2 seq
+ case "$seq" in
+ '[A') # Up arrow
+ if [ $selected -gt 0 ]; then
+ ((selected--))
+ fi
+ ;;
+ '[B') # Down arrow
+ if [ $selected -lt $((total - 1)) ]; then
+ ((selected++))
+ fi
+ ;;
+ esac
+ ;;
+ ''|$'\x0a') # Enter
+ cleanup
+ printf "\033[H\033[2J" # Clear screen
+ SELECTED_OPTION="${options[$selected]}"
+ MILESTONE=$(echo "${SELECTED_OPTION}" | cut -d')' -f1)
+ MILESTONE_TITLE=$(echo "$milestones" | jq -r ".[] | select(.number==$MILESTONE) | .title")
+ printf "${GREEN}Selected: %s${NC}\n" "$SELECTED_OPTION"
+ return 0
+ ;;
+ 'q'|$'\x03') # q or Ctrl-C
+ cleanup
+ printf "\033[H\033[2J" # Clear screen
+ printf "Selection cancelled\n"
+ return 1
+ ;;
+ esac
+ done
+}
+
+# Main function
+main() {
+ # Check if docs/ directory exists
+ if [ ! -d "$OUTPUT_DIR" ]; then
+ echo -e "${RED}Directory $OUTPUT_DIR does not exist. Creating...${NC}"
+ mkdir -p "$OUTPUT_DIR"
+ fi
+
+ setup_github_auth
+ select_milestone
+
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+
+ echo -e "${BLUE}Generating release notes for milestone $MILESTONE_TITLE...${NC}"
+
+ # Initialize file
+ rm -f "$OUTPUT_FILE"
+ echo "## $MILESTONE_TITLE" > "$OUTPUT_FILE"
+
+ # Fetch PRs
+ prs=$(gh_api_get "issues?milestone=$MILESTONE&state=closed&pull_request")
+
+ # Process each PR
+ echo "$prs" | jq -c '.[]' | while read -r pr; do
+ title=$(echo "$pr" | jq -r '.title')
+ url=$(echo "$pr" | jq -r '.html_url')
+ labels=$(echo "$pr" | jq -r '.labels[].name')
+ user=$(echo "$pr" | jq -r '.user.login')
+ avatar_url=$(echo "$pr" | jq -r '.user.avatar_url')
+
+ pr_entry="- [$title]($url)"
+
+ # Determine section
+ section=""
+ if echo "$labels" | grep -q "pr: new content"; then
+ section="new_content"
+ elif echo "$labels" | grep -q "pr: updated content"; then
+ section="updated_content"
+ elif echo "$labels" | grep -q "pr: fix\|pr: chore"; then
+ section="chore"
+ fi
+
+ # If a section was identified
+ if [ -n "$section" ]; then
+ # Determine source
+ source="repo"
+ if echo "$labels" | grep -q "source: Dev Docs"; then
+ source="dev_docs"
+ elif echo "$labels" | grep -q "source: User Guide"; then
+ source="user_guide"
+ elif echo "$labels" | grep -q "source: Strapi Cloud"; then
+ source="cloud"
+ fi
+
+ # Create section file if it doesn't exist
+ case "$section" in
+ "new_content")
+ echo "### New content" > "$TEMP_DIR/${section}_header"
+ ;;
+ "updated_content")
+ echo "### Updated content" > "$TEMP_DIR/${section}_header"
+ ;;
+ "chore")
+ echo "### Chore, fixes, typos, and other improvements" > "$TEMP_DIR/${section}_header"
+ ;;
+ esac
+
+ # Create source file if it doesn't exist
+ case "$source" in
+ "dev_docs")
+ echo "#### Dev Docs" > "$TEMP_DIR/${section}_${source}_header"
+ ;;
+ "user_guide")
+ echo "#### User Guide" > "$TEMP_DIR/${section}_${source}_header"
+ ;;
+ "cloud")
+ echo "#### Strapi Cloud" > "$TEMP_DIR/${section}_${source}_header"
+ ;;
+ "repo")
+ echo "#### Repository" > "$TEMP_DIR/${section}_${source}_header"
+ ;;
+ esac
+
+ # Add entry
+ echo "$pr_entry" >> "$TEMP_DIR/${section}_${source}_content"
+ fi
+
+ # Save contributor information
+ echo "$user|$avatar_url" >> "$TEMP_DIR/contributors_raw"
+ done
+
+ # Assemble final file
+ first_section=true
+ for section in "new_content" "updated_content" "chore"; do
+ has_content=false
+
+ # Check if we have content for this section
+ for source in "dev_docs" "user_guide" "cloud" "repo"; do
+ if [ -f "$TEMP_DIR/${section}_${source}_content" ] && [ -s "$TEMP_DIR/${section}_${source}_content" ]; then
+ has_content=true
+ break
+ fi
+ done
+
+ # If we have content, add the section and its subsections
+ if [ "$has_content" = true ]; then
+ if [ "$first_section" = true ]; then
+ first_section=false
+ else
+ echo "" >> "$OUTPUT_FILE"
+ fi
+
+ cat "$TEMP_DIR/${section}_header" >> "$OUTPUT_FILE"
+
+ first_subsection=true
+ for source in "dev_docs" "user_guide" "cloud" "repo"; do
+ if [ -f "$TEMP_DIR/${section}_${source}_content" ] && [ -s "$TEMP_DIR/${section}_${source}_content" ]; then
+ echo "" >> "$OUTPUT_FILE"
+ cat "$TEMP_DIR/${section}_${source}_header" >> "$OUTPUT_FILE"
+ cat "$TEMP_DIR/${section}_${source}_content" >> "$OUTPUT_FILE"
+ fi
+ done
+ fi
+ done
+
+ # Add contributors if any
+ if [ -f "$TEMP_DIR/contributors_raw" ] && [ -s "$TEMP_DIR/contributors_raw" ]; then
+ echo -e "\n***" >> "$OUTPUT_FILE"
+ echo "This release was made possible thanks to the following contributors. Thank you! 🫶" >> "$OUTPUT_FILE"
+ echo "
" >> "$OUTPUT_FILE"
+
+ # Sort and deduplicate contributors
+ sort -u "$TEMP_DIR/contributors_raw" | while IFS='|' read -r user avatar_url; do
+ cat >> "$OUTPUT_FILE" << EOF
+
+
+
+EOF
+ done
+
+ echo "