Strapi version:
v5
---
What I'm asking for
Decouple the Upload plugin from Strapi core so that it becomes an optional, community-replaceable plugin — the same way
users-permissions
is a plugin that can be disabled or swapped. Teams that need a fundamentally different media management experience could then replace it entirely with their own plugin, or opt out of it for projects that manage files outside of Strapi.
Current behaviour
The Upload plugin is bundled into Strapi core and cannot be disabled or replaced. Any project that uses Strapi ships with the media library, regardless of whether it is needed. There is no supported path to swap the entire media library for a custom implementation.
Expected behaviour
  • The Upload plugin is extracted into a standalone, versioned package (e.g.
    @strapi/plugin-upload
    ) that ships as the default but is not a hard core dependency
  • It can be disabled in
    config/plugins.js
    for projects that manage media externally
  • A third-party or custom plugin can declare itself as an upload provider replacement by implementing a documented interface contract (routes, services, content types)
  • Strapi's own field pickers and relation widgets that reference media assets work against that interface, not against a hardcoded internal dependency
Why this matters
Some projects use Strapi purely as a data API and manage assets in a dedicated DAM (Cloudinary, Bynder, Imagekit). Others need a fundamentally different upload UI — a multi-step ingestion flow, folder-enforced taxonomy, or a restricted upload interface per role. None of these are possible today without forking core. Making Upload a proper optional plugin gives the community the same power over the media layer that it already has over the auth layer.