Dosu LogoDosu Logo
Ask
Join our Discord
StrapiPublic
Strapi
DocumentsStrapi
faq
faq
Type
External
Status
Published
Created
Mar 5, 2026
Updated
Oct 22, 2026
Updated by
Dosu Bot
Source
View

Frequently asked questions#

Frequently asked questions covering common Strapi topics including content-type management, deployment, authentication, database handling, serverless limitations, plugins, Docker, SSL configuration, TypeScript support, and feature availability.

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?#

Strapi stores model configuration files (what defines the model schema) in files such as ./src/api/restaurant/content-types/restaurant/schema.json. Due to how Node.js works, in order for changes to take effect, that would require Node to restart the server. This could potentially cause downtime of your production service and likewise these changes should be tracked in some kind of source control.

Generally your "flow" of development would follow the following path:

  • Development - Develop your Strapi application locally on your host machine, then push changes into source control
  • Staging - Deploy changes from source control to a "production-like" environment for testing
  • Production - If no other changes are needed, deploy into production
  • Repeat as needed, it is recommended that you properly version and test your application as you go

At this time and in the future there is no plan to allow model creating or updating while in a production environment, and there is currently no plans to move model settings into the database. There are no known nor recommended workarounds for this.

Does Strapi handle deploying or migrating of content?#

Strapi does offer a feature known as Data Transfer that allows you to export and import content from one Strapi instance to another or exporting and importing from a file archive. This is useful for migrating content from one environment to another.

User can't login to the admin panel#

With the release of the Strapi 3.0 beta version a fundamental change occurred in that the end users (REST and GraphQL users) were split from the Administrators (admin panel users) in such a way that normal users can not be given access to the admin panel. If you would like to read more on why this change was done, you can read the Strapi about it.

Strapi has released the Admin & Permissions (RBAC - Role-Based Access Control) that does allow for some degree of control over what users can access within the admin panel and includes some field level permissions. You can also give roles specific permissions for things like content-types, single types, plugins, and settings.

Why does the admin login fail when I use HTTP instead of HTTPS?#

Starting from v5.24.0, the Strapi admin panel relies on secure, HTTP-only cookies to store session data. Browsers refuse to store or send these cookies over insecure HTTP connections, which means the admin login cannot complete if the panel is served without HTTPS. To restore access:

  • Terminate TLS in front of Strapi (for example with Nginx, Caddy, Traefik, a load balancer, or your cloud provider) and expose the admin panel through HTTPS.
  • Ensure the proxy forwards the appropriate headers (such as X-Forwarded-Proto) so Strapi can detect the secure connection.

Local development using the built-in Strapi server continues to work because the development configuration does not set the cookies as secure.

Why are my application's database and uploads resetting on PaaS-type services?#

If you used --quickstart to create your Strapi project, by default this uses the SQLite database. PaaS systems (Heroku, DigitalOcean Apps, Google App Engine, etc.) file systems are typically or read-only meaning that each time a dyno (container) is reset all filesystem changes are lost. And since both SQLite and local uploads are stored on the filesystem, any changes made to these since the last dyno reset will be deleted. Typically dynos are reset at least once a day, and in most cases multiple times per day or when new code is pushed to these services.

It is recommended you use a database add-on like Heroku's PostgreSQL. For file uploads, you will need to use one of the 3rd party providers such as Cloudinary or AWS S3.

How can I change my Strapi Cloud plan?#

Use the Plans section of your Strapi Cloud project's settings to upgrade or downgrade your plan (see Upgrading to another plan and Downgrading to another plan in the Cloud documentation).

Can Strapi be run in serverless environments?#

Strapi is not well suited for serverless environments due to how the application is structured. Several actions happen while Strapi is booting that can take several seconds. Serverless deployment usually requires an application to cold boot very quickly. Strapi is designed to run as an always-on service, and we don't plan to decrease the cold boot time for the foreseeable future. Therefore, running Strapi in serverless environments is not a great experience, as every request will take seconds to respond to instead of milliseconds. Choosing between a cold boot or a warm boot is an architectural decision that many software developers need to take from a very early stage, so please consider this when choosing to use Strapi.

