Migrating Blog to Hexo
Hexo is a static website generator, whereas Ghost is a fully functional blog website that allows creating drafts directly from the blog website. Since it is a fully functional website, I expected Ghost to be more complicated to install, however, I was surprised to find that the installation was very similar. With Ghost, all it takes is downloading it from the Ghost repo on Github and then extract the content from the zip file. Hexo is a bit more technical and requires running a few NPM commands in the terminal. Since I am using NPM for most of my projects, it hardly makes any difference for me.
There is no clear winner when it comes to configuration and running the blog. Both are good for different things and not great at both. Ghost was super easy to set up due to the straightforward configurations, however, since it requires a server to host the web content the setup takes more time (e.g. spin up new server and installing software on it). Just remember it is not always necessary to install Ghost yourself, for example sites like DigitalOcean could deploy a Ghost blog with just a few clicks. The reason why I decided to migrate to Hexo is the nice compatibility with Github Pages. It means I can essentially host my blog on Github for free. So getting it up and running was as easy as running one command in the terminal. But the downside is that there were a lot of things to configure, and most of useful functionalities doesn’t even have a default value e.g. Language.
Both frameworks support 3rd party themes and have similar number of resources to choose from. I personally don’t have a preference when it comes to this, and even if none of the themes makes you happy there’s always the option to create one yourself.
When it comes to functionalities, I think Ghost wins hands down. Not only the fact it supports multiple users, but the blog writing and publishing features feels fantastic to use as well. The split view of Markdown and rendered view is an amazing idea that doesn’t exist in other frameworks I came across. It strikes the perfect balance between “focus on writing” and “focus on the end result”. Image upload, draft auto-save and other functionalities makes writing blog posts fun to write. With Hexo, there’s only one thing to do which is write it in a IDE or TextEditor. Uploading images and videos also involves more manual steps, definitely less enjoyable compared to Ghost.
For more advanced features such adding search, comments or changing themes I actually find Hexo much easier to customize. Not only because the configuration is in the same place, but since there’s no server involved deployment is also easier. With Ghost, most of the time I had to SSH into the server and modify a bunch of files to get the same result.
Publishing blogs can’t be easier on Ghost, with a click of a button it can be published or unpublished. For Hexo, it takes a few more steps (commit changes & deploy to Github Pages) and often requires the author to be using one machine due to the dependency on NPM set up and etc.
Both frameworks has a community behind it. As of now, Ghost has 21,720 Stars and 5,160 forks on Github whereas Hexo only has 14,282 Stars and 2,206 forks. This makes Ghost the clear winner. So why did I switch to a less “popular” framework? During the time I have been using Ghost, there has been a few updates and the only way to install them is by SSH into the server and download/unzip the newer version of Ghost and migrate the data across. This is not a good experience and definitely gets annoying after a few times. The constant notification reminder in the admin panel also doesn’t help. For Hexo, it would be as easy as running
npm install in the terminal.
It has only been a few days with Hexo, and already I am enjoying it more than Ghost. Hexo is probably not suitable for non-technical people out there. But if you are a developer or comes from a technical background (basically knows how NPM and Github works) then I encourage you to give this a try. After the switch over, I don’t ever have to worry about my server being taken offline and the hosting will always be free :)