Fetching contributors…
Cannot retrieve contributors at this time
127 lines (85 sloc) 3.6 KB


Inspired by Sinatra's simplicity and ease of use, Frank lets you build static sites using your favorite libs, painlessly. It uses Tilt, so it comes with support for Haml & Sass, Builder, ERB, Liquid, & Mustache.

Frank also supports CoffeeScript for writing JavaScript in style, and LESS is planned for the near future.


Create a new project with:

$ frank <project_name>

Then start up the server with:

$ frankup

 Frank's holdin' it down...

And you're ready to get to work. Feel free to use as much or a little of the available libs as you please. Frank works just as well with Mustache / CSS / JavasScript as Haml / Sass / CoffeeScript.

Views & Layouts

All of your templates, and less/sass/coffeescript go into <project>/dynamic, by default. You are more than welcome to organize them into subfolders if you've got lots.


Writing views is simple. Say you've got a blog.haml, in <project>/dynamic just browse to and your view will be parsed and returned as html.


Layouts are also simple with Frank. By default, just create a layout.haml (or whichever language you like best), that contains a yield, and any views will be inserted into it at that point.

Multiple layouts are also easy. In your settings.yml, do something like:

    - name: blog_layout
      only: [blog]
    - name: normal
      not: [blog, ajax]

This tells Frank to use blog_layout.haml for /blog, and normal.haml for everything but /blog' and '/ajax.

Partials & Helpers

Frank comes with a helper method, render_partial, for including partials in your views.

In addition, you can also easily add your own helper methods to use.


To create a partial, make a new file like any of your other views, but prefix its name with an underscore.

For example, if I have a partial named _footer.haml, I can include this in my Haml views like this:

= render_partial 'footer'


Helper methods are also easy. Just open up helpers.rb and add your methods to the FrankHelpers module; that's it. Use them just like render_partial.

GET/POST params

Sometimes it's nice to include user input in your mock-ups. It's especially handy when mocking-up Ajax-driven elements. For this reason, the request and params are available in your templates.

For example, to use a person's name submitted through a form you might do:

%h1= "Hello, #{}"


In settings.yml, you can change your folder names, and server port & host name. Check the comments there if you need help.

Once you've gotten comfortable with Frank, you will probably no longer want the example files included whenever you start a new project. You may also have preferred folder names, and languages that you always want to start projects with.

To do this, create a new base project. Then just copy your base project to ~/.frank. This folder will then be copied for you whenever you run the frank command.



$ gem install frank