Can I store my Content Manager layout configurations in the model settings?#

Currently Strapi does not support this, a config:dump and config:restore command has been added to make migration of these settings easier when moving between different deployments and environments.

We don't offer the ability to store these configurations in the model settings for several reasons:

  • It will create conflicts in case of content internationalization and translations in the admin interface.
  • The layout might be different according to the roles and permissions.
  • While the model is the same whatever the content created, the contribution interface can be different. For instance, we have an idea to create a mobile application for contributors only. The labels and layout configurations could be different according the device & interface.

For all these reasons, and others, we think it'll be a mistake and might confuse users if we store the configuration in the model settings file. The final solution is to make the migration and deployment across environment easier.

How do I customize a plugin?#

Strapi uses a system called extension as plugins are stored in the node_modules folder. Due to this extensions work by Strapi utilizing programmatic hooks to override certain parts of the plugin.

Can I add my own 3rd party auth provider?#

Yes, you can either follow the following documentation or you can take a look at the code and submit a pull request to include the provider for everyone. Eventually Strapi does plan to move from the current grant/purest provider to a split natured system similar to the upload providers.

There is currently no ETA on this migration however.

Does Strapi allow me to change the default ID type or name?#

No, currently does not have the ability to allow for changing the default id name nor does it allow you to switch the data type (such as UUID in PostgreSQL), support for this is being looked at in future.

Can I disable foreign key creation?#

Strapi relies on foreign keys to maintain relational integrity between content types. There is currently no supported configuration option to disable foreign key generation.

If your database environment restricts foreign keys (for example, PlanetScale or similar distributed databases that do not support foreign keys), this is a known limitation. See the on the Strapi repository for context and workarounds shared by the community.

For environments that require foreign key-free schemas, consider using Strapi with a database that fully supports foreign keys (PostgreSQL, MySQL, MariaDB, or SQLite).

Can you filter and/or deep filter on dynamic zones and polymorphic relations?#

At this time we do not plan to allow for filtering on dynamic zones or polymorphic relations due to various complexity and performance issues that come from doing so.

How do I setup SSL with Strapi?#

Strapi implements no SSL solution natively, this is due to the fact that it is extremely insecure to directly offer a Node.js application to the public web on a low port.

On Linux based operating systems you need root permissions to bind to any port below 1024 and with typical SSL being port 443 you would need to run your application as root.

Likewise since Strapi is Node.js based, in order for changes with the SSL certificate to take place (say when it expires) you would need to restart your application for that change to take effect.

Due to these two issues, it is recommended you use a proxy application such as Nginx, Caddy, HAProxy, Apache, Traefik, or many others to handle your edge routing to Strapi. The server configuration has a proxy block for upstream proxies. Set proxy.koa to trust the forwarded headers, and proxy.maxIpsCount to the number of proxies in front of Strapi. proxy.ipHeader is optional and defaults to X-Forwarded-For. Backend plugins such as authentication providers and the upload plugin then build their URLs from the url option rather than from localhost:1337.

Can I use TypeScript in a Strapi project?#

TypeScript is supported in Strapi projects. TypeScript code examples are available throughout the core Developer Documentation and a dedicated TypeScript support page.

How to fix the build error Error: Cannot find module @strapi/XXX#

Before trying the fix below, ensure you've executed your package manager's install command in your project.

Strapi in its current version requires dependency hoisting.

By default, most package managers enable hoisting, however, if it's not functioning as expected, you can try enforcing it via your package manager's configuration.

  • If you are using npm or pnpm: Add hoist=true to your project's .npmrc file. Learn more about this from the
  • If you are using Yarn: Set nmHoistingLimits in your .yarnrc file. More details can be found in the

How can I contribute translations for the admin panel?#

The documentation you are reading is written and reviewed in English in the strapi/documentation repository. There is no separate community translation workflow for these Markdown pages here.

