VersionPress 1.0 Walkthrough

In this blog post I’m going to show how VersionPress 1.0 works and how it can help you manage your WordPress sites. It is a lot of screenshots so let’s get rolling.

UPDATE: For new features in VersionPress 2.0, see this blog post.

Installing VersionPress

VersionPress ships as a standard plugin so the installation is just a matter of uploading a ZIP file and clicking a few buttons as usual. Once VersionPress is activated, it shows a prompt to start tracking the site:


This takes you to the pre-activation screen:


It seems a bit unwieldy at first but we prefer to do automated checks rather than activate blindly on a site that might cause issues later. If all checks passed VersionPress can be fully activated:


This creates the initial state (version) of a site and all is set.


An important, albeit somewhat invisible feature of VersionPress is the automatic change tracking. Let’s demonstrate it by doing some actions on a site. This is what I did:

  • Trashed the “Hello World” post
  • Installed a new theme
  • Customized it to my liking
  • Created a new post “Hello VersionPress”
  • Updated the blog name (“Test Site” -> “Demo”)

The VersionPress admin page now looks like this:


The user interface is currently quite basic (big improvements are coming in the 2.0 release) but you can already see how VersionPress captured all actions, and some more (those that WordPress does internally). This is valuable in itself (arguments with clients, “I definitely didn’t do this”, anyone?) but it’s not the best part.


The best part are reverts. As you can notice, there are two links next to each action: Undo this and Roll back to this. Let’s play with Undo first.

When I said above that I customized theme to my liking, what I didn’t tell you is that I am a developer and my sense of aesthetics is somewhat peculiar. This is what I came up with:


For some reason, the client wasn’t impressed and the previous design had to go live immediately. Thankfully, that was really easy with VersionPress:


After a single click, my beautiful customizations were gone:


What is interesting to note here is that the updated blog name and the new content have been preserved.

Let’s pause here for a bit, this is important.

What you just saw is very evidently a desirable feature to have, but technically so hard to implement that not many user-facing software solutions do that today. Just think of MS Word, for example. It’s a sophisticated piece of software, being developed for more than 20 years, but when you format a paragraph and then edit a text in it, you cannot undo just the formatting – the reverts are always “all or nothing”. It’s the same with many other pieces of software, from Apple’s Time Machine, Google Docs to traditional WordPress backups.

VersionPress can do selective undo which is a unique, yet very useful and intuitive feature to have. We’re very happy to be able to offer it.

Let’s move on to rollbacks.

Rollbacks take you to some previous state of a site, kind of like a traditional backup & restore but with certain benefits like that you don’t need to decide on a backup period up-front (VersionPress creates new “backup” after every logical change), or that the “backups” are extremely space efficient.

Let’s try the feature and go back to the initial state of the site:


The web now looks exactly like when we started – the default theme is back, the trashed post is back, its comment is back, and so on:


What is important is that we didn’t really go back in history and lose all the newer updates – VersionPress created a new state that just happens to look like the initial one:


This is an important concept due to which no piece of history is ever lost. In fact, the rollback row is just another change from VersionPress’ point of view and as such, it can be reverted! Let’s try to undo the rollback:


And it worked, the pre-rollback state is back! Little bit crazy, right?


Now, you can do this with anything – plugin updates, WordPress core updates, adding or deleting users, really anything. VersionPress is a perfect safety net which you basically set up once and then can forget.

Utilizing Git

The technical beauty of VersionPress is that behind the scenes, we didn’t actually implement a single line of versioning code ourselves. All the powerful features are powered by Git, the world’s most popular distributed version control system. If you don’t know what Git is, you can safely skip this section but if you do, carry on, this will show some important workflows.

For this demo, I’m going to use a common scenario when I need to edit a theme files and that is by far the most comfortably done in an external editor on an IDE. First, I opened a theme file in my favorite text editor and done some edits to it:


Now I can simply commit the change into the Git repo that VersionPress also internally uses to track the site:


The good thing is that when I go back to the VersionPress admin page, I see this manual change there:


I can click the Undo button there as with any other change – VersionPress doesn’t really care how the change was created, whether by auto-tracking or by hand, it’s just one logical change of the site, period.

Now it’s probably quite obvious to you what’s going on: the VersionPress table is just a decorated Git log. Indeed, I can print out the same “table” on the command-line:


… or display it in some GUI client like TortoiseGit:


I can display diffs for every change on a command line:


