This post will explain how our team was able to greatly reduce the friction in writing documentation guides by standardizing on a toolchain that other projects can use.
A Bit of History
Before there was ClojureWerkz, myself and Alex were fairly active in the open source community. I maintain several RabbitMQ clients and needed a new documentation site for one of them.
So I put together a doc site based on Jekyll and Alex helped me with styles. This toolchain has evolved a bit and when we were looking at writing documentation for Monger and Langohr in late 2011, we decided to just base them on what we already had and knew: that Jekyll site amqp gem was using.
ClojureWerkz grew and we kept reusing the same thing over and over again. By June 2013, ClojureWerkz has accumulated about a dozen of projects that have substantial documentation guides. Writing, editing and maintaining these docs took time and in the process, we’ve found ourselves repeating a lot of things between sites.
It’s easy to notice a lot of similarities between, say, Elastisch docs and Langohr docs. We also try to take good ideas from doc sites developed later and feed them back into older sites.
So we needed a standard toolchain that all these documentation projects could use. In particular, we wanted it to give us a very fast way of writing the first couple of guides before we would worry about finer details and editing.
Enter ClojureWerkz Docslate
Docslate is a relatively unknown project. We don’t write about it on this blog. It does not get updates very often. It does, however, play a major role in ClojureWerkz: powering our documentation guides and making writing them a more pleasant and straightforward process.
What Is Docslate
Docslate is a Jekyll site with predefined structure and integrated Twitter Bootstrap. Once you have it going, with just a few edits you are ready for the work that really matters: writing helpful documentation guides.
Why You Should Adopt Docslate For Your Project
Docslate lets you get to writing quickly without spending too much time on issues such as
- Should I use Jekyll, Awestruct, hack my own thing with Pandoc or use a wiki?
- What library should I use for code highlighting?
- How do I make the docs look decent?
- What licenses should I use for the site and content?
and so on.
It’s dead easy to put together a pretty good documentation site with Docslate and then work on copy and styling once your first version is ready to go live.
How To Get Started With Docslate
Since Docslate uses Jekyll, you’ll need Ruby (any version, although we typically use 2.0 or 1.9.3 these days) and RubyGems installed.
Then install Bundler with
gem install bundler
Clone Doclsate Git repository with
git clone git://github.com/clojurewerkz/docslate.git my-project-guides
Change to your local clone, remove .git
directory and re-init the repo
(Docslate is simply a starting point, your doc site should really be in a new
repo):
cd my-project-guides
rm -rf ./.git
git init
git add .
git commit -m "Initial commit: Docslate"
Then install dependencies with Bundler:
bundle install --binstubs
and you are ready to run a development server with
./bin/jekyll serve --watch
then navigate to localhost:4000.
The site you’ll see is very similar in structure and styles to Elastisch docs, Monger docs, and so on.
How To Add Content
Docslate assumes your documentation guides have an index page, a ToC page and one or more guides.
The index page is in HTML and can be found in index.html
in the repository root.
The ToC page is in Markdown and can be found with individual guides under articles
.
Docslate contains 3 pages for you to start with:
guides.md
getting_started.md
community.md
guides.md
is the ToC page. getting_started.md
contains the Getting Started guide.
Finally, community.md
gives you a page to list information about the project,
its mailing list, IRC channel, Twitter account, and other things you need to
make your open source project really awesome.
Adding new guides is as straightforward as adding a Markdown file to the articles
directory
with the header (title, etc) Jekyll expects and linking to it from the ToC page.
For example, to add a guide on extending your library, create a new file at articles/extensions.md
,
add Jekyll header to it, make sure development server is started and navigate to
localhost:4000/articles/extensions.html.
How To Customize Layout
Layout files can be found under _layouts
. There are two layouts available:
- Default layout
- Article layout
Article layout is used to display individual articles (guides), default layout is used for everything else.
How To Customize Styles and Assets
Styleshsets and JavaScript files can be found under assets/stylesheets
and
assets/javascripts
, respectively.
How To Generate The Site
Use
./bin/jekyll build
to generate the site for deployment. Site root then will be under _site
. This directory
is what you will deploy. It only contains static assets so deployment usually is
as straightforward as rsync
-ing files to your server and serving them with Nginx, Apache
or any other Web server of your choice.
Where To Go From Here
Docslate is a starting point. It is meant to be customized for your project’s needs, styling and so on. Feel free to do it, add JavaScript libraries you need, upgrade and customize Twitter Bootstrap, and so on.
Wrapping Up
Docslate was born out of a dozen documentation sites we have for ClojureWerkz projects. It’s a battle tested, easy to use toolchain that provides you a good starting point and is completely open sourced under a reasonable license.
Now you don’t have an excuse to not document your open source project well!
Michael on behalf of the ClojureWerkz Team.