Working on the Ghost Code

Since its first release, I have been eager to contribute code to Ghost. Browsing through the issues on Github makes it quite easy to find a task to work on. Now comes the difficult task: Setting up a proper development environment.

Setting up a development environment

The Ghost team provides an excellent way to setup a development environment within a few minutes. Ghost-Vagrant uses Vagrant and Puppet to setup a virtual machine using VirtualBox and install all necessary dependencies for you.

~/
 |- Ghost/
 |- Ghost-Vagrant/

The VagrantFile in Ghost-Vagrant requires your Ghost clone to reside in the same directory as Ghost-Vagrant. Running vagrant up the first time will fetch a basic 64bit image of Ubuntu and set up Node.js, Phantom, Casper on the virtual machine. Vagrant will also try to mount your clone of Ghost using NFS (on Ubuntu run sudo apt-get install nfs-kernel-system). This makes it possible to use an IDE on your host and run Ghost inside the virtual machine without having to install all dependencies on your host system.

Contribute

When you decided to take on a task make sure to follow the Contribution Guide and send your pull request when you are finished. Always write unit/functional tests to make sure the feature you built will work in the future.

Remember: Ghost is just for blogging. Any features that go beyond that are better suited for a plugin once the Plugin API is public.

Run Ghost in development mode

Ghost uses Grunt for a number of tasks. Grunt comes in really handy when running as grunt watch. This watch task automatically re-compiles Javascript/SCSS whenever you make a change. This is really helpful in development since you do not have to run grunt every time you make a change.

Getting Help

Most of the Ghost developers hang out in IRC in the official Ghost channel on Freenode: #ghost. They are really responsive and always helpful! (Thanks from my side!). The IRC channel is also a good place to get to know fellow Ghost users.


Working on Ghost is a very nice experience so far and I plan to continue helping to improve the platform.