… or in a comparison tool like Beyond Compare:


I can do branching / merging, I can push the repo to sites like GitHub or BitBucket, there are really no limits. For me, personally, this is extremely exciting because I always wanted something like this and VersionPress is finally a solution that is a simple Undo button from the outside but the ultimate versioning technology from the inside.


Hopefully you now have a good idea of how VersionPress works and what it brings to the table. It’s vital to repeat that VersionPress 1.0 is really just the beginning – there are a lot challenges ahead (shared hosting support, complex 3rd party plugins, etc.) but what we have in 1.0 is already quite unique and can do things that were hard to impossible before.

We hope you like it, and if you do, you can follow the progress on Twitter or Facebook or join the EAP to support the project. Thanks!

24 thoughts on “VersionPress 1.0 Walkthrough

  1. Exciting to see this project finally “coming of age”. I first read about it quite a while ago and have been waiting for its arrival.

    One question:

    I currently use git to manage theme development for my WordPress sites. Will there be any way to import/incorporate existing git repos into VersionPress? I’d like to start using it ASAP, but am put off slightly by the thought of losing all the existing version history & branches on my theme[s]

    1. VersionPress will happily commit into existing Git repos so if you had your WP site files version-controlled already, the initialization commit will just create a new commit in it.

      If you only version-controlled your theme, you can use e.g. Git submodules or other techniques Git provides so that your theme repo and VersionPress repo can coexist.

      Hope this helps,

      1. Thanks.

        I’m a fairly basic level user of git and hadn’t run across submodules before. Sounds like just what I need.

        Off to do some reading up on the subject now.

  2. Amazing development, a challenging development for most advanced developers with very powerful applications. Thanks for getting some good stuff out there for us!

  3. This looks amazing, I’ve been watching carefully.

    It’s great to see that VersionPress will work seamlessly with “plain old git” strategies. Does VersionPress require that WordPress core files get committed? Also, will VersionPress work with WP Engine?

    1. Hi Josh,

      Yes, VersionPress currently commits everything by default, including core files. This is so that the repo always contains the whole truth about the site, even if some core files are monkey-patched or what not. You can use the standard .gitignore, however, if you want.

      WP Engine is currently not supported as they will not allow proc_open() on their servers. Shared hosting support is something that we will be working on for a future release, though, so a solution is coming.

      Thanks for your kind words.

  4. Hi Borek,

    Joined your EAP program just due to your no-bullshit marketing :). Refreshing.

    Do you have plans for access/change control by areas – where an area could be page or some other grouping of stuff (e.g. a microsite)? And distributed VC? Example of use: I out-source a micro-site, we both have VP, they commit (I see), I commit (its on the live site).

    Also, how do you receive ideas/suggestions as part of the EAP?



    1. Hi Mark,

      You could probably set up a workflow like that using multiple repositories, where your colleague has write access to repo A while you have write access to repo B where only the latter repo reflects the production. Please contact us at if you want to discuss this further.


  5. This is pretty freakin’ cool.

    One question though, since it’s a plugin, what if an update actually does crash your site? Is the data stored somewhere else so that you can actually roll back if you lose admin access or a theme breaks?

    1. If you have command-line access to your site you can use VersionPress’ WP-CLI commands to do that. In the future, we’re thinking of creating something like a “remote control” for VersionPress-enabled sites, but that’s quite far away at the moment.

  6. Great idea and Useful tool too.

    But would this tool help when you get the white screen of death?
    In such cases, we cannot even access dashboard.

    1. Please see my reply above, this is certainly a valid and important scenario. Thanks!

  7. This looks promising.
    One question. Does it works with other post types? Eg. WooCommerce product


    1. It works with custom post types in general. WooCommerce, however, adds some additional tables and support for them is coming in a later release.

  8. This is really revolutionary plugin, it combines everything good about WordPress developing and you don’t have to have (but you can) extensive knowledge in GIT using.

    I hope you won’t give up with developing it, there is a lot of potential to become a must-have for everyone who is developing WP sites.

    Good job!

  9. Very good blog you have here but I was wanting to know if you knew
    of any discussion boards that cover the same topics
    talked about in this article? I’d really love to be a part of group where I can get advice from other experienced individuals that share
    the same interest. If you have any suggestions, please let me know.

    Thanks a lot!

Leave a Reply

Your email address will not be published. Required fields are marked *

Some HTML tags are supported