Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Timmy is all about specifying and deploying a server architecture.
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.




Timmy is friendly opinionated software(tm) for specifying and deploying a server architecture.

It's being built off of the following tenets:

  • Building from source is good.

  • I shouldn't need any management server(s) to be a point of failure for bringing up/down/managing servers.

  • I use *nix for my servers.

  • I don't want versions of software to change or update until I ask them to.

  • I shouldn't be tied to any distro, it should just work on whatever I've got the right knowhow for.

  • I should be able to easily move files to and from my servers.

  • I should be able to easily use EC2.

  • I should be able to have something up and running within 30 seconds.

  • I should not be confused by the documentation - the tools should be self-documenting with a README and a quickstart.

If you don't agree with any of these, that's fine - there's plenty of other tools out there that are really cool and might fit to your standards better. Chef, Puppet, etc.

So, what does Timmy do? You feed Timmy beautiful definitions of server roles, such as “web”,“database”, or “tomfoolery”, which you write in clever Ruby, mixing in clever shell commands wherever you feel smarter than Timmy (which, let's face it, is gonna happen). Timmy takes these definitions, and then limps them over to your server(s), where he runs them. If he finds any serious errors, he'll stop, but if he can keep on plowing through he will. What a good little guy!

Check out the 'example' directory to see an example architecture.

Quickstart yo!

gem install timmy


Timmy.role :database do package 'mysql-server' upload 'example.conf.erb', :remote => 'example.conf', :erb => true command '/etc/init.d/mysql reload' command 'halt' end

Timmy.server '' do user 'apps' arch :centos role :database end

adrian$ ruby example.rb

What you need

  • Knowledge of how to set up your server(s) the way you want. If you want to just preroll a bunch of packages together, this isn't for you. Sorry.

  • Key-based SSH access to your servers.

  • sudoability on your servers (if you need to be root, of course.)

What's Here

  • Uploads, executions, package installation with yum

What's On the List

  • Any sort of test coverage.

  • Failure state handling.

  • Version locking on packages.

  • Concurrent connections.

  • Support of architectures other than CentOS.

  • A better context exposed to ERB config files.

What You Can Do

  • Use it and let me know what doesn't work!

  • Fork it, and tweak it to your own nefarious purposes!

Copyright © 2010 Adrian Pike, released under the MIT license

Something went wrong with that request. Please try again.