Skip to content
A tiny static web site generator
Ruby CSS JavaScript Other
Failed to load latest commit information.
.bundle Removed .bundle/environment.rb. Dec 28, 2010
benchmark Set the $LOAD_PATH for the association benchmarks Dec 28, 2010
lib Merge remote-tracking branch 'origin/master' Jan 22, 2014
spec Cleanup .scss sources when generating output Feb 5, 2013
.document Initial commit to smeg. Nov 25, 2009
.gitignore Add .sass-cache to gitignore Jul 6, 2011
.rspec RSpec with colours Dec 28, 2010
.ruby-version Removed rbenv-version in favour of .ruby-version Jan 22, 2014
.rvmrc Create gem spec automagically Sep 17, 2011
.travis.yml Update .travis.yml Jan 21, 2014
CHANGES Added latest changes to CHANGES Mar 20, 2010
Gemfile Manually manage gem file. Thanks for nothing, jeweler :-) Jul 1, 2012
LICENSE Initial commit to smeg. Nov 25, 2009 Update Jan 21, 2014
Rakefile Manually manage gem file. Thanks for nothing, jeweler :-) Jul 1, 2012
bonsai.gemspec Specify development dependencies explicitly so tests can run with 'bu… Feb 5, 2013 Added macruby for development builds. Added notes about supported (an… Feb 19, 2012


Build status

Bonsai is a static web site generator, it uses the best tools available for site construction and adheres to best web practices.

What it does

  • Provides a tiny HTML5, liquid driven template set.
  • Implies a simple structure to get started faster.
  • An inbuilt server for development. No setup required.
  • Tasks to export the site to output. Upload the contents of output. Job done.
  • Access to page hierarchy through children, siblings, ancestors and navigation.
  • Generates sitemap.xml ready for search engines to spider your site.
  • Generates robots.txt to be friendly to search engines.

Getting started

  • Install bonsai

    gem install bonsai

  • Run the generator

    bonsai --plant [NAME]

Type bonsai --help for any help with commands


  • Introducing Bonsai - at Melbourne Ruby, January 2010

Development server

Unlike other static generators, bonsai provides you with a built in web server. Once you've generated the necessary files (generator included) you can simply start developing. Type bonsai --cultivate in the root of the generated site, a web server (rack, with thin) will start up.

It will also watch for when you save files - taking care of processing your sass files - kind of like autotest.

Production server

This is the cool part. Drop a bonsai generated site under pretty much anything. Apache, Nginx, Lighttpd - I don't care.

The generator will provide you with a .htaccess file that will turn on gzip/deflate compression for static assets as well as set long standing http caching timestamps and etags.


  • Run bonsai --repot
  • Upload the contents of site-root/output to your production server
    • For example: rsync -ave ssh ./output/

Ruby implementations

Bonsai runs under a number of Ruby implementations, MRI (1.8.7, 1.9.1, 1.9.2, 1.9.3), RBX (1.8 mode), JRuby (1.8 mode, 1.9 mode). Check travis to see the specifics.

Have you used this for a real job?

Yes. I built (and content filled) a web site with around 160 pages in 5 days.

When I found something that didn't quite work, was too slow or perhaps not even possible I wrote a spec and implemented it later. Better software from real requirements. (I used every feature I implemented)



  • Anthony Kolber for writing, then rewriting Stacey from scratch. We spent many hours talking about best practice and software UX.
  • Lincoln Stoll for reminding me to use the tools that I know best


Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.


Copyright (c) 2010 Ben Schwarz. See LICENSE for details.

Something went wrong with that request. Please try again.