Strapi v5.61.0stable Released Nov 04, 2026
Impact Score: 8/10

Strapi v5.61.0 — Release Notes & Engineering Impact

Source available — automated, not human-reviewed

Component: strapi · Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-11-04.

Automated impact estimate — compatibility not verified
📄 .MD
⚡ Executive Summary (TL;DR)

Strapi v5.61.0 introduces new audit log events, significant admin and content-manager performance enhancements, and drops support for Node 20. Teams must verify their deployment environments run Node 22 or higher before upgrading.

Who Does This Impact? (Role-Based Analysis)

💻 Software Engineers & Devs

Upgrade your local and production environments to Node 22 to comply with the dropped Node 20 support.

📊 Product & Engineering Leads

Benefit from extended audit logs for compliance tracking and enhanced asset pickers in rich text editors.

⚙️ DevOps & Security

Verify that container base images and CI/CD pipelines meet the new Node 22 runtime requirement.

✨ New Features & Capabilities (3)

  • audit-logs: record history restores, discarded drafts, settings updates and media events
  • upload: new asset picker and image drop in the rich text editors
  • upload: content manager asset details drawer

⚡ Performance & Enhancements (4)

  • admin: only re-render context consumers whose selected value changed
  • content-manager: build the document validation schema once, when it is needed
  • content-manager: render edit view rows progressively
  • content-manager: only fetch relations of fields near the viewport

🔧 Bug Fixes & Patches (4)

  • admin: add missing english keys and french translations
  • content-manager: history version restore answers 500 for an unknown version id
  • content-manager: relations return 500 instead of 403 on field read denial
  • core: required fields of a new component are not enforced on update
