A micro web framework for Groovy
Groovy Python
Pull request Compare This branch is 13 commits ahead, 5043 commits behind ratpack:master.
Latest commit 0dbe49c Apr 12, 2013 @raymyers raymyers Merge pull request #28 from alkemist/master
Update readme to point to new repo.
Failed to load latest commit information.
sample adding ability to import in slimmed down app Mar 10, 2011
scripts Fixed help message in runapp.groovy May 28, 2011
src Fixed variable scoping issue in previous commit, "Ratpack request del… Jan 21, 2013
.gitignore ignore .DS_Store files that Finder on the Mac drops everywhere Apr 29, 2011
README.md Fix link in readme. Apr 12, 2013
build.gradle Upgrade to Groovy 1.8.4 Nov 29, 2011



This project has moved to https://github.com/ratpack/ratpack. For version 0.7 and newer, please see that repository.

A micro web framework for Groovy

Ratpack is inspired by the excellent Sinatra framework for Ruby, and aims to make Groovy web development more classy.


Groovy 1.7.1+ and Gradle (to build and fetch other dependencies).

Getting Started

Ratpack is still very beta. But, you can start using it right now.

To easily run your app from the command line, build the Ratpack project and add the binary to your PATH:

gradle buildDistro
export PATH=$PATH:`pwd`/build/ratpack/bin

Here's a basic "Hello, World" app:

get("/") {
    "Hello, World!"

If you save the above code in hello.groovy and run it on the command line, it will start your app in Jetty on port 5000:

$ ratpack hello.groovy 
Starting Ratpack app with config:
2011-05-28 07:44:51.408:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2011-05-28 07:44:51.573:INFO::jetty-6.1.24
2011-05-28 07:44:52.169:INFO::Started SocketConnector@

You can also use the 'runapp.groovy' script to auto restart your app when there are changes in the directory.

$ groovy scripts/runapp.groovy appdir/hello.groovy appdir

POST and Other Verbs

post("/submit") {
    // handle form submission here

put("/some-resource") {
    // create the resource

delete("/some-resource") {
    // delete the resource

register("propfind", "/some-resource") {
    // you can register your own verbs

register(["get", "post"], "/formpage") {
    // you can register multiple verbs to the same handler

URL Parameters

You can capture parts of the URL to use in your handler code using the colon character. Any parameters that are captured are stored in the urlparams map.

get("/person/:personid") {
    "This is the page for person ${urlparams.personid}"

get("/company/:companyname/invoice/:invoiceid") {
    def company = CompanyDAO.getByName(urlparams.companyname)
    def invoice = company.getInvoice(urlparams.invoiceid)
    // you get the idea

GET and POST Parameters

Parameters in the query string or passed in via a POST request are available in the params map.

get("/search") {
    def results = SearchEngine.search(params.q)
    // etc.


Render templates using the render method. To specifiy where to load template files from, set the templateRoot setting. If the file isn't found in the template root, the renderer will try to load it as a resource from the classpath.

set 'templateRoot', 'myapp/templates'

get("/") {
    render "homepage.html"

You can also pass in a map to use in the template.

get("/page/:pagename") {
    render "page.html", [name: urlparams.pagename]

The template syntax is the same as Groovy's SimpleTemplateEngine.

The Development Server

The default port is 5000, but you can specify another if you wish by adding the following to your app:

set 'port', 8080