Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Documentation site for Semaphore.
CSS HTML Ruby Shell
Failed to load latest commit information.
data Add page for PhantomJS
Gemfile Update page titles for language pages
Gemfile.lock Update page titles for language pages Update credentials part in Readme
config.rb Update page titles for language pages
server First working version of docs
update-design-files Integrate new design

Semaphore Docs

Semaphore Docs, powered by Middleman and Amazon S3.


Clone the repo and install all necessary gems with

$ git clone
$ cd semaphore-docs-new
$ bundle install --path .bundle
$ cp data/credentials.yml.example data/credentials.yml

For writing new articles or making updates, feel free to leave dummy credentials in data/credentials.yml.


Pages are stored in source/docs/.

To view the blog locally run:


which actually runs

$ bundle exec middleman -p 4000

Now you can open http://localhost:4000/docs.


Categories will be automatically grabbed from the post heading:

layout: post
title: Custom database.yml
category: Ruby

If the page /docs/ruby.html exists, user will be able to reach it from the post breadcrumbs. If the page doesn't exist, a page with the list of all posts in the category will be automatically generated and displayed.

Embedding images

<img src="/docs/assets/img/2012-06-14/semaphore-homepage.png" class="img-responsive" />

Escaping Erb

You must escape Erb code snippets in files with `.erb` extension ([via](

<%%= foo %>


for Rendered Text people

Simply run


which does bundle exec middleman build and uploads the content to an S3 bucket using the AWS CLI. It requires a valid ~/.aws configuration.


All sensitive credentials are stored in data/credentials.yml check data/credentials.yml.example for more info about format of file.

Importing content from Semaphore Blog

If you turn a blog post into a Semaphore Docs page you should include the canonical url in the post meta data. For more info, visit the Semaphore Blog guidelines.

Something went wrong with that request. Please try again.