📄 View Raw Release Notes (Original Developer Log)
## 5.61.0 (2026-11-04) ### 🚀 New feature - **audit-logs:** record history restores, discarded drafts, settings updates and media events ([#28178](https://github.com/strapi/strapi/pull/28178)) ### 🔥 Bug fix - **admin:** add missing english keys and french translations ([#28354](https://github.com/strapi/strapi/pull/28354)) - **admin:** package exports point to source files that do not exist ([#28326](https://github.com/strapi/strapi/pull/28326)) - **admin:** make action provider registerMany all-or-nothing ([#28324](https://github.com/strapi/strapi/pull/28324)) - **content-manager:** offscreen required uids lose their default value when saving after load ([35ce71beb2](https://github.com/strapi/strapi/commit/35ce71beb2)) - **content-manager:** edit view rows mounted for an error unmount once the errors are cleared ([26272dd9c6](https://github.com/strapi/strapi/commit/26272dd9c6)) - **content-manager:** send a single relation search when the combobox first opens ([be34c0e8ff](https://github.com/strapi/strapi/commit/be34c0e8ff)) - **content-manager:** only replace a single relation once its saved relation is loaded ([0886987f6f](https://github.com/strapi/strapi/commit/0886987f6f)) - **content-manager:** list view crashes when a content type has an attribute named ref ([cf1cffdbcc](https://github.com/strapi/strapi/commit/cf1cffdbcc)) - **content-manager:** history version restore answers 500 for an unknown version id ([#28198](https://github.com/strapi/strapi/pull/28198)) - **content-manager:** relations return 500 instead of 403 on field read denial ([#28194](https://github.com/strapi/strapi/pull/28194)) - **content-manager:** publish actions return 500 on content types without draft and publish ([#28189](https://github.com/strapi/strapi/pull/28189)) - **content-manager:** findContentTypesByKind type rejects the kind string it needs ([#28187](https://github.com/strapi/strapi/pull/28187)) - **content-manager:** history versions declare a componentsSchemas field they never store ([#28255](https://github.com/strapi/strapi/pull/28255)) - **content-manager:** relation endpoints return 500 for morph-to fields ([#28270](https://github.com/strapi/strapi/pull/28270)) - **content-manager:** update, clone and publish return 200 with empty data for a deleted document ([#28269](https://github.com/strapi/strapi/pull/28269)) - **content-manager:** history restore fails when a component id no longer belongs to the document ([#28195](https://github.com/strapi/strapi/pull/28195)) - **content-releases:** action validity not refreshed after attribute change ([#28126](https://github.com/strapi/strapi/pull/28126)) - **content-releases:** sync entry validation awaited inside Promise.all ([#28256](https://github.com/strapi/strapi/pull/28256)) - **content-releases:** duplicate webhooks when publishing a release ([#27909](https://github.com/strapi/strapi/pull/27909)) - **content-type-builder:** changes to a component named admin are not saved ([#28200](https://github.com/strapi/strapi/pull/28200)) - **content-type-builder:** count documents, not rows, before switching to single type ([#28278](https://github.com/strapi/strapi/pull/28278)) - **content-type-builder:** content type update without draftAndPublish disables draft and publish ([#28203](https://github.com/strapi/strapi/pull/28203)) - **content-type-builder:** editing an unknown content type throws a TypeError ([#28260](https://github.com/strapi/strapi/pull/28260)) - **content-type-builder:** kind change does not emit the content-type.update event ([#28205](https://github.com/strapi/strapi/pull/28205)) - **content-type-builder:** log a failing schema event listener instead of crashing ([#28279](https://github.com/strapi/strapi/pull/28279)) - **content-type-builder:** create content type honours options.draftAndPublish ([#28287](https://github.com/strapi/strapi/pull/28287)) - **content-type-builder:** guard update-schema against switching to single type with many documents ([#28284](https://github.com/strapi/strapi/pull/28284)) - **content-type-builder:** keep stored schema options keys on content type edit ([#28285](https://github.com/strapi/strapi/pull/28285)) - **content-type-builder:** is-development-mode middleware crashes when referenced by name ([#28323](https://github.com/strapi/strapi/pull/28323)) - **content-type-builder:** stop waiting for schema event listeners after a timeout ([#28329](https://github.com/strapi/strapi/pull/28329)) - **content-type-builder:** count rows without documentId in the single type guard ([#28333](https://github.com/strapi/strapi/pull/28333)) - **core:** required fields of a new component are not enforced on update ([#28236](https://github.com/strapi/strapi/pull/28236)) - **core:** limit MCP tool input elements ([#28179](https://github.com/strapi/strapi/pull/28179)) - **create-strapi-app:** example seed uploads files without their original name ([#28325](https://github.com/strapi/strapi/pull/28325)) - **database:** moving a relation to the start fails on MySQL/MariaDB ([#28289](https://github.com/strapi/strapi/pull/28289)) - **documentation:** login answers 500 when no password hash is stored ([#28249](https://github.com/strapi/strapi/pull/28249)) - **documentation:** bootstrap crashes when users-permissions is not installed ([#28186](https://github.com/strapi/strapi/pull/28186)) - **documentation:** override service registers yaml that is not an object ([#28259](https://github.com/strapi/strapi/pull/28259)) - **graphql:** named resolver middlewares do not run as registered strapi middlewares ([#28257](https://github.com/strapi/strapi/pull/28257)) - **i18n:** locales content api response schema rejects region codes and real document ids ([#28252](https://github.com/strapi/strapi/pull/28252)) - **i18n:** return not found when a locale disappears during update ([#28275](https://github.com/strapi/strapi/pull/28275)) - **review-workflows:** assigning a workflow drops other content manager configuration options ([#27864](https://github.com/strapi/strapi/pull/27864)) - **review-workflows:** workflows can be created or renamed with a name that already exists ([#28201](https://github.com/strapi/strapi/pull/28201)) - **review-workflows:** stage lookup returns a stage from another workflow ([#28193](https://github.com/strapi/strapi/pull/28193)) - **review-workflows:** locale created through an update has no review stage ([#28202](https://github.com/strapi/strapi/pull/28202)) - **review-workflows:** assigned documents widget shows an empty stage after its workflow is deleted ([#28273](https://github.com/strapi/strapi/pull/28273)) - **review-workflows:** deleting a stage can leave its entries without a stage ([#28271](https://github.com/strapi/strapi/pull/28271)) - **review-workflows:** deleting or unassigning a workflow with an orphaned content type returns 500 ([#28237](https://github.com/strapi/strapi/pull/28237)) - **tooling:** jest unit preset runs test helper files as test suites ([#28248](https://github.com/strapi/strapi/pull/28248)) - **types:** allow null on optional document input attributes ([#27902](https://github.com/strapi/strapi/pull/27902)) - **upload:** replacing an image with a non-image file keeps the image width, height and formats ([#28233](https://github.com/strapi/strapi/pull/28233)) - **upload:** avif images are stored without dimensions or responsive formats ([#28170](https://github.com/strapi/strapi/pull/28170)) - **utils:** concurrent provider registrations of one key bypass the duplicate check ([#28322](https://github.com/strapi/strapi/pull/28322)) ### 📚 Documentation Changes - document edit view progressive mounting, lazy validation schema and createContext re-renders ([386d4f0a20](https://github.com/strapi/strapi/commit/386d4f0a20)) ### ⚙️ Chore - drop Node 20 support ([#26631](https://github.com/strapi/strapi/pull/26631)) - merge back release 5.60.0 ([#28330](https://github.com/strapi/strapi/pull/28330)) - link v5.60.0 tag into develop history ([5ba94ee6b4](https://github.com/strapi/strapi/commit/5ba94ee6b4)) - link main 5.60.0 squash into develop history ([cdf4309ab6](https://github.com/strapi/strapi/commit/cdf4309ab6)) - **admin:** remove the unused use-context-selector dependency ([eedc2d144b](https://github.com/strapi/strapi/commit/eedc2d144b)) - **admin:** type the meta argument the list view passes to cellFormatter ([ec09de346c](https://github.com/strapi/strapi/commit/ec09de346c)) - **admin:** migrate backend unit tests from jest to vitest ([#28055](https://github.com/strapi/strapi/pull/28055)) - **core:** migrate backend unit tests from jest to vitest ([067374ca4a](https://github.com/strapi/strapi/commit/067374ca4a)) - **core:** migrate tests added on develop to vitest ([fd7e0c9388](https://github.com/strapi/strapi/commit/fd7e0c9388)) - **create-strapi-app:** migrate backend unit tests from jest to vitest ([#28057](https://github.com/strapi/strapi/pull/28057)) - **create-strapi-app:** align template typescript lib with node 22 ([#28328](https://github.com/strapi/strapi/pull/28328)) - **deps:** bump qs from 6.16.0 to 6.16.1 ([#28316](https://github.com/strapi/strapi/pull/28316)) - **deps:** bump webpack-dev-middleware to 7.4.6 ([#28208](https://github.com/strapi/strapi/pull/28208)) - **documentation:** migrate backend unit tests from jest to vitest ([#28056](https://github.com/strapi/strapi/pull/28056)) ### 💅 Enhancement - **admin:** only re-render context consumers whose selected value changed ([302021fb0b](https://github.com/strapi/strapi/commit/302021fb0b)) - **content-manager:** build the document validation schema once, when it is needed ([619e402016](https://github.com/strapi/strapi/commit/619e402016)) - **content-manager:** render edit view rows progressively ([591419942c](https://github.com/strapi/strapi/commit/591419942c)) - **content-manager:** only fetch relations of fields near the viewport ([5ca1e44e4e](https://github.com/strapi/strapi/commit/5ca1e44e4e)) - **upload:** new asset picker and image drop in the rich text editors ([#28176](https://github.com/strapi/strapi/pull/28176)) - **upload:** content manager asset details drawer ([#28283](https://github.com/strapi/strapi/pull/28283)) ### ❤️ Thank You - Adrien L @Adzouz - Adrien Lepoutre @Adzouz - Ben Irvin - Cedric Robert - Christopher Pruijsen @cpruijsen - ELABBASSI Hicham - Gonzalo Andres Garcia @gonbaum - HichamELBSI - Jamie Howard - jasleenkaur-qed42 @jasleenkaur-qed42 - Markus Murakaru @mmurakaru - mathildeleg @mathildeleg - Nico André - Simen @Eventyret
← Older Version Strapi v5.60.0