Plume needed to move its highly customized, multi-client eLearning platform from Strapi 4 to Strapi 5 — without putting ongoing product development on hold.
VirtusLab led the migration as a parallel engineering stream, allowing Plume to continue delivering client-facing features and fixes while the new platform foundation was built alongside the live Strapi 4 codebase. The result was a production-ready Strapi 5 foundation and a lower-risk path for moving individual client deployments forward without forcing a single, disruptive cutover.
Executive Summary
Plume Ltd is a UK-based eLearning technology company that builds and operates a custom Learning Management System (LMS) platform, delivered to multiple corporate clients from a shared, centrally maintained codebase. The platform is built on Strapi and has grown over several years into a mature, deeply customized system tailored to Plume's specific business needs.
As Strapi v4 approached the end of its long-term support runway, Plume wanted to move its platform onto Strapi v5 to secure its architectural foundation for years to come — without freezing the commercial roadmap its clients depend on. The platform is business-critical revenue infrastructure, and Plume's commitment to its clients meant new features and fixes had to keep shipping on the live Strapi v4 codebase throughout the transition.
Plume partnered with VirtusLab to lead this migration, drawing on our deep, hands-on expertise across the Strapi ecosystem and our track record as an engineering partner for complex, highly customized Strapi implementations.
Key Project Results
- No feature freeze required — Plume continued delivering client-facing features and fixes throughout the migration.
- A parallel migration model — ongoing Strapi 4 development and Strapi 5 migration progressed side by side without putting the commercial roadmap on hold.
- A phased path to Strapi 5 — client deployments can transition incrementally rather than through a single coordinated cutover.
- A production-ready foundation for future rollouts — the migrated shared core and reference implementation provide a starting point for further client upgrades.
- Migration at significant scale — tens of thousands of lines of customized platform code were carried forward as part of the engagement.
The Challenge
Plume's platform is built around a shared-core model: a large body of business logic and functionality lives in a central codebase, which is consumed by an internal reference implementation and by individual client deployments, each with its own layer of customization on top.
This architecture had let Plume scale its eLearning offering across multiple customers while keeping functionality consistent — but it also concentrated years of highly specific engineering decisions that a standard Strapi v4-to-v5 upgrade path could not safely absorb.
Key challenges included:
- A high degree of platform customization, built up over several years to meet the specific needs of Plume's business and its clients, well beyond what a standard Strapi installation supports out of the box.
- A codebase and workflow tuned for a multi-client operating model, where changes to shared functionality needed to stay consistent across several active, independently evolving client implementations.
- A new major version of the underlying platform that changed core internal mechanics Plume's customizations depended on, requiring careful, case-by-case validation rather than a mechanical upgrade.
- Business-critical logic tied directly to Plume's core learning workflows, where even small regressions carried a disproportionate business risk.
- Client-facing customization and branding woven throughout the platform, adding another layer that had to be preserved through the migration.
The most critical constraint, however, was not technical but operational: the platform is under continuous, active commercial development, with new client-facing features and fixes shipping throughout the migration window. A conventional "freeze and migrate" approach was not an option — every change introduced on the live platform during the migration had to be tracked and carried forward into the new codebase being built at the same time, without slowing either stream down or risking drift between them.
This was not a straightforward version upgrade. It was a controlled, dual-track engineering migration, run in parallel with an actively evolving production platform, requiring a partner able to take full technical ownership of both the audit and the execution.
“What stood out was how quickly the VirtusLab team got up to speed with a complex codebase. They understood that this wasn’t a straightforward Strapi upgrade and planned the migration around our ongoing development work, so it didn’t hold up our roadmap. Their developers worked closely with ours throughout, which made a technically complex migration much easier to manage. The quality of their work was consistently in line with the standards we set for our own development team.”
Rick Donohoe, Operations Manager @ Plume Ltd
The Solution
VirtusLab took full ownership of the migration engineering, structured as a dual-track process that kept Plume's live commercial delivery on Strapi v4 running uninterrupted while building out the Strapi v5 platform in parallel.
1. Discovery, audit, and stabilization of the existing platform
- Conducted a comprehensive technical audit of the shared core codebase, the internal reference implementation, and a representative production client deployment, covering architecture, customizations, data models, integrations, and operational setup.
- Reviewed setup documentation, custom platform functionality, and client customization mechanisms to establish a validated migration scope, timeline, and risk register before any migration work began.
- Aligned all relevant codebases on the latest stable release of the existing platform version, removing deprecated patterns and putting the groundwork in place for a safe transition ahead of the core migration.
2. Migrating the shared core in lockstep with live platform development
- Refactored all custom plugins and extensions to the new platform architecture, adding tests for each migrated area to verify behavioral parity before and after migration.
- Migrated the platform's data access layer and underlying identifiers to the new architecture's recommended patterns, validating content relations, permissions, and publishing workflows throughout.
- Reviewed and refactored custom, business-critical logic tied to Plume's core learning workflows to ensure it continued to behave identically on the new platform.
- Modernized legacy dependencies across authentication and administration, and adjusted the permission model to reflect the new platform's updated behavior.
- Built a compatibility layer so that existing client applications could keep operating without disruption while the underlying platform was upgraded, enabling a gradual, client-by-client transition rather than a forced cutover.
- Ran this entire workstream as a mirror of the parallel, live development stream: every feature and fix shipped on the existing platform during the migration window was tracked and carried forward into the new codebase, so the two never drifted out of sync.
3. Extending the migration beyond the core platform
- Went beyond the original scope of migrating the shared core, and worked with Plume to port additional functionality forward, rather than stopping at core parity.
- Migrated tens of thousands of lines of code, including highly customized business logic and complex relational structures between platform modules, while preserving existing LMS user journeys and behavior.
- Prepared a production-ready foundation on the new platform version that Plume can use as the starting point for onboarding individual client deployments on a case-by-case basis.
The Results
With the Strapi v5 migration in place, Plume now benefits from:
- Zero disruption to live delivery — the entire migration was executed alongside continuous Strapi v4 feature development, with no pause to Plume's commercial roadmap or client commitments.
- Tens of thousands of lines of migrated code — including custom business logic and complex cross-module relationships, carried forward with verified functional parity.
- A gradual, low-risk transition path for clients — a purpose-built compatibility layer let individual client applications move onto the new platform version on their own timeline rather than all at once.
- A validated, production-ready Strapi v5 foundation — the internal environment now serves as a reference implementation ready to support future client upgrades.
- A platform kept on Strapi's current, actively supported major version, maintaining the highest available security posture for Plume and, by extension, for every client running on its infrastructure.
- A migration scope that grew with the engagement — starting as a core platform migration and extending, at Plume's request, into porting further functionality to the latest Strapi release.
Beyond the technical outcome, the engagement strengthened VirtusLab's partnership with Plume: the same team that led the audit and migration is positioned to support Plume's client-by-client Strapi v5 rollouts going forward, building on a shared understanding of the platform built up over the course of this project.
Conclusion
Plume did not have to choose between modernizing its platform and continuing to deliver value to its clients. By running the Strapi 5 migration alongside ongoing product development, VirtusLab helped create a path forward without putting the commercial roadmap on hold.
The engagement also established a foundation for the next stage of Plume's transition: moving individual client deployments forward incrementally, building on the shared platform knowledge and migration approach developed during the project.
The collaboration continues beyond the core migration, with VirtusLab positioned to support Plume as it rolls the new platform foundation out across its wider client estate.
About VirtusLab
VirtusLab helps organizations modernize and evolve complex Strapi-based platforms, from architecture reviews and migration planning to hands-on implementation and rollout support.
Our teams work with highly customized, business-critical systems where platform upgrades need to happen without disrupting ongoing product development. By combining deep Strapi expertise with experience in large-scale platform engineering, we help clients reduce migration risk, preserve delivery continuity, and build a stronger foundation for future growth.
Planning a Strapi migration or modernization project? Talk to our team.
