We are excited to officially announce the open source release of our REST framework rest !

rest is a set of packages used to write, document, and use RESTful applications. You write your API in Haskell using rest ’s DSL. This API can then be run in different web frameworks like happstack, snap, or wai. Additionally, you can automatically generate documentation from it, as well as client libraries for Haskell and Javascript. We have been using it in production for most of our services for a long time and we like it so much that we decided to share it with the public.

If you want to start using rest , check out the tutorial or the example application. You can also come to the Haskell Exchange 2014 where Erik will give a talk about rest . We’d also be happy to answer any questions you have, shoot us an e-mail!

The most important packages are:

rest-core: A DSL for defining versioned and web server agnostic REST resources. This is the workhorse of the framework

rest-gen: Automatically generates documentation, Haskell, JavaScript, and Ruby clients from a rest API

rest-snap, rest-happstack, rest-wai: Drivers for running resources using the web server of your choice

We have also released other packages that are either used by or can be used with rest :

rest-client: Used by haskell clients generated by rest-gen

rest-types: Types used by the other rest packages

json-schema: Define and derive schemas for JSON serializations

generic-aeson: Generically derives JSON serializations for data types minimalistically

regular-xmlpickler: Generically derives XML serializations for data types

aeson-utils: Utilities for working with Aeson.

hxt-pickle-utils: Utility functions for using HXT picklers

multipart: HTTP Multipart implementation forked from the cgi package

rest-stringmap: Maps with string-like keys with built-in serialization to XML and JSON (since JSON doesn’t allow arbitrary keys)

code-builder: String manipulation library for code generation

We had a great time working on rest at ZuriHac (thanks for organizing, Better!) and we are happy to see that a lot of people were interested in our work. We got a lot done, here are some highlights:

Erik wrote an introductory tutorial to rest

Håkan Thörngren rewrote the rest-gen Haskell code generator to use haskell-src-exts, it was released in rest-gen-0.14

Christian Berentsen did several things: Cleaned up the interface of json-schema, it was released in json-schema-0.6 Added support for outputing Fay compatible json as a separate output type (we want to make it easier to extend rest with more output types so things like this can go in external packages) Implemented a generic API discovery resource that you can hook into your API with no configuration

Tom Lokhorst helped out with some always appreciated bug fixing

Sebas wrote the rest-wai driver to make sure everyone can use the web server they prefer together with rest

Adam worked on the rest-example application and rewrote parts of rest-gen to make the code generator and the library interface simpler

wiz did performance benchmarks and created a script to generate haddocks for rest itself

I hope I didn’t forget anyone. A big thanks to everyone who participated!

All the mentioned projects are available on hackage and in public repositories on github. We also created a public mailing list for all our open source projects.