Migrating from Wordpress, to Middleman, to Ghost.

Lots of changes on PerpetuallyBeta.com! I finally decided that I was absolutely sick of dealing with the mess that was Wordpress under the hood*, and given the multitude of awesome options that have been released recently - I finally decided that this website & blog needed some love.

Before I started using a new blogging platform, and since I knew it would (hopefully) be years before I changed the actual platform again, I had a couple of requirements that I wanted it to meet. Namely:

  • Open Source: While I was going through my old blog, I realized that over half of my content was missing. Completely gone. A victim of the Posterous acquisition (and subsequent shutdown). At the time I had been in the middle of a cross continent move and upcoming nuptials, and I hadn't been on top of things enough to realize that I should have downloaded my entire archive, only to upload it somewhere else. Poof - two years worth of content that I had curated from around the web gone.
  • Hosted and Self Hosting Options: My old blog was completely self hosted on a cheap shared host. This was convenient (and cheap) at times, but was equally a maintenance nightmare. Blogging is not my job, nor is it any source of income for me, so while some day I may host this blog again - for now I am more then happy to pay someone a nominal fee to have them host it for me.
  • Be in a language that I liked / used: PHP can be great (and it definitely has its uses), but it can also be horrible - either way - it was a language that I absolutely never did any work in. All of my side projects were either in Objective C (for my iOS apps), Ruby & Rails, or node.js - designed using Handlebars, SCSS, etc. It was just going to be a lot easier for me to fiddle with the site if I was comfortable with the underlying technology.
  • Support for Markdown? Not a requirement per se, but I prefer writing & formatting in markdown then I having to dig through html when things don't look like per post, so this was a really important nice to have for me.

As I put these requirements together, I starting looking through first at Middleman, and then eventually at Ghost. This is definitely not a comprehensive comparison between the two platforms - but just a summary of my experience with both.


I'm not sure exactly where I heard of it - but I came across Middleman and was convinced that it was the solution I was looking for. Not only did it meet everything I wanted in a blogging platform - it also outputted a static site that would be super fast and easy to maintain!!! I was also sold on the vision of getting to write blog posts directly in Markdown, in the same text editor that I used to write code (in my case, Sublime Test 2).

Installing Middleman was an absolute breeze, and I was able to get everything up and running within a few minutes. The default theme is tremendously barebones, and so I begin to put one together (took probably 8-10 hours over the course of a week or so). While I was doing this I realized that there was no true wordpress to middleman exporter - so I wrote my own (which someone went on to turn into a middleman gem).

It was around this time that I begun running into some of the limitations of Middleman, that started to make me look around at other platforms


  • The Writing Experience: Writing your blog post directly in Sublime Text in Markdown sounds like a fabulous idea - but in actuality - its quite cumbersome. Sublime text is made for coding - not for writing - and it shows. Not to mention, in order to include images in your Middleman post, you first needed to create a subdirectory within the Posts folder, then you have to ensure that the subdirectory has the exact same name as the blog post you are creating, and then you need to refer to it in some obtuse middleman specific way in your blog post. Thats a lot of friction to just publish a simple image.
  • Publishing a New Post: Static site generators are an awesome idea - and for many use cases they are absolutely fabulous (I still use Middleman to prototype and wireframe new site ideas), but to have to rebuild your entire website, and then completely redeploy it every time you write a new post (and of course, repeat this entire process if any of your formatting was a little wonky) just became a bit too much for me. I wanted a more simple system, where I could just hit a button and my post would be live.
  • No Multi-Blog Support: This is actually not true anymore, Middleman added multi-blog support recently - but while I was looking at it, the documentation still didn't reflect this (though it does now). Coming from the Wordpress world it may seem like a fringe feature, what on earth would you need Multi-blog support for? But in the case of Middleman if you want to have all of your Projects or Portfolio posts be totally separate from your Blog Posts, you're in the multi-blog territory.
  • Documentation that Lags Behind Release: As I mentioned above, Middleman's documentation generally lags 4-5 months behind their feature releases. This is less of a problem if your comfortable diving directly into the source and hacking together solutions of your own - but for better or for worse - I prefer documentation over reading source code. When you are waiting for new features and then realize that actually, they have been released months ago you just have no idea how to use them - it becomes an exercise in chasing down blog posts or taking apart code (when I would rather be blogging or working on one of my side projects).
  • No hosted option: This was a super minor issue given the simplicity of deploying a static site, but is worth noting here.

All of the above led me to look around some more, and I came across Ghost.org.

Ghost and Middleman are similar in the sense that they are both open source and relatively young projects, but thats about where the similarities end.


If you have heard of Ghost before - its probably through their incredibly successful Kickstarter campaign (where they raised almost 8 times their goal).

Ghost takes a different approach to blogging then Middleman in several ways:

  • Its not a static site generator: While there are benifits to going static, the downsides of having to rebuild my whole site every time I write a new blog post was just too much for me.
  • Natively built for blogging: Middleman requires an additional gem to provide blogging features, and as you begin to use it it becomes pretty obviouse that it wasn't built specifically for blogging (the entire blogging experience feels tacked on). Ghost didn't suffer from this a all.
  • Written in Node.js & Handlebars: I don't like / use node - but it's better then php and probably worth learning at some point.
  • Hosting Options: This actually ended up being more useful then I thought it would be. With all of the recent Heartbleed drama, I just wanted to pay someone else to keep my server up and running and secure (atleast for my blog). $5 / month is not a lot at all for peace of mind, and if I can support an open source project while at it, why not!
  • Phenomenal documentation and customer support: When the documentation fails you - just tweeting the Ghost account got me responses in less then a few hours. I am guessing this stems from the fact that the Ghost team has gotten the funding to do this full time, and that lets them invest the time that they need in solid documentaton and customer support.

Overall - I got my site up and running in under an hour (Ghost already offers their own Wordpress to Ghost importer), and with a few more hours of time I had a custom theme that I was happy(ish) with.

I'll keep you all up to date on my experience with Ghost as I continue to blog with it - but for now, I think I finally have the blogging experience that I am super happy with and will continue to use.

*I would be remiss in stating that it absolutely should be noted that Wordpress is still the number one blog / small website platform in the world - its tremendously full featured and will do just about anything you want it to do. I on the other hand only wanted a simple blogging platform - and so for me it was too much feature bloat for what I needed.