I Ain't 'fraid of No Ghost

By @zachfeldman
Written on Oct 15, 2013

I’m writing this blog post from Ghost’s new editor.

Ghost Post Editor

The beginning of the README.md summed up Ghost pretty well.

“Ghost is a free, open, simple blogging platform that’s available to anyone who wants to use it. Lovingly created and maintained by John O'Nolan + Hannah Wolfe + an amazing group of contributors.

Visit the project’s website at http://ghost.org!”

Sounds simple enough. I visited the website and set to work getting Ghost to do its thing!

Taming the Ghost

It wasn’t all peaches and pudding getting it to start up, especially for someone coming from the Ruby/Sinatra/Rails world like myself.

Here are the steps I used to get Ghost up and running for the first time:

  1. Install node and npm, the node package manager. Run
brew install node curl https://npmjs.org/install.sh | sh

Skip this step if you already have them installed (I did but hey, why not throw this guy in?)

  1. Clone the latest version of their repo on GitHub, recursively to include the default theme. Git submodules at it again! Then cd into the Ghost directory.
git clone --recursive git@github.com:TryGhost/Ghost.git cd Ghost
  1. Next up, open the Ghost configuration file to get things ready in there. It’s located in the main project directory. If you don’t have one, just use config.example.js and rename it to config.js. You’ll need a mail service setup and I recommend Mailgun. There are some great instructions on where to add the mail configuration right here. The other config options are probably fine as their defaults.

  2. Run npm install grunt. If you don’t have the grunt CLI (Command Line Interface) installed, also run npm install grunt-cli. Then run grunt init which will run a bunch of setup files and render scss files.

npm install grunt npm install grunt-cli grunt init

I had to modify the scss files and remove a dependency on keyframes in order to get my scss to compile. If you’re also having issues, take a look at my commit [right here] on my fork.(https://github.com/zachfeldman/Ghost/commit/7ab54277dc6f35fdf505c863788bc3b2931ca32d).

  1. Start the server and navigate to localhost:2368. You should see the sample post.

Ghost Sample Post

  1. Start the server and navigate to localhost:2368/ghost/signup to add an admin account to Ghost. Once you do this and login to Ghost, you’re welcomed!

Ghost Welcome

Working with Ghost

Click the + or NEW POST links to create a new post or the post itself to edit it. Here’s a screencap of me editing this post, which I was able to do by clicking its title on the last screen:

Ghost Editor

Pretty intuitive so far. Make sure you save your posts by clicking “Save Draft” in the bottom right. Posts are not saved automatically which I found out the hard way.

There’s also a settings and profile page:

Ghost Settings

Ghost Profile


Ghost is off to a great start! Having used and developed with WordPress, Tumblr, Middleman, Jekyll, and a few other of the usual suspects, Ghost has a few things missing but I know it’s improving at a rapid rate. I noticed a few possible improvements in my first pass that may or may not already be in development:

  • The install process should be a little more intuitive and descriptive for developers who don’t typically run node apps. Of course everyone can learn, but this will only improve people’s will to try out the platform.
  • Making sure the post preview is always rendered in the same place as the user’s cursor while editing a post. It does follow you when you scroll but not always when the cursor goes somewhere.
  • Automatic post saving on edit/changes made.
  • The ability to easily embed images through S3, Imgur, or Dropbox. Filepicker.io would be an amazing solution. Right now, I’ve uploaded my images to S3 manually and then grabbed their URLs.
  • Docs on how to deploy to Heroku if this is possible

Regarding that last point, I’m still trying to get Ghost up on Heroku in production mode. If you have any ideas, take a look at my feeble efforts (in need of a squashing) documented here on my GitHub. Much congratulations to the team on an excellent release, I’m excited to see where this ghosts! I mean…goes! For now, I’m back to Middleman though.

Sign up for our e-mail list to hear about new posts.