Version control is a non-negotiable part of any serious development project, but widespread adoption of this technique in the world of WordPress has been somewhat spotty to date. While the platform’s core has used Subversion for some time, sites out in the wild are often put together with little or no version control in place.
VersionPress arrived on the scene in 2014 with a vision of bringing an integrated WordPress version control solution to the masses. It’s been making steady progress in that direction ever since, and the software’s recent transition into a free open source project marks an interesting inflection point in its development.
With version 3.0 of VersionPress hot off the press, now is a great time to review progress to date, introduce its core functionality, and consider the future of the project as a whole. Let’s start with an overview of what it’s trying to achieve.
What Problem Is VersionPress Trying to Solve?
The VersionPress homepage does a solid job of summing up the basic problem the software is designed to address: WordPress is a cinch to use generally, but a huge number of site owners are carrying out irreversible changes on live sites, with no easy way of rolling back if something goes awry.
Between the core software, a chosen theme, and multiple third-party plugins, there’s a lot going on behind the scenes of the average WordPress site — and that’s before you even consider the database. And, naturally, all these separate elements are busy interacting with each other in various ways any time a change is made. Keeping track of all that in an intuitive and safe way isn’t easy.
Powered by Git under the hood, VersionPress aims to offer an all-purpose version control solution for WordPress sites that enables developers (and eventually average site owners) to make ongoing changes in a secure and confident fashion.
Before we get into exploring the current incarnation of VersionPress in a little more depth, let’s briefly recap its journey to version 3.0.
The History of VersionPress to Date
VersionPress is the brainchild of Borek Bernard and Jan Voráček, two Czech developers who first announced their intention of bringing version control to WordPress back in mid–2014. The original vision was to use crowdfunding to fund the development, but an initial attempt at fundraising fell short of its goals.
Around this time, the developers managed to secure $400,000 in seed funding from Prague-based Credo Ventures. This was a key part of being able to move away from their previous funding model of an Early Access Program, and start moving towards an open source model.
The official announcement of VersionPress as an open source project duly arrived in early-April 2016, complete with an official move to GitHub and formal code review by Daniel Bachhuber of WP-CLI fame. Version 3.0 wasn’t far behind and was released at the end of April.
Getting Started With VersionPress
One of the nice things about VersionPress is the obvious care and attention that’s gone into the project documentation. A quick read of the getting started section will guide you swiftly through the basics of installation and configuration.
There’s nothing particularly onerous to deal with here, and installation of the plugin itself is performed as you would with any other plugin once you’ve downloaded it from Github. It’s worth pointing out, though, that you will require WordPress 4.4 or higher, PHP 5.6 or higher, and Git 1.9 or higher. If you have a quick look at the hosting page, you’ll see that this might be a stretch on many shared hosting packages.
VersionPress will perform a series of checks on the server environment prior to activation, so troubleshooting should be straightforward. That said, we did have to resort to dropping into Git to clear the decks initially when testing it locally – the first real sign that VersionPress is definitely not currently aimed at a non-technical audience.
Tracking Changes, Undoing, and Rolling Back
The core set of functionality VersionPress offers centres around tracking any changes that are made, and then giving you a straightforward way of either undoing an isolated change, or rolling back entirely to an earlier state of your site.
Local testing showed that this set of features works pretty solidly out of the box, but there are a couple of reasonably significant caveats that need to be mentioned. The first is that changes from manual file edits and FTP uploads need to be committed manually. The second is that, while tracking changes and reverting or undoing on the theme level was straightforward, things get a little more tricky when it comes to plugins.
The good news is that a quick look at any Plugins tab inside WordPress will show you whether a plugin is supported or not. The bad news is that the list of unsupported plugins is not small.
As the screenshot of the relevant section of the documentation above makes clear, we’re dealing with a potentially enormous amount of non-compatible plugins here. In fairness to the makers of VersionPress, they’re actively soliciting feedback from plugin makers and working hard on wider compatibility, but it’s a significant sticking point in the current version.
Running Multiple Environments and Synchronization
The other major feature of VersionPress is its ability to run multiple versions of a WordPress instance simultaneously, and then merge their differences down the line. Some of the terminology is a little wooly here, and the terms instance, environment, clone and installation are used interchangeably. Essentially, what they boil down to are different branches in Git.
There’s an excellent blog post from Borek Bernard outlining the thinking behind this approach if you want to dive into more detail, but the main plus point is that the database is also brought under version control along the way — a feature that potentially removes an awful lot of traditional development pain points.
It should be noted at this stage that using this feature currently requires having WP-CLI running, and that you’ll be dropping into a console environment to clone or merge sites. Merge in this case is used as a catchall term to cover both traditional Git push and pull commands.
While it’s clear what the developers are going for with this, the previous point we highlighted about plugins is a bit of showstopper in this context as well. As it stands, the direction the plugin is going in is exciting, but it feels like it’s not quite there yet in terms of practical day-to-day use. Again, it’s worth stressing that the developers are quite clear that the plugin isn’t yet suitable for production use, so that’s in no way a knock against how far they’ve already come.
The Road Ahead With Version 4.0
Plans for version 4.0 of VersionPress are already well under way, and two of the main areas of focus are, understandably, third-party plugin support, and UI/UX improvements. We can also expect to see improvements in how the plugin handles image and media versioning.
The target release date of version 4.0 is late Summer 2016, and its stated goal is “preparing VersionPress for the real world.” Whether it’ll match that lofty goal as early as the next major release is up in the air, but the core development team have already made great strides in that direction. It’ll be particularly interesting to see how much support there is from major plugin developers in hammering out the next version of the plugin, now that it’s officially an open source project.
Slick, intuitive WordPress version control is a big hairy problem that nobody has quite fully cracked yet. VersionPress definitely represents the best effort in this area to date, and has come an impressively long way in a short amount of time.
Lack of support for major third-party plugins is an issue, but the developers are open about the fact that they don’t yet consider the plugin truly ready for primetime. Their background funding and successful switch to an open source model suggests that they’re in a great position to make the next leap with the help of the community at large.
We’re curious to hear your thoughts on VersionPress and its chances of making a difference as an open source project. Have you experimented with its use or do you have any thoughts about the direction it’s going in? Get in touch via the comments below and let us know!
Featured image: geralt
Join the conversation