If you want to fix built-in admin interface strings for a shipped locale (for example incomplete Simplified Chinese labels), open a pull request against the Strapi monorepo. Core keys live in JSON files under packages/core/admin/admin/src/translations/, and other packages or plugins with an admin UI ship sibling translations directories in their own folders. Follow that repository's CONTRIBUTING.md (CLA required) and keep each change scoped to the locale files you are improving so reviewers can verify the language.

If you only need wording changes inside one project without upstreaming them, use config.translations in src/admin/app as described in the admin customization guide.

Is X feature available yet?#

You can see the to see which feature requests are currently being worked on and which have not been started yet, and to add new feature requests.

Why doesn't Strapi provide official Docker images?#

Strapi is a framework used to build many different types of applications. A single Docker image cannot cover all use cases, so Strapi provides Dockerfile examples instead. See the Docker installation guide for details.

Why use different Dockerfiles for development and production with Docker?#

Strapi builds the admin panel with React and bundles it into the application during the build process. The Strapi backend serves the admin panel as a web server, and the following environment variables are statically compiled into the built admin panel:

  • STRAPI_ADMIN_BACKEND_URL
  • ADMIN_PATH (if using a custom admin path)

Because these values are baked in at build time, you must either pass them as ARG in your Dockerfile or rebuild the image when they change. Without this, the admin panel may point to localhost:1337 instead of your production URL.

Additionally, development images are not optimized for performance and should not be exposed to the public internet. Building separate Docker images for each environment ensures correct configuration and better security.

See the Docker installation guide for full Dockerfile examples.

Is there an MCP server for Strapi?#

Yes. Strapi includes a built-in Model Context Protocol (MCP) server that exposes content management tools to AI clients. See the MCP server feature page for configuration and usage details.

A separate Docs MCP server is also available for querying the Strapi documentation.

