Prototypr is a publishing platform using Strapi for the CMS, and the site has an editor for users to draft and submit articles. This process relies on document versioning, and that didn't come with Strapi 4. Now versioning is available in Strapi 5 out the box, this post shows you how the new Document Versioning works under the hood.
To start with though, here' show I was doing document versioning in Strapi 4 - you'll see how Strapi 5 has hugely improved the workflow for publishing teams:
Before Document Versioning:
Since Strapi 4 doesn't have document versioning, I had to make my own with a draft/edit system which relied on a 'status' field on each post record for 'draft', 'publish', or 'pending'.
Each post record also held both the draft and the published versions using fields called draft_content and draft_title. Upon hitting publish, the draft_content would replace the main content field on that post.
This process was enabled through a front-end editor that handled the post status, called Typr:

Enter Strapi 5 Version Control
While my version control editor worked, it could get confusing. Each post record held both the draft content and the live content. The publish status was also just a string. Also, the Strapi admin dashboard didn't show the draft or published state. Strapi 5 introduces a great system to do this now:
With Draft & Publish, managing content is now more intuitive. You can handle content at every stage of its lifecycle, whether it's a draft, ready for publishing, or marked for modification. This feature reduces the risk of publishing errors and makes it easier for teams to collaborate.
Draft: The content has never been published and is still a work in progress.
Modified: The content has been published before, but recent changes have been saved as a draft. These changes aren’t live yet, offering you a chance to refine them before the next publication.
Published: The content is live and visible to your audience. No pending draft changes are saved.




![Version control enabled: 2 posts per document_id. [null] published_at field on draft versions, and date present on published version](https://prototyprio.gumlet.io/strapi/cea8867fe454787d49c4b10967b10606.png?w=30&q=75&format=auto&compress=true&dpr=1)



Buy me a coffee


