diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d6409daa96..dc1043b826 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -36,7 +36,7 @@ The core team will review your pull request and will either merge it, request ch
- You installed the following softwares:
- - [Node](https://nodejs.org/en/) at v12 only (Node v13+ are not supported)
+ - [Node](https://nodejs.org/en/) at v14 only (Node v15+ are not supported)
- [Yarn](https://yarnpkg.com/en/) at v1.2.0+. **Please use yarn**, not npm, as we maintain a `yarn.lock` file instead of `package-lock.json`
- You are familiar with Git.
diff --git a/README.md b/README.md
index 2c6af7496a..8c0a1a15e9 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ Strapi is a free and open-source headless CMS delivering your content anywhere y
The following are required if you are submitting pull requests to the documentation. For more information on how to contribute please see our [contribution guide](./CONTRIBUTING.md)
-- NodeJS >=12.x <=14.x
+- NodeJS >=12.22.0 <=14.x
- NPM >= 6.x
- Yarn >= 1.22.x
diff --git a/docs/.vuepress/config/plugins.js b/docs/.vuepress/config/plugins.js
index 467b7821a9..58c96a2027 100644
--- a/docs/.vuepress/config/plugins.js
+++ b/docs/.vuepress/config/plugins.js
@@ -43,6 +43,12 @@ const plugins = [
},
],
['@vuepress/back-to-top', {}],
+ [
+ '@vuepress/html-redirect',
+ {
+ duration: 0,
+ },
+ ],
[
'vuepress-plugin-container',
{
@@ -149,25 +155,29 @@ const plugins = [
type: 'grid',
defaultTitle: '',
},
- ], [
+ ],
+ [
'vuepress-plugin-container',
{
type: 'grid-top-left',
defaultTitle: '',
},
- ], [
+ ],
+ [
'vuepress-plugin-container',
{
type: 'grid-top-right',
defaultTitle: '',
},
- ], [
+ ],
+ [
'vuepress-plugin-container',
{
type: 'grid-bottom-left',
defaultTitle: '',
},
- ], [
+ ],
+ [
'vuepress-plugin-container',
{
type: 'grid-bottom-right',
diff --git a/docs/.vuepress/redirects b/docs/.vuepress/redirects
new file mode 100644
index 0000000000..73b7a11d68
--- /dev/null
+++ b/docs/.vuepress/redirects
@@ -0,0 +1,2 @@
+/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to4.0.6.html /developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.0+-to-4.0.6.html
+/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to-4.1.8.html /developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.6+-to-4.1.8.html
diff --git a/docs/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.md b/docs/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.md
index 4685336322..df37998bf0 100644
--- a/docs/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.md
+++ b/docs/developer-docs/latest/developer-resources/database-apis-reference/rest/populating-fields.md
@@ -91,10 +91,6 @@ Queries can accept a `populate` parameter to explicitly define which fields to p
If the users-permissions plugin is installed, the `find` permission must be enabled for the content-types that are being populated. **If a role doesn't have access to a content-type it will not be populated.**
:::
-:::note
-https://github.com/ljharb/qs
-:::
-
#### Populate 1 level for all relations
To populate one-level deep for all relations, use the `*` wildcard in combination with the `populate` parameter:
diff --git a/docs/developer-docs/latest/developer-resources/plugin-api-reference/admin-panel.md b/docs/developer-docs/latest/developer-resources/plugin-api-reference/admin-panel.md
index 33ccd95a04..b1ddd9270a 100644
--- a/docs/developer-docs/latest/developer-resources/plugin-api-reference/admin-panel.md
+++ b/docs/developer-docs/latest/developer-resources/plugin-api-reference/admin-panel.md
@@ -617,37 +617,42 @@ export default {
#### Predefined hook
-Strapi includes a predefined `cm/inject-column-in-table` hook that can be used to add or mutate a column of the List View of the [Content Manager](/user-docs/latest/content-manager/introduction-to-content-manager.md).
+Strapi includes a predefined `Admin/CM/pages/ListView/inject-column-in-table` hook that can be used to add or mutate a column of the List View of the [Content Manager](/user-docs/latest/content-manager/introduction-to-content-manager.md).
-::: details Example: 'cm/inject-column-in-table' hook, as used by the Internationalization plugin to add the 'Content available in' column
+::: details Example: 'Admin/CM/pages/ListView/inject-column-in-table' hook, as used by the Internationalization plugin to add the 'Content available in' column
```jsx
// ./plugins/my-plugin/admin/src/index.js
+import get from 'lodash/get';
+import cellFormatter from './components/cellFormatter';
export default {
bootstrap(app) {
- app.registerHook('cm/inject-column-in-table', ({ displayedHeaders, layout }) => {
+ app.registerHook('Admin/CM/pages/ListView/inject-column-in-table', ({ displayedHeaders, layout }) => {
const isFieldLocalized = get(layout, 'contentType.pluginOptions.i18n.localized', false);
if (!isFieldLocalized) {
- return displayedHeaders;
+ return { displayedHeaders, layout };
}
- return [
- ...displayedHeaders,
- {
- key: '__locale_key__', // Needed for the table
- fieldSchema: { type: 'string' }, // Schema of the attribute
- metadatas: {
- label: 'Content available in', // Label of the header,
- sortable: false|true // Define in the column is sortable
- }, // Metadatas for the label
- // Name of the key in the data we will display
- name: 'locales',
- // Custom renderer
- cellFormatter: props =>
Object.keys(props).map(key =>
key
)
,
- },
- ];
+ return {
+ layout,
+ displayedHeaders: [
+ ...displayedHeaders,
+ {
+ key: '__locale_key__', // Needed for the table
+ fieldSchema: { type: 'string' }, // Schema of the attribute
+ metadatas: {
+ label: 'Content available in', // Label of the header,
+ sortable: true|false // Define if the column is sortable
+ }, // Metadatas for the label
+ // Name of the key in the data we will display
+ name: 'locales',
+ // Custom renderer: props => Object.keys(props).map(key => key
)
+ cellFormatter,
+ },
+ ]
+ };
});
},
}
diff --git a/docs/developer-docs/latest/development/backend-customization/models.md b/docs/developer-docs/latest/development/backend-customization/models.md
index f4bacd6311..8a044858ee 100644
--- a/docs/developer-docs/latest/development/backend-customization/models.md
+++ b/docs/developer-docs/latest/development/backend-customization/models.md
@@ -76,8 +76,8 @@ The `info` key in the model's schema describes information used to display the m
| Parameter | Type | Description |
| -------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `displayName` | String | Default name to use in the admin panel |
-| `singularName` | String | Singular form of the collection type name.
Used to generate the API routes and databases/tables collection.
Should be kebab-case. |
-| `pluralName` | String | Plural form of the collection type name.
Used to generate the API routes and databases/tables collection.
Should be kebab-case. |
+| `singularName` | String | Singular form of the content-type name.
Used to generate the API routes and databases/tables collection.
Should be kebab-case. |
+| `pluralName` | String | Plural form of the content-type name.
Used to generate the API routes and databases/tables collection.
Should be kebab-case. |
| `description` | String | Description of the model |
| `icon`
_Optional,_
_only for Components_ | String | [FontAwesome](https://fontawesome.com/) (v5) icon name to use for the component's icon in the admin panel
@@ -540,7 +540,6 @@ The `options` key is used to define specific behaviors and accepts the following
| Parameter | Type | Description |
| ----------------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `privateAttributes` | Array of strings | Allows treating a set of attributes as private, even if they're not actually defined as attributes in the model. It could be used to remove them from API responses timestamps.
The set of `privateAttributes` defined in the model are merged with the `privateAttributes` defined in the global Strapi configuration. |
-| `populateCreatorFields` | Boolean | Toggles including the `created_by` and `updated_by` fields in the API response.
Default value: `false` |
| `draftAndPublish` | Boolean | Enables the draft and publish feature.
Default value: `false` |
```json
@@ -549,7 +548,6 @@ The `options` key is used to define specific behaviors and accepts the following
{
"options": {
"privateAttributes": ["id", "created_at"],
- "populateCreatorFields": true,
"draftAndPublish": false
}
}
diff --git a/docs/developer-docs/latest/development/backend-customization/services.md b/docs/developer-docs/latest/development/backend-customization/services.md
index 2f0e09545a..9883fbc47e 100644
--- a/docs/developer-docs/latest/development/backend-customization/services.md
+++ b/docs/developer-docs/latest/development/backend-customization/services.md
@@ -84,7 +84,7 @@ const transporter = nodemailer.createTransport({
},
});
-module.exports = createCoreService('api::restaurant.restaurant', ({ strapi }) => ({
+module.exports = createCoreService('api::email.email', ({ strapi }) => ({
send(from, to, subject, text) {
// Setup e-mail data.
const options = {
diff --git a/docs/developer-docs/latest/development/plugins-extension.md b/docs/developer-docs/latest/development/plugins-extension.md
index 63517c029b..4cc3181314 100644
--- a/docs/developer-docs/latest/development/plugins-extension.md
+++ b/docs/developer-docs/latest/development/plugins-extension.md
@@ -89,7 +89,7 @@ module.exports = (plugin) => {
plugin.policies[newPolicy] = (ctx) => {};
- plugin.routes.push({
+ plugin.routes['content-api'].routes.push({
method: 'GET',
path: '/route-path',
handler: 'controller.action',
diff --git a/docs/developer-docs/latest/development/plugins/graphql.md b/docs/developer-docs/latest/development/plugins/graphql.md
index 22c82435de..49c9f559bd 100644
--- a/docs/developer-docs/latest/development/plugins/graphql.md
+++ b/docs/developer-docs/latest/development/plugins/graphql.md
@@ -85,13 +85,15 @@ Please note the setting for GraphQL `tracing` as changed and has been moved to `
module.exports = {
//
graphql: {
- endpoint: '/graphql',
- shadowCRUD: true,
- playgroundAlways: false,
- depthLimit: 7,
- amountLimit: 100,
- apolloServer: {
- tracing: false,
+ config: {
+ endpoint: '/graphql',
+ shadowCRUD: true,
+ playgroundAlways: false,
+ depthLimit: 7,
+ amountLimit: 100,
+ apolloServer: {
+ tracing: false,
+ },
},
},
};
diff --git a/docs/developer-docs/latest/plugins/upload.md b/docs/developer-docs/latest/plugins/upload.md
index 948874996a..4ae40427de 100644
--- a/docs/developer-docs/latest/plugins/upload.md
+++ b/docs/developer-docs/latest/plugins/upload.md
@@ -107,13 +107,15 @@ module.exports = ({ env }) => ({
## Upload files
-To upload files into your application.
+To upload files to your application.
### Parameters
- `files`: The file(s) to upload. The value(s) can be a Buffer or Stream.
-### Code example
+
+
+
```html
```
+
+
+
+
+```js
+import { FormData, Blob } from "formdata-node"
+import { FormDataEncoder } from "form-data-encoder"
+import { Readable } from "stream"
+import fetch from 'node-fetch';
+import fs from 'fs';
+
+const file = fs.createReadStream('path-to-your-file');
+const form = new FormData();
+
+form.append('files', file);
+
+const encoder = new FormDataEncoder(form);
+
+await fetch('http://localhost:1337/api/upload', {
+ method: "post",
+ headers: encoder.headers,
+ body: Readable.from(encoder)
+});
+```
+
+
+
+
+
:::caution
You have to send FormData in your request body.
:::
@@ -189,16 +219,15 @@ Code
```
@@ -245,44 +274,36 @@ Code
```
-Your entry data has to be contained in a `data` key. You have to `JSON.stringify` your data object.
-
-And for your files, they have to be prefixed by `files`.
-Example here with cover attribute `files.cover`.
+Your entry data has to be contained in a `data` key and you need to `JSON.stringify` this object. The keys for files, need to be prefixed with `files` (example with a cover attribute: `files.cover`).
::: tip
If you want to upload files for a component, you will have to specify the index of the item you want to add the file to.
diff --git a/docs/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.md b/docs/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.md
index 8e70f66a61..afde00b26f 100644
--- a/docs/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.md
+++ b/docs/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.md
@@ -7,6 +7,7 @@ canonicalUrl: https://docs.strapi.io/developer-docs/latest/setup-deployment-guid
# Environment configuration and variables
Strapi provides environment variables that can be used in configuration files. An `env()` utility can be used to [retrieve the value of environment variables](#configuration-using-environment-variables) and [cast variables to different types](#casting-environment-variables), and specific [configurations for different environments](#environment-configurations) can be created.
+
## Strapi's environment variables
Strapi provides the following environment variables:
@@ -17,7 +18,7 @@ Strapi provides the following environment variables:
| `STRAPI_HIDE_STARTUP_MESSAGE` | Don't show the startup message in the terminal | `Boolean` | `false` |
| `STRAPI_TELEMETRY_DISABLED` | Don't send telemetry usage data to Strapi | `Boolean` | `false` |
| `STRAPI_LICENSE` | The license key to activate the Enterprise Edition | `String` | `undefined` |
-| `NODE_ENV` | Type of environment where the app is running | `String` | `'development'` |
+| `NODE_ENV` | Type of environment where the app is running.
`production` enables specific behaviors (see [Node.js documentation](https://nodejs.dev/learn/nodejs-the-difference-between-development-and-production) for details) | `String` | `'development'` |
| `BROWSER` | Open the admin panel in the browser after startup | `Boolean` | `true` |
| `ENV_PATH` | Path to the file that contains your environment variables | `String` | `'./.env'` |
| `STRAPI_PLUGIN_I18N_INIT_LOCALE_CODE`
_Optional_ | Initialization locale for the app, if the [Internationalization (i18n) plugin](/developer-docs/latest/plugins/i18n.md) is installed and enabled on Content-Types (see [Configuration of i18n in production environments](/developer-docs/latest/plugins/i18n.md#configuration-of-the-default-locale)) | `String` | `'en'` |
@@ -115,7 +116,7 @@ With these configuration files the server will start on various ports depending
```bash
yarn start # uses host 127.0.0.1
-NODE_ENV=production yarn start # uses host 0.0.0.0
+NODE_ENV=production yarn start # uses host defined in .env. If not defined, uses 0.0.0.0
HOST=10.0.0.1 NODE_ENV=production yarn start # uses host 10.0.0.1
```
diff --git a/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/amazon-aws.md b/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/amazon-aws.md
index b657e8ffc1..494b3aaabe 100644
--- a/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/amazon-aws.md
+++ b/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/amazon-aws.md
@@ -77,7 +77,7 @@ In the top menu, near your IAM Account User name, select, from the dropdown, the
#### 3. Click on the orange `Launch Instance` button
-- `Select` **Ubuntu Server 18.04 LTS (HVM), SSD Volume Type**
+- `Select` **Ubuntu Server 22.04 LTS (HVM), SSD Volume Type**
- Ensure `General purpose` + `t2.small` is `checked`.
::: tip
`t2.small` is the smallest instance type in which Strapi runs. `t2.nano` and `t2.micro` **DO NOT** work. At the moment, deploying the Strapi Admin interface requires more than 1g of RAM. Therefore, **t2.small** or larger instance is needed.
@@ -179,7 +179,7 @@ You will set-up your EC2 server as a Node.js server. Including basic configurati
You will need your **EC2** ip address:
- In the `AWS Console`, navigate to the `AWS EC2`. In the top menu, click on `Services` and do a search for `ec2`, click on `Virtual Servers in the cloud`.
-- Click on `1 Running Instance` and note the `IPv4 Public OP` address. E.g. `34.182.83.134`.
+- Click on `1 Running Instance` and note the `IPv4 Public OP` address. E.g. `1.2.3.4`.
#### 1. Setup the `.pem` file
@@ -196,37 +196,37 @@ chmod 400 ~/.ssh/ec2-strapi-key-pair.pem
#### 2. Log in to your server as the default `ubuntu` user:
::: tip
-In the future, each time you log into your `EC2` server, you will need to add the path to the .pem file, e.g. `ssh -i ~/.ssh/ec2-strapi-key-pair.pem ubuntu@12.123.123.11`.
+In the future, each time you log into your `EC2` server, you will need to add the path to the .pem file and add the IP address for your EC2 instance at the end, e.g. `ssh -i ~/.ssh/ec2-strapi-key-pair.pem ubuntu@1.2.3.4`.
:::
```bash
-ssh -i ~/.ssh/ec2-strapi-key-pair.pem ubuntu@12.123.123.11
+ssh -i ~/.ssh/ec2-strapi-key-pair.pem ubuntu@1.2.3.4
-Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1032-aws x86_64)
+Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 4.15.0-1032-aws x86_64)
...
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.
-ubuntu@ip-12.123.123.11:~$
+ubuntu@ip-1.2.3.4:~$
```
#### 3. Install **Node.js** with **npm**:
-Strapi currently supports `Node.js v12.x.x`. The following steps will install Node.js onto your EC2 server.
+Strapi currently supports `Node.js v14.x.x`. The following steps will install Node.js onto your EC2 server.
```bash
cd ~
-curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
+curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
...
sudo apt-get install nodejs
...
node -v && npm -v
```
-The last command `node -v && npm -v` should output two versions numbers, eg. `v12.x.x, 6.x.x`.
+The last command `node -v && npm -v` should output two versions numbers, eg. `v14.x.x, 6.x.x`.
#### 4. Create and change npm's default directory.
@@ -412,10 +412,10 @@ sudo nano ecosystem.config.js
module.exports = {
apps: [
{
- name: 'your-app-name',
- cwd: '/home/ubuntu/my-project',
- script: 'npm',
- args: 'start',
+ name: 'your-app-name', // Your project name
+ cwd: '/home/ubuntu/my-project', // Path to your project
+ script: 'npm', // For this example we're using npm, could also be yarn
+ args: 'start', // Script to start the Strapi server, `start` by default
env: {
NODE_ENV: 'production',
DATABASE_HOST: 'your-unique-url.rds.amazonaws.com', // database Endpoint under 'Connectivity & Security' tab
@@ -456,7 +456,7 @@ cd ~
pm2 start ecosystem.config.js
```
-Your Strapi project should now be available on `http://your-ip-address:1337/`.
+Your Strapi project should now be available on `http://your-ip-address:1337/`. Your IP address will be the one corresponding to your Ubuntu server.
::: tip
Earlier, `Port 1337` was allowed access for **testing and setup** purposes. After setting up **NGINX**, the **Port 1337** needs to have access **denied**.
diff --git a/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/azure.md b/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/azure.md
index debaf1942a..497dbad6fe 100644
--- a/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/azure.md
+++ b/docs/developer-docs/latest/setup-deployment-guides/deployment/hosting-guides/azure.md
@@ -144,7 +144,7 @@ In this section, we'll use the [Azure CLI](https://docs.microsoft.com/cli/azure/
# Add a container to the storage account
container=strapi-uploads
- az storage container create --name $container --public-access blob --access-key $saKey --account-name $saName
+ az storage container create --name $container --public-access blob --account-key $saKey --account-name $saName
```
5. Create a MySQL database.
@@ -196,7 +196,7 @@ To start the Node.js application, AppService will run the `npm start` command. A
```json
"scripts": {
- "start": "node node_modules/strapi/bin/strapi.js start"
+ "start": "node node_modules/@strapi/strapi/bin/strapi.js start"
}
```
diff --git a/docs/developer-docs/latest/update-migration-guides/migration-guides.md b/docs/developer-docs/latest/update-migration-guides/migration-guides.md
index 3676335cd7..d69423318b 100644
--- a/docs/developer-docs/latest/update-migration-guides/migration-guides.md
+++ b/docs/developer-docs/latest/update-migration-guides/migration-guides.md
@@ -15,8 +15,9 @@ Migrations are necessary when upgrades to Strapi include breaking changes. The m
## v4 migration guides
-- [Migration guide from 4.0.x to 4.0.6](migration-guides/v4/migration-guide-4.0.x-to4.0.6.md)
-- [Migration guide from 4.0.6 to 4.1.8](migration-guides/v4/migration-guide-4.0.x-to-4.1.8.md)
+- [Migration guide from 4.0.0+ to 4.0.6](migration-guides/v4/migration-guide-4.0.0+-to-4.0.6.md)
+- [Migration guide from 4.0.6+ to 4.1.8](migration-guides/v4/migration-guide-4.0.6+-to-4.1.8.md)
+- [Migration guide from 4.1.8+ to 4.1.10](migration-guides/v4/migration-guide-4.1.8+-to-4.1.10.md)
## v3 to v4 migration guides
diff --git a/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to4.0.6.md b/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.0+-to-4.0.6.md
similarity index 76%
rename from docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to4.0.6.md
rename to docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.0+-to-4.0.6.md
index f6f626f21e..4dc000cfd9 100644
--- a/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to4.0.6.md
+++ b/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.0+-to-4.0.6.md
@@ -1,12 +1,12 @@
---
-title: Migrate from 4.0.5 to 4.0.6 - Strapi Developer Docs
-description: Learn how you can migrate your Strapi application from 4.0.5 to 4.0.6.
+title: Migrate from 4.0.0+ to 4.0.6 - Strapi Developer Docs
+description: Learn how you can migrate your Strapi application from 4.0.0+ to 4.0.6.
canonicalUrl: https://docs.strapi.io/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to4.0.6.html
---
-# v4.0.x to v4.0.6 migration guide
+# v4.0.0+ to v4.0.6 migration guide
-The Strapi v4.0.x to v4.0.6 migration guide upgrades all prior versions of v4.0.x to v4.0.6. The migration adds the `session` middleware to the middleware array and configures the `session` middleware. The `session` middleware is based on [koa-session](/developer-docs/latest/setup-deployment-guides/configurations/required/middlewares.md#session) and is necessary to fix the login provider feature of the [Users & Permissions plugin](/developer-docs/latest/plugins/users-permissions.md). Additionally, password protection in the [Documentation plugin](/developer-docs/latest/plugins/documentation.md) uses the `session` middleware. The migration guide consists of 3 sections:
+The Strapi v4.0.0+ to v4.0.6 migration guide upgrades versions of v4.0.0 and above to v4.0.6. The migration adds the `session` middleware to the middleware array and configures the `session` middleware. The `session` middleware is based on [koa-session](/developer-docs/latest/setup-deployment-guides/configurations/required/middlewares.md#session) and is necessary to fix the login provider feature of the [Users & Permissions plugin](/developer-docs/latest/plugins/users-permissions.md). Additionally, password protection in the [Documentation plugin](/developer-docs/latest/plugins/documentation.md) uses the `session` middleware. The migration guide consists of 3 sections:
- upgrading the application dependencies
- migrating the breaking changes to the middleware
@@ -79,7 +79,7 @@ It is a security risk to expose static session middleware keys in a deployed env
```js
APP_KEYS=[someSecret, anotherSecret, additionalSecrets]
-or
+or
APP_KEYS=someSecret,anotherSecret,additionalSecrets
```
diff --git a/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.6+-to-4.1.8.md b/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.6+-to-4.1.8.md
new file mode 100644
index 0000000000..325ffaff85
--- /dev/null
+++ b/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.6+-to-4.1.8.md
@@ -0,0 +1,158 @@
+---
+title: Migrate from 4.0.6+ to 4.1.8 - Strapi Developer Docs
+description: Learn how you can migrate your Strapi application from 4.0.6+ to 4.1.8.
+canonicalUrl: https://docs.strapi.io/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to-4.1.8.html
+---
+
+# v4.0.6+ to v4.1.8 migration guide
+
+The Strapi v4.0.6+ to v4.1.8 migration guide upgrades versions of v4.0.6 and above to v4.1.8. The minimum configuration for `config/admin` now includes the API token `API_TOKEN_SALT`. Strapi no longer populates default values for the admin JWT in `config/admin`. Initial values are generated and stored in the .env file during project creation. Strapi no longer passes secrets to non-development environments, requiring users to set the secrets purposefully. The migration to v4.1.8 consists of 4 steps:
+
+- Upgrading the application dependencies
+- Fixing the breaking changes
+- Setting secrets for non-development environments
+- Reinitializing the application
+
+## Upgrading the application dependencies to 4.1.8
+
+:::prerequisites
+Stop the server before starting the upgrade.
+:::
+
+1. Upgrade all of the Strapi packages in the `package.json` to `4.1.8`:
+
+```jsx
+// path: package.json
+
+{
+ // ...
+ "dependencies": {
+ "@strapi/strapi": "4.1.8",
+ "@strapi/plugin-users-permissions": "4.1.8",
+ "@strapi/plugin-i18n": "4.1.8",
+ "better-sqlite3": "7.4.6"
+ // ...
+ }
+}
+
+```
+
+2. Save the edited `package.json` file.
+
+3. Run either `yarn` or `npm install` to install the new version.
+
+::: tip
+If the operation doesn't work, try removing your `yarn.lock` or `package-lock.json`. If that doesn't help, remove the `node_modules` folder as well and try again.
+:::
+
+## Fixing the breaking changes
+
+1. Modify the `config/admin` file. Strapi, by default, creates the environmental variable `API_TOKEN_SALT` and populates a unique value, stored in `/.env` at project creation. In order to update `config/admin`:
+
+- add the apiToken object,
+- remove the comma and default value from the `ADMIN_JWT_SECRET` parenthetical.
+
+
+
+
+
+```jsx
+
+//path: config/admin.js
+
+module.exports = ({ env }) => ({
+ auth: {
+ secret: env('ADMIN_JWT_SECRET'),
+ },
+ apiToken: {
+ salt: env('API_TOKEN_SALT'),
+ },
+});
+
+```
+
+
+
+
+
+```jsx
+//path: config/admin.ts
+
+export default ({ env }) => ({
+ auth: {
+ secret: env('ADMIN_JWT_SECRET'),
+ },
+ apiToken: {
+ salt: env('API_TOKEN_SALT'),
+ },
+});
+
+
+```
+
+
+
+
+
+2. Configure`JWT_SECRET`. `JWT_SECRET` is used by the Users and Permissions plugin, and populated in `/.env`. The property should be stored in `config/plugins.js` (or `config/plugins.ts` for a TypeScript project). The `plugins` file is not created by default in a Strapi application. If the file does not exist, users should create the file and add the following code snippet.
+
+
+
+
+
+```jsx
+// path: config/plugins.js
+
+module.exports = ({ env }) => ({
+ // ...
+ 'users-permissions': {
+ config: {
+ jwtSecret: env('JWT_SECRET')
+ },
+ },
+ // ...
+});
+
+```
+
+
+
+
+
+```jsx
+// path: config/plugins.ts
+
+export default ({ env }) => ({
+ // ...
+ 'users-permissions': {
+ config: {
+ jwtSecret: env('JWT_SECRET')
+ },
+ },
+ // ...
+});
+
+```
+
+
+
+
+
+## Setting secrets for non-development environments
+
+Users are required to set secrets for each unique environment, such as a production environment deployment on a platform. Strapi no longer passes the following secrets to non-development environments:
+
+- APP_KEYS
+- JWT_SECRET
+- API_TOKEN_SALT
+- ADMIN_JWT_SECRET
+
+There are multiple methods to generate secrets, for example running `openssl rand -base64 32` in the terminal (Mac and Linux OS). Generating unique secrets for each environment is recommended for increased security.
+
+::: caution
+
+The [Hosting Provider Guides](/developer-docs/latest/setup-deployment-guides/deployment.html#hosting-provider-guides.md) are being updated to reflect these changes. Community contributions updating the hosting guides are encouraged.
+
+:::
+
+!!!include(developer-docs/latest/update-migration-guides/migration-guides/v4/snippets/Rebuild-and-start-snippet.md)!!!
diff --git a/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.1.8+-to-4.1.10.md b/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.1.8+-to-4.1.10.md
new file mode 100644
index 0000000000..0330ad9030
--- /dev/null
+++ b/docs/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.1.8+-to-4.1.10.md
@@ -0,0 +1,102 @@
+---
+title: Migrate from 4.1.8+ to 4.1.10 - Strapi Developer Docs
+description: Learn how you can migrate your Strapi application from 4.1.8+ to 4.1.10.
+canonicalUrl: https://docs.strapi.io/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.1.8+-to-4.1.10.html
+---
+
+# v4.1.8+ to v4.1.10 migration guide
+
+The Strapi v4.1.8+ to v4.1.10 migration guide upgrades versions of v4.1.8 and above to v4.1.10. This migration guide is needed only for users who experienced missing MIME types on their media when uploading media through the Content API (see [GitHub issue #12761](https://github.com/strapi/strapi/issues/12761)). The migration to 4.1.10 consists of 3 steps:
+
+- Upgrading the application dependencies
+- Installing database migration script (optional)
+- Reinitializing the application
+
+## Upgrading the application dependencies to 4.1.10
+
+:::prerequisites
+Stop the server before starting the upgrade.
+:::
+
+1. Upgrade all of the Strapi packages in the `package.json` to `4.1.10`:
+
+```jsx
+// path: package.json
+
+{
+ // ...
+ "dependencies": {
+ "@strapi/strapi": "4.1.10",
+ "@strapi/plugin-users-permissions": "4.1.10",
+ "@strapi/plugin-i18n": "4.1.10",
+ // ...
+ }
+}
+
+```
+
+2. Save the edited `package.json` file.
+
+3. Run either `yarn` or `npm install` to install the new version.
+
+::: tip
+If the operation doesn't work, try removing your `yarn.lock` or `package-lock.json`. If that doesn't help, remove the `node_modules` folder as well and try again.
+:::
+
+## Installing database migration script (optional)
+
+This step is only required if some files in your database have their MIME type set to `null` (see GitHub issue [#12761](https://github.com/strapi/strapi/issues/12761)).
+
+To make sure Strapi can load the Media Library, the following migration script file must be added to `./database/migrations`. The script automatically sets MIME types for files that miss one, based on their filename. The script will be automatically executed only once at the next launch of Strapi.
+
+To add the script:
+
+1. In the `./database/migrations` folder, create a file named `2022.05.10T00.00.00.fill-files-mime-type.js`.
+2. Copy and paste the following code into the previously created file:
+
+```jsx
+'use strict'
+
+// path: database/migrations
+
+const mimeTypes = require('mime-types');
+
+const BATCH_SIZE = 1000;
+const FILE_TABLE = 'files';
+
+async function up(trx) {
+ let lastId = 0;
+ while (true) {
+ const files = await trx
+ .select(['id', 'name'])
+ .from(FILE_TABLE)
+ .where('mime', null)
+ .andWhere('id', '>', lastId)
+ .orderBy('id', 'asc')
+ .limit(BATCH_SIZE);
+
+ const mimesMap = {};
+ for (let file of files) {
+ const mime = mimeTypes.lookup(file.name) || 'application/octet-stream';
+ mimesMap[mime] = mimesMap[mime] || [];
+ mimesMap[mime].push(file.id);
+ }
+
+ for (let mime of Object.keys(mimesMap)) {
+ await trx.update({ mime }).from(FILE_TABLE).whereIn('id', mimesMap[mime]);
+ }
+
+ if (files.length < BATCH_SIZE) {
+ break;
+ }
+
+ lastId = files[files.length - 1].id;
+ }
+}
+
+async function down() {}
+
+module.exports = { up, down };
+```
+
+!!!include(developer-docs/latest/update-migration-guides/migration-guides/v4/snippets/Rebuild-and-start-snippet.md)!!!
diff --git a/docs/package.json b/docs/package.json
index 97063beb54..08eebb9771 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -13,6 +13,7 @@
"create:user-config-file": "node ./scripts/create-user-docs-config-file.js"
},
"dependencies": {
+ "@vuepress/plugin-html-redirect": "^0.1.4",
"@vuepress/plugin-medium-zoom": "^1.8.2",
"markdown-it-include": "^2.0.0",
"vuepress": "^1.8.2",
@@ -47,7 +48,7 @@
],
"license": "MIT",
"engines": {
- "node": ">=12.x.x <=16.x.x",
+ "node": "14.x.x",
"npm": ">=6.0.0"
}
}
diff --git a/docs/user-docs/latest/assets/plugins/Documentation-swagger.png b/docs/user-docs/latest/assets/plugins/Documentation-swagger.png
new file mode 100644
index 0000000000..6612440566
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/Documentation-swagger.png differ
diff --git a/docs/user-docs/latest/assets/plugins/EmailPlugin.png b/docs/user-docs/latest/assets/plugins/EmailPlugin.png
new file mode 100644
index 0000000000..51f94a24f9
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/EmailPlugin.png differ
diff --git a/docs/user-docs/latest/assets/plugins/Gatsby_Monogram.png b/docs/user-docs/latest/assets/plugins/Gatsby_Monogram.png
new file mode 100644
index 0000000000..2263c607a5
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/Gatsby_Monogram.png differ
diff --git a/docs/user-docs/latest/assets/plugins/MediaLibPlugin.png b/docs/user-docs/latest/assets/plugins/MediaLibPlugin.png
new file mode 100644
index 0000000000..e01de681d7
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/MediaLibPlugin.png differ
diff --git a/docs/user-docs/latest/assets/plugins/graphql.png b/docs/user-docs/latest/assets/plugins/graphql.png
new file mode 100644
index 0000000000..5cc90404a3
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/graphql.png differ
diff --git a/docs/user-docs/latest/assets/plugins/icon_i18n-plugin.png b/docs/user-docs/latest/assets/plugins/icon_i18n-plugin.png
index 698d8c31d9..cbfc386a1f 100644
Binary files a/docs/user-docs/latest/assets/plugins/icon_i18n-plugin.png and b/docs/user-docs/latest/assets/plugins/icon_i18n-plugin.png differ
diff --git a/docs/user-docs/latest/assets/plugins/icon_up-plugin.png b/docs/user-docs/latest/assets/plugins/icon_up-plugin.png
index bafed24b3a..058730a4cf 100644
Binary files a/docs/user-docs/latest/assets/plugins/icon_up-plugin.png and b/docs/user-docs/latest/assets/plugins/icon_up-plugin.png differ
diff --git a/docs/user-docs/latest/assets/plugins/sentry.png b/docs/user-docs/latest/assets/plugins/sentry.png
new file mode 100644
index 0000000000..9082ad20b6
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/sentry.png differ
diff --git a/docs/user-docs/latest/assets/plugins/seo-logo.png b/docs/user-docs/latest/assets/plugins/seo-logo.png
new file mode 100644
index 0000000000..27a95fa73f
Binary files /dev/null and b/docs/user-docs/latest/assets/plugins/seo-logo.png differ
diff --git a/docs/user-docs/latest/plugins/strapi-plugins.md b/docs/user-docs/latest/plugins/strapi-plugins.md
index 7e322dcf4b..5cd0367865 100644
--- a/docs/user-docs/latest/plugins/strapi-plugins.md
+++ b/docs/user-docs/latest/plugins/strapi-plugins.md
@@ -2,46 +2,52 @@
title: List of Strapi plugins - Strapi User Guide
description: Reference guide to Strapi plugins explaining how they work and how they expand a Strapi application.
canonicalUrl: https://docs.strapi.io/user-docs/latest/plugins/strapi-plugins.html
+sidebarDepth: 2
---
# 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/latest/plugins/installing-plugins-via-marketplace.md). 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.
+
+::: note
-No matter if they are installed by default, or additional, Strapi plugins allow to expand your application by adding more options and possibilities. All options are documented in their right places throughout the user guide. However, you can use the following documentation as a reference guide to know which Strapi plugins are available, how they work and which options they add to your Strapi application.
+- Some Strapi Starters and Templates might install additional plugins beyond the default plugins listed below.
+- Some plugin options are only available with an [Enterprise edition license](https://strapi.io/pricing-self-hosted), and are marked with in this reference guide.
+- All plugin installations can be confirmed in the admin panel by clicking on  *Plugins* in the main navigation.
-## Default plugins
+:::
+
+## Pre-installed plugins
###
Internationalization plugin
-The Internationalization plugin is installed by default on all v4 Strapi applications, but can be deactivated.
+The Internationalization plugin is installed by default on all v4 Strapi applications, but it can be deactivated.
-This plugin allows to manage content in different languages, called "locales". With the Internationalization plugin, it is possible to:
+This plugin is used to manage content in different languages, called "locales". With the Internationalization plugin, it is possible to:
-- define what locales should be available in the Strapi application,
+- define which locales should be available in the Strapi application,
- define which content-types and fields can be translated in different locales, or should only be available in the default locale,
-- translate content and manage it each locale at a time.
+- translate content and manage each locale individually.
-The Internationalization plugin impacts several parts of the admin panel. The table below lists all the additional options and settings that are added to a Strapi application once the plugin has been installed.
+The Internationalization plugin affects several parts of the admin panel. The table below lists all the additional options and settings that are added to a Strapi application once the plugin has been installed.
| Section impacted | Options and settings |
|------------------|---------------------------------------------------------------------------------------------------------|
-| Settings | - Addition of a new "Internationalization" setting sub-section, from which to add, edit or delete locales available for the application (see [Configuring Internationalization locales](../settings/managing-global-settings.md#configuring-internationalization-locales)).
👉 Path reminder:  *Settings > Global Settings > Internationalization*
- Addition of new permissions for administator roles: access to content-types, as well as possible actions on the content-types, can be defined depending on the locale (see [Configuring role's permissions](/user-docs/latest/users-roles-permissions/configuring-administrator-roles.md#configuring-role-s-permissions)).
👉 Path reminder:  *Settings > Administration panel*
|
-| Content-type Builder | - Addition of a new setting at content-type level, to allow or not localisation/translation of the content-type (see [Creating a new content-type](/user-docs/latest/content-types-builder/creating-new-content-type.md#creating-a-new-content-type)).
- Addition of a new setting at field level, to allow or not localisation/translation of the content-type (see [Configuring fields for content-types](/user-docs/latest/content-types-builder/configuring-fields-content-type.md#regular-fields)).
|
-| Content Manager | - Addition of new *Locales* filter in collection types list view, to manage entries per locale (see [Introduction to the Content Manager](/user-docs/latest/content-manager/introduction-to-content-manager.md#collection-types)).
- Addition of new options in content-types edit view, to translate content and manage it per locale (see [Translating content](/user-docs/latest/content-manager/translating-content.md)).
|
-
+| Settings | - Addition of a new "Internationalization" setting sub-section, where locales can be added, edited or deleted from the application (see [Configuring Internationalization locales](../settings/managing-global-settings.md#configuring-internationalization-locales)).
👉 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/latest/users-roles-permissions/configuring-administrator-roles.md#configuring-role-s-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/latest/users-roles-permissions/configuring-administrator-roles.html#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/latest/content-types-builder/creating-new-content-type.md#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/latest/content-types-builder/configuring-fields-content-type.md#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/latest/content-manager/introduction-to-content-manager.md#collection-types)).
- Addition of new options in Content-types edit view, to translate content and manage it per locale (see [Translating content](/user-docs/latest/content-manager/translating-content.md)).
|
###
Users & Permissions plugin
+:::note
+[API tokens](/user-docs/latest/settings/managing-global-settings.html#managing-api-tokens) are the preferred method for managing end users. Strapi plans to remove the Users & Permissions plugin from the default installation by the end of September 2022.
+:::
+
The Users & Permissions plugin is installed by default on all v4 Strapi applications, but can be deactivated.
-This plugin allows to manage end users, who consume the content that is created and managed with a Strapi application and displayed on a front-end application (e.g. website, mobile application, connected device etc.). With the Users & Permissions plugin, it is possible to:
+This plugin is used to manage end users, who consume the content that is created and managed with a Strapi application and displayed on a front-end application (e.g. website, mobile application, connected device, etc.). With the Users & Permissions plugin, it is possible to:
-- manage end users accounts, based on a "User" collection type available through the plugin,
+- manage end users accounts, based on the "User" collection type available through the plugin,
- define the available end-user roles and their related permissions,
- manage available providers to enable end users to login through third-party providers,
- configure available email templates aimed at the end users (e.g. password reset, email address confirmation).
@@ -51,5 +57,76 @@ 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](../users-roles-permissions/configuring-end-users-roles.md)), Providers, Email Templates, and Advanced Settings (see [Configuring Users & Permissions plugin](../settings/configuring-users-permissions-plugin-settings.md)).
👉 Path reminder:  *Settings > Users & Permissions plugin*
|
-| Content-type Builder | Creation of 3 default collection types: "User", "Role" and "Permission". They respectively allow to manage the end users, the end-user roles and their permissions. These collection types cannot be deleted and their composing fields cannot be edited, but addition of new fields is possible. Out of the 3, only the "User" collection type is then available via the Content Manager.
|
-| Content Manager | Addition of the default "User" collection type that allows to manage end-user accounts (see [Managing end-user accounts](../users-roles-permissions/managing-end-users.md)). - 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 indeed be attributed a 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.
|
\ No newline at end of file
+| 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](../users-roles-permissions/managing-end-users.md)). - 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.
|
+
+###
Email plugin
+
+The Email plugin allows users to send email from the server or from external providers such as Sendgrid. The Email plugin is not configurable in the admin panel, however users can test email delivery if it has been setup by an administrator. More information about the email plugin is available in the [Developer Documentation](/developer-docs/latest/plugins/email.md).
+
+| 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*
|
+
+## Additional plugins
+
+###
Documentation
+
+ The Documentation plugin automates documentation for APIs in a Strapi application using the Open API specification version 3.0.1. When the Documentation plugin is installed it is available in the admin panel, under the heading "Plugins". The Documentation plugin is available in the in-app Marketplace and the [Strapi Market](https://market.strapi.io/plugins/@strapi-plugin-documentation). The Documentation plugin enables:
+
+- opening the API documentation,
+- regenerating the documentation,
+- restricting access to the documentation endpoint.
+
+The Documentation plugin affects multiple parts of the admin panel. The table below lists all the additional options and settings that are added to a Strapi application once the plugin has been installed.
+
+| 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*
|
+
+###
Gatsby preview
+
+The Gatsby preview plugin allows applications with Gatsby Cloud accounts to preview the front end. The Strapi Gatsby preview plugin is available in the in-app Marketplace and the [Strapi Market](https://market.strapi.io/plugins/@strapi-plugin-gatsby-preview).
+
+The Gatsby preview plugin affects multiple parts of the admin panel. The table below lists all the additional options and settings that are added to a Strapi application once the plugin has been installed.
+
+| 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* | |
+| Content Manager | Addition of the **open Gatsby preview** button in the right-side navigation. |
+
+
+###
GraphQL
+
+The GraphQL plugin enables GraphQL endpoints in a Strapi application, and gives access to the GraphQL Playground: a browser-based interface that assists in writing GraphQL queries and data exploration. The Strapi GraphQL plugin is available in the in-app Marketplace and the [Strapi Market](https://market.strapi.io/plugins/@strapi-plugin-graphql).
+
+There is no access to the GraphQL plugin in the admin panel. The GraphQL Playground is accessible at in a Strapi application. More information on using the GraphQL API is located in the [API reference](/developer-docs/latest/developer-resources/database-apis-reference/graphql-api.md#graphql-api) and the [Developer Documentation plugins section](/developer-docs/latest/plugins/graphql.md#graphql).
+
+###
SEO
+
+The Strapi SEO plugin is designed to improve your application SEO. The Strapi SEO plugin is available in the in-app Marketplace and the [Strapi Market](https://market.strapi.io/plugins/@strapi-plugin-seo). Once installed, the plugin is available in the main navigation and adds 2 pre-built components *MetaSocial* and *Seo* to the Content-type Builder, which can be used as regular components (see [Configuring fields for content-types](/user-docs/latest/content-types-builder/configuring-fields-content-type.html#components)).
+
+With the plugin installed, it is possible to:
+
+- import default Strapi SEO and meta-social components,
+- manage the meta title, meta description, and preview the content,
+- manage social tags for Facebook and Twitter,
+- analyze the SEO of the application content.
+
+The Strapi SEO plugin affects multiple parts of the admin panel. The table below lists all the additional options and settings that are added to a Strapi application once the plugin has been installed.
+
+| 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/latest/content-types-builder/configuring-fields-content-type.html#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
+
+The Strapi Sentry plugin is used to track Strapi errors with Sentry. The Strapi Sentry plugin is available in the in-app Marketplace and the [Strapi Market](https://market.strapi.io/plugins/@strapi-plugin-sentry). With the plugin installed it is possible to:
+
+- initialize a Sentry instance when a Strapi application starts,
+- send errors encountered in an application end API to Sentry,
+- attach useful metadata to Sentry events, to help with debugging,
+- expose a global Sentry service.
diff --git a/docs/yarn.lock b/docs/yarn.lock
index 0616e7ecc1..f5c814459a 100644
--- a/docs/yarn.lock
+++ b/docs/yarn.lock
@@ -1206,6 +1206,11 @@
dependencies:
lodash.debounce "^4.0.8"
+"@vuepress/plugin-html-redirect@^0.1.4":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@vuepress/plugin-html-redirect/-/plugin-html-redirect-0.1.4.tgz#019a3d9ffe1af0f7421ca3b841b276a03a74b320"
+ integrity sha512-tzVquctn7Jwv/nFlsbDxqUeaJzG5H+muoOWl1O3M24XFu3KVsIoqZZt1seawrSCWWfFyLB9nVPJSoXALQ62hdg==
+
"@vuepress/plugin-last-updated@1.8.2":
version "1.8.2"
resolved "https://registry.yarnpkg.com/@vuepress/plugin-last-updated/-/plugin-last-updated-1.8.2.tgz#7ce689f8d5050cf0213949bc2e5aa879c09ff4b1"