The web development community in Haskell has recently had a large boost in activity, resulting in a plethora of choices in libraries. As usual, a breadth of options is a double edged sword: you can choose the tools more to your style, but it is harder to find quality tools.
This document is meant to be an up-to-date listing of different libraries available to perform various tasks related to web development. We want to strike a balance here between enough information to make an informed decision, while keeping a good signal-to-noise ratio. As such, for editors, please try to include the following information on each library:
- Most recent version, and release date
- Link to the code (either Hackage, or elsewhere if not on Hackage)
- A short summary of what the library does. In particular, what makes this library different than others
- Links to more documentation. If there are lots of links, consider creating a separate Wiki page for those links, so as not to clutter this page.
- Links to sample code. Both short snippets and full-scale applications are welcome. Again, create a separate Wiki page as necessary.
- Dependencies on other packages. For example, a web framework should list its choice of templating system, server, etc.
Interfaces provide an abstraction between servers and applications, allowing different servers to be swapped easily.
Current version: Hack 2009.10.30. Released: October 30, 2009.
Hack is a simple interface for applications. Based on Ruby's Rack, it presents a very low barrier to entry. Unlike WAI, it uses lazy bytestrings for request and response bodies, making it easier to use for some. Many backends are available, for numerous backends; simply search hackage for "hack-handler-".
WAI (Web Application Interface)
Current version: WAI 0.2.0. Released: July 12, 2010.
The WAI is designed to be a type-safe and performant interface. Type safety is achieved by having data types such as RequestHeader, ResponseHeader, HttpVersion, as opposed to simply using Strings or ByteStrings. Performance is achieved by using an enumerator interface, allowing constant-space response construction without needing lazy I/O. Backends available are currently a simple server, CGI, FastCGI and a Snap Framework backend.
Samples: Basic sample application
TODO: Information on Happstack, Snap, others.
Current version: Hamlet 0.4.1. Released: July 25, 2010
Hamlet's main goal is to provide you with fully type-safe templates. It uses Haskell's quasi-quoting facilities so that everything is checked at compile time. Unlike using an HTML combinator library, it uses a more intuitive syntax for defining your templates: a Haml-inspired syntax to be precise. It also has support for type-safe URLs, and achieves very high performance by being based on BlazeHtml and performing compile-time optimizations.
Documentation. Sample. Dependencies: BlazeHtml.
Current version: HStringTemplate 0.6.4. Released: July 14, 2010.
See the HStringTemplate wiki page.
Current version Persistent 0.1.0. Released: July 13, 2010.
Persistent is a high-level, non-relational, type-safe persistence layer for Haskell. Its design allows it to be used on both SQL and non-SQL backends. Heavy usage of type families allows strong type guarantees, while usage of template haskell removes the need for boilerplate coding.
Documentation. Sample. Dependencies: Hamlet and web-routes-quasi (only for convenience instances).
Current version UrlDisp 0.1.7. Released: February 4, 2009.
See the wiki page [[UrlDisp]
Current version web-routes 0.22.0. Released: April 20, 2010.
Library for maintaining correctness and composability of URLs within an application. A collection of types and functions that ensure that URLs generated by an application are valid. There are a number of related packages available on Hackage.
Current version web-routes-quasi 0.5.0. Released: July 13, 2010.
Allows declaration of type-safe URLs through a simple quasi-quoted syntax. The quasi-quoter automatically creates datatypes, parse functions, render functions and dispatch functions, ensuring your code is correct without writing a lot of boilerplate. Also includes some advanced support for creating subsites, aka pluggable web components.
Documentation. Synopsis. Dependencies: web-routes
Current version Yesod 0.4.1. Released: July 15, 2010.
Yesod is designed for RESTful, type-safe, performant web apps. By leveraging quasi-quotation for the more boilerplate tasks, we get concise web apps with high levels of type safety. Its Hamlet templates are compile-time checked for correctness, and the controller (web-routes-quasi) uses type-safe URLs to make certain you are only generating valid URLs. It loosely follows Model/View/Controller principles.
Documentation. Hello world sample (screencast). bloggy blog engine. Dependencies: Persistent (model), Hamlet (view), web-routes-quasi (controller), clientsession, authenticate.
TODO: Expand. See homepage: http://snapframework.com/
TODO: Expand. See homepage: http://happstack.com/index.html
Current version clientsession 0.4.0.1. Released: May 24, 2010.
clientsession encrypts and hashes data so it can be stored in a cookie safely. This allows you to have very scalable user sessions: you can use multiple servers, and they need only share the encryption key.
Documentation: haddocks. No samples or dependencies.
Current version authenticate 0.6.3. Released: June 30, 2010.
A library for allowing third-party logins to your sites. Currently supports openid version 1 and rpxnow.
Documentation: haddocks. No samples or dependencies.
- Applications and libraries/Web programming
- Practical web programming in Haskell
- Blog articles/Web
- Web Projects