Bowler - A RESTful, Multi-Channel ready Scala Web Framework

Bowler is a RESTful, multi-channel ready web framework in Scala, built on top of Scalatra and Scalate, with Lift-JSON doing the heavy JSON lifting. The project is built with Simple Build Tool ("sbt")- we intend to further add custom sbt processors in the future to automate boilerplate tasks.

If you want to get started quickly, please check out the manual/documentation that has lots of code examples, use the sbt quickstart or have a look at the sample application!
Questions? Ideas? Want to contribute? Join our Google Groups mailing list and/or checkout the code on GitHub!

If you want to keep up to date with the latest on Bowler, follow us on Twitter or check out the blog of the author/founder of Bowler


Some of Bowlers features

  • RESTful URL routing based on Scalatra, supporting named parameters, wild card URL's or regex URL's (see more at the Scalatra URL)
  • Uses Scalate for templating: use any templating dialect supported by Scalate, such as Mustache, SSP, Jade or Scaml.
  • JSON API "for free": JSON is central in todays web landscape, be it to create rich webapps with Javascript frameworks like JQuery, or providing API's for mobile apps. Every GET URL in Bowler will return a JSON representation of the underlying view model if you set the HTTP "Accept" header to "application/json"
  • HTTP Request to object mapping with ease: Bowler comes with out-of-the-box support to easily map from requests to arbitrary objects and back while respecting RESTful principles.
  • Composable UI's with ease: Bowler provides the means to easily compose- and re-use UI components with a minimum of overhead. In terms of approach, it lies somewhere in-between Apache Wicket Components/Panels and Lift snippets, but with it's own flavour and based on Scalate.
  • Decomposition of the View into "Resource View" & Layout - A consequence and enabler of the above two points, a stricter separation between the Resource View representing the Model you want to display and the Layout you want to surround it with. The idea behind this is explained here: Decomposing the View in MVC - What's In a View?
  • Localisation & multi-channel support out of the box: localisation of everything from UI to validation error messages is supported out of the box, as is adapting the view and layout based on request characteristics, such as User-Agent (you may want to render a web page differently for an iPhone compared to a desktop browser).
  • Sensible defaults, but ultimate configurability: Bowler has sensible defaults out of the box that you may never change. But it also allows you to extend- hook-in and adapt the framework at any point you choose: Don't like the validation framework? Use another one! Prefer a different rendering mechanism to Scalate? Change it!

Getting Started With the Quickstart!

We have a Sbt quickstart application available, which is a pre-setup sbt project with a skeleton Bowler app. For instructions on how to get this, please visit the bowler-quickstart GitHub page.

Getting Started Using Simple Build Tool

The below Simple Build Tool (sbt) project file should give you all you need to start using Bowler if you're a Sbt user (place the file in your project/build folder). It should download all the dependencies required from Sonatypes public repo once you run the sbt "update" command.

Getting Started Using Maven

If you're using Maven, you need to add the following into your pom.xml (in addition to the other Scala stuff you may want to set up for compilation):

Getting the Code

You can get the full Bowler source code from the Bowler GitHub repo.

Example App & Code

The easiest way to get a quick introduction to Bowler is probably to check out the Example application in the Bowler GitHub repo. This comes fully functioning out of the box with a number of examples of of Bowlers main features, and also comes with relatively well documented and commented code.
You may also want to start browsing the Manual. However, to give a taster (from the example app) of what the core logic and a Controller in a Bowler app might look like, here's an example:

Getting Involved & Getting Help

Bowler has a Google Groups mailing list where you can ask questions, give ideas, feedback and contributions.