Documents
Admin Form Validation
Admin Homepage Date Serialization
Admin Modal Management
Admin Panel Locale Management
admin-panel
internationalization
setting-up-admin-panel
Auth Error Classification
AWS S3 Upload Provider
amazon-s3
media-library
Blocks Editor URL Validation
Content Manager List Configuration
Content Manager Mobile Actions Drawer
Content Manager Pagination
Content Manager Query Persistence
Content Manager RBAC
rbac
Content Manager Save State
Content Manager Status Attributes
Content Manager URL & Filter State
admin-panel-api
Content Releases
Data Transfer Streaming
Database Migration Concurrency and Idempotency
deployment
step-by-step
Date Field Serialization
Directory Export
Discard-Drafts Migration
Document ID Migration
document-service
introduction-and-faq
step-by-step
Document Service Clone & Relation Handling
Document Service Input Types
Document Service Populate Concurrency
Document Service Relation Queries
Draft & Publish Relation Synchronization
do-not-update-repeatable-components-with-document-service-api
lifecycle-hooks-document-service
publishedat-always-set-when-dandp-disabled
relations
status
status
DynamicZone Stability
components-and-dynamic-zones-do-not-return-id
components-dynamic-zones
no-shared-population-strategy-components-dynamic-zones
Enterprise License Validation
Entity String Length Validation
Error Class Identity
GraphQL Abort Signal Propagation
GraphQL Filter Pipeline
i18n Locale Validation
locale
locale
i18n Locale-Scoped Operations
crud
database-columns
document
i18n-content-manager-locale
internationalization
locale
locale
locale
no-locale-all
relations
Koa Type Augmentation
MariaDB Schema Synchronization
Media Library Asset Replace
media-library
Media Library Permissions
Media Library Thumbnails
Monorepo Module Resolution
Nested Relation Modal Navigation
OpenAPI Specification Generation
Polymorphic Relations
populate
Private Attribute Populate Validation
Query Builder Parameter Handling
Relation Modal State Management
relations
Relations Field Ordering & Pagination
Remote Asset Export
Rich Text Blocks Validation
Strapi Admin Module Loading
Strapi Attribute Typing
Strapi Content Publishing
content-manager
draft-and-publish
internationalization
parameters
releases
Strapi Data Transfer
deployment
Strapi Project Scaffolding
cli
create-a-plugin
deployment
How can I create my first Strapi project on a brand new MacBook with no prior coding experience, including all necessary terminal commands and setup steps?
quick-start
templates
Strapi TypeScript Build Performance
Strapi v5 Plugin API
admin-panel-rbac-store-updated
admin-permissions-for-plugins
breaking-changes
get-where-removed
helper-plugin
helper-plugin-deprecated
inject-content-manager-component
introduction
model-config-path-uses-uid
pass-data-from-server-to-admin
plugins-migration
rbac
redux-content-manager-app-state
remove-webhook-populate-relations
strapi-imports
Transaction Callback Promise Handling
Upload Storage Consistency
Users & Permissions OAuth Flow
new-provider-guide
users-permissions
Users-Permissions Cookie Authentication
Users-Permissions Session Management
Vite Build Configuration
vite
webpack-aliases-removed
Content Manager Mobile and Tablet UI Improvements
FilesManager API Reference
Focal Point Picker in Strapi Media Library
Nested Route File Structure for Strapi Plugins
Plugin-Specific Handling in the Strapi JavaScript Client
Strapi SDK Initialization and Architecture Guide
access-cast-environment-variables
access-configuration-values
adding-support-to-existing-project
admin-panel
admin-panel-customization
advanced-policies
advanced-queries
api
api-tokens
attributes-and-content-types-names-reserved
audit-logs
auth-zero
authentication
aws-cognito
backend-customization
bulk-operations
bundlers
cas
cli
client
cloudinary
community
configurations
configure-sso
content-api
content-history
content-manager-apis
content-type-builder
controllers
core-service-methods-use-document-service
create-components-for-plugins
cron
custom-fields
customization
data-management
database
database-identifiers-shortened
database-migrations
database-transactions
default-index-removed
default-input-validation
design-system
developing-plugins
development
discord
discord
docker
documentation
documents-and-entries
edit-view-layout-and-list-view-layout-rewritten
email
email-custom-providers
email-nodemailer
entity-service
entity-service-deprecated
environment
error-handling
examples
extension
facebook
faq
favicon
features
fetch
fields
filter
filtering
filters
filters
from-entity-service-to-document-service
functions
github
github
google
google
graphql
graphql
graphql-api-updated
guides
homepage
host-port-path
instagram
installation
installing-plugins-via-marketplace
interactive-query-builder
intro
intro
is-supported-image-removed
keycloak
keycloak
koa-body-v6
license-only
linkedin
local-upload
locales-translations
logos
mailgun-provider-variables
media-library-providers
microsoft
middlewares
middlewares
middlewares
middlewares
models
mysql5-unsupported
new-response-format
no-find-page-in-document-service
no-upload-at-entry-creation
okta
only-better-sqlite3-for-sqlite
only-mysql2-package-for-mysql
openapi
order-pagination
order-pagination
patreon
plugin-sdk
plugin-structure
plugins
plugins-extension
policies
policies
populate
populate-creator-fields
populate-select
populating
preview
project-structure
publication-state-removed
query-engine
react-router-dom-6
reddit
register-allowed-fields
removed-support-for-some-env-options
requests-responses
rest
review-workflows
routes
routes
sentry
server
server-api
server-default-log-level
server-proxy
services
services-and-controllers
setup-deployment
single-operations
sort-by-id
sort-pagination
sort-pagination
sso
store-and-access-data
strapi-container
strapi-utils-refactored
strict-requirements-config-files
templates
testing
theme-extension
twitch
twitter
typescript
typescript
understanding-populate
upgrade-to-apollov4
upgrade-tool
upgrades
upload
usage-information
use-document-id
users-and-permissions-providers
vk
webhooks
wysiwyg-editor
yarn-not-default