Difference between revisions of "Web/Frameworks"

From HaskellWiki
< Web
Jump to navigation Jump to search
m (Removed announce, the home page is sufficient)
(Added the IHP Framework)
(52 intermediate revisions by 25 users not shown)
Line 1: Line 1:
 
[[Category:Web|*]]
 
[[Category:Web|*]]
  +
{{Web infobox}}
   
  +
Content from [[Web]] should be merged here.
Below is a list of Haskell web frameworks.
 
   
  +
Below is a list of known to be active Haskell web frameworks. Rather than one framework to rule them all, Haskell provides several options. You can view the [[Web/Deploy]] page to get an idea of how you might deploy an application written in some of these frameworks.
== Hajax ==
 
   
  +
See also: there are also many [[Web/Frameworks/Inactive|inactive web frameworks]] to draw inspiration from
Hajax is a proposal to create a Haskell-based tool to program 'stand-alone' Ajax applications.
 
   
  +
== IHP: Integrated Haskell Platform ==
'''Wiki page:''' http://www.haskell.org/haskellwiki/Hajax
 
   
  +
IHP is a modern batteries-included web framework using haskell and nix. It comes with everything you need to build great web applications out of the box. Combined with the unique mix of technologies and a fast development process, IHP makes it very pleasant to build applications.
== Happstack ==
 
   
  +
The development environment is fully managed, so you don't need to worry about installing GHC, Cabal or other haskell tools. The built-in web server automatically reloads your haskell code, no need to manually recompile your app. Thanks to code generators and it's great documentation you can build real web applications with very basic knowledge of haskell. You will pick up more advanced Haskell along the way!
Happstack is a Haskell web framework. Happstack is designed so that developers can prototype quickly, deploy painlessly, scale massively, operate reliably, and change easily. It supports GNU/Linux, OS X, FreeBSD, and Windows environments.
 
   
  +
Notable features:
'''Author:''' Happstack team, HAppS LLC
 
  +
*HSX, a JSX-like template language that looks like HTML while providing type safety
  +
*Auto live reloading without the need to setup anything
  +
*Documentation with examples: it lets you query the database without learning about monads
  +
*Type-safe, composable SQL queries
  +
*Active community that can help you with type errors
  +
*IHP runs on MacOS, Windows and Linux.
   
  +
{| class="wikitable"
'''Maintainer:''' Happstack team <happs@googlegroups.com>
 
  +
! License
  +
| MIT
  +
|-
  +
! Author:
  +
| digitally induced GmbH and Open Source Contributors
  +
|-
  +
! Maintainer:
  +
| digitally induced GmbH
  +
|-
  +
! Home page:
  +
| https://ihp.digitallyinduced.com/
  +
|-
  +
! Documentation:
  +
| https://ihp.digitallyinduced.com/Guide/
  +
|-
  +
! Package & repositories
  +
| [https://github.com/digitallyinduced/ihp]
  +
|}
   
  +
Join the [https://gitter.im/digitallyinduced/ihp Gitter Community] or [https://forum.ihpapp.com/ the IHP Forum] to get help while building your application.
'''Home page:''' http://happstack.com/index.html
 
   
  +
== Happstack ==
'''Documentation:''' http://happstack.com/docs
 
   
  +
Happstack is a Haskell web framework. Happstack is designed so that developers can prototype quickly, deploy painlessly, scale massively, operate reliably, and change easily. It supports GNU/Linux, OS X, FreeBSD, and Windows environments.
'''Package & repositories'''
 
   
  +
{| class="wikitable"
* Hackage: http://hackage.haskell.org/package/happstack
 
  +
! License
* Darcs: http://patch-tag.com/r/mae/happstack/pullrepo
 
  +
| BSD3
  +
|-
  +
! Author:
  +
| Happstack team, HAppS LLC
  +
|-
  +
! Maintainer:
  +
| Happstack team <happs@googlegroups.com>
  +
|-
  +
! Home page:
  +
| http://happstack.com/
  +
|-
  +
! Documentation:
  +
| http://happstack.com/page/view-page-slug/3/documentation
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/happstack-server Hackage] - [http://patch-tag.com/r/mae/happstack Darcs]
  +
|}
   
  +
[http://happstack.com/ Happstack] is a complete web framework. The main component is [http://hackage.haskell.org/package/happstack-server happstack-server]: an integrated HTTP server, routing combinators, fileserving, etc. In addition, a number of packages that used to be coupled to Happstack have now been decoupled from it, but remain promoted and documented for use with Happstack:
== Haskell on a Horse ==
 
   
  +
* [http://hackage.haskell.org/package/safecopy safecopy]: datatype serialization and migration support
Haskell on a Horse (HoH) is a combinatorial web framework for the programming language Haskell. It is currently at an early, unsettled stage of development. It is available under the "BSD3" open-source license.
 
  +
* [http://hackage.haskell.org/package/acid-state acid-state]: a powerful NoSQL ACID storage system with native support for Haskell types
   
  +
It also includes integration with many 3rd party libraries including:
'''License''' BSD3
 
   
  +
*templating: [http://hackage.haskell.org/package/blaze-html Blaze HTML], [http://www.yesodweb.com/book/shakespearean-templates Hamlet], [[HSP]], [[HStringTemplate]], [[Heist]], and more
'''Author''' Jason Hart Priestley
 
  +
*forms: [http://hackage.haskell.org/package/reform reform]
  +
*routing: [http://hackage.haskell.org/package/web-routes web-routes] type-safe urls and routing
  +
*databases: can be used with most [[Database interfaces]] with no special support required
   
  +
See the [http://happstack.com/ Happstack Home Page] for more information and to learn how to get support via IRC and mailing lists.
'''Maintainer''' jason@on-a-horse.org
 
   
  +
== Snap ==
'''Home page:''' http://haskell.on-a-horse.org/
 
   
  +
Snap is a web development framework built around an abstraction called [http://snapframework.com/snaplets snaplets].
'''Package & repositories'''
 
   
  +
Snap is well-documented and has a test suite with a high level of code coverage. It has been used in production for years, and version 1.0 was released in August 2016. As of July 2017, it does not support HTTP/2.
* Hackage: http://hackage.haskell.org/package/on-a-horse
 
   
  +
The framework provides:
== Haskell web tool kit ==
 
   
  +
* A fast [https://wiki.haskell.org/Web/Servers#Snap_Server HTTP server library]
Haskell Web Toolkit (further referred to as HsWTK) is a thin layer built on top of DOM interfaces. It provides program interfaces to compose static layout of a web application page, and to hook up visual elements of an application to event handlers and XML HTTP communication means. HsWTK hides the low-level DOM APIs where possible; however their knowledge may be necessary to develop certain types of visual components and event handlers.
 
  +
* A sensible and clean monad for web programming
  +
* A simple, yet powerful template system that supports both HTML5 and XML
   
  +
Snaplets that come with the framework include functionality for templating, authentication and sessions. Additional functionality (including MySQL and PostgreSQL database access) is provided by third-party snaplets.
'''Wiki page:''' [[Haskell_in_web_browser#Haskell_web_toolkit]]
 
   
  +
{| class="wikitable"
== HSP ==
 
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| James Sanders, Gregory Collins, Doug Beardsley
  +
|-
  +
! Maintainer:
  +
| snap@snapframework.com
  +
|-
  +
! Home page:
  +
| http://snapframework.com/
  +
|-
  +
! Documentation:
  +
| http://snapframework.com/docs
  +
|-
  +
! Package & repositories
  +
| [https://hackage.haskell.org/package/snap Hackage] - [https://github.com/snapframework Git]
  +
|}
   
  +
== Yesod ==
Haskell Server Pages (HSP) is an extension of vanilla Haskell, targetted at the task of writing dynamic server-side web pages. Features include:
 
   
  +
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.
Embedded XML syntax
 
   
  +
{| class="wikitable"
A (low-to-mid-level) programming model for writing dynamic web pages
 
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| Michael Snoyman <michael@snoyman.com>
  +
|-
  +
! Maintainer:
  +
| Michael Snoyman <michael@snoyman.com>
  +
|-
  +
! Announcement:
  +
| http://www.haskell.org/pipermail/haskell-cafe/2010-March/074271.html
  +
|-
  +
! Home page:
  +
| http://www.yesodweb.com/
  +
|-
  +
! Documentation:
  +
| http://www.yesodweb.com/book
  +
|-
  +
! Screencast:
  +
| http://www.yesodweb.com/page/screencasts
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/yesod Hackage] - [https://github.com/yesodweb/yesod Github]
  +
|}
   
  +
[http://docs.yesodweb.com/ Yesod] is a full-featured web framework. It takes a modular approach to development, so many parts of the framework such as [http://www.yesodweb.com/book/shakespearean-templates Hamlet] and [http://www.yesodweb.com/book/persistent Persistent] are available as standalone packages. However, put together, Yesod provides you with solutions for templating, routing, persistence, sessions, JSON, authentication/authorization, and more. Yesod's major guiding principle is type safety: if your application compiles, it works.
A cgi-handler utility (as a separate package, hsp-cgi)
 
   
  +
Yesod is very well documented through a combination of haddocks and the [http://docs.yesodweb.com/book Yesod book].
For details on usage, please see the website, and the author's thesis.
 
   
  +
Yesod is built on [http://hackage.haskell.org/package/wai WAI], or the Web Application Interface. This is similar to WSGI in Python or Rack in Ruby. It provides a single interface that all applications can target and work on multiple backends. Backends exist for CGI, FastCGI, SCGI, development server (auto-recompile) and even a Webkit-powered desktop version.
'''License:''' BSD3
 
   
  +
But the premier backend is [http://hackage.haskell.org/package/warp Warp]: a very simple web server which, at the time of writing, is the fastest Haskell has to offer. You can read more in its [http://docs.yesodweb.com/blog/announcing-warp release announcement] and see some [http://www.yesodweb.com/blog/2011/02/warp-speed-ahead followup benchmarks]. Warp is already powering Yesod; some other major players that are planning a move are Hoogle and Happstack.
'''Author:''' Niklas Broberg, Joel Bjornson
 
   
  +
You can see a [https://github.com/yesodweb/yesod/wiki/Powered-by-Yesod list of Yesod-powered sites and packages], or check out the [https://github.com/snoyberg/haskellers source code for Haskellers]. Most discussions for Yesod take place on the [http://groups.google.com/group/yesodweb yesodweb list], so feel free to join in and ask any questions you have, the Yesod community is very beginner-friendly.
'''Maintainer:''' Niklas Broberg <niklas.broberg@chalmers.se>
 
 
'''Home page:''' http://code.google.com/p/hsp/
 
 
'''Wiki page:''' [[HSP]]
 
 
== HWSProxyGen ==
 
 
This website presents a web services proxy generator for the Haskell functional language, implemented in Haskell and C#. The final purpose is to show that Haskell and functional languages in general can be used as a viable way to the implementation of distributed components and applications, interacting with services implemented in different languages and/or platforms.
 
 
Homepage: http://www.cin.ufpe.br/~haskell/hwsproxygen/
 
 
== hvac ==
 
 
The aim of hvac is to provide an environment that makes the creation of lightweight fastcgi-based web applications as simple as possible, with an emphasis on concise, declarative style code, correct concurrent transactional logic, and transparency in adding caching combinators.
 
 
'''Announcement:''' http://fmapfixreturn.wordpress.com/2008/03/23/ann-hvac-01b-a-transactional-declarative-framework-for-lightweight-web-applications/
 
 
'''Documentation:''' http://community.haskell.org/~sclv/hvac/html_docs/hvac/
 
 
'''Home page:''' http://community.haskell.org/~sclv/hvac/
 
 
== loli ==
 
 
A simple library for fast web prototyping in Haskell.
 
 
'''License''' BSD3
 
 
'''Author''' Wang, Jinjing
 
 
'''Maintainer''' Wang, Jinjing <nfjinjing@gmail.com>
 
 
'''Package & repositories'''
 
 
* Hackage: http://hackage.haskell.org/package/loli
 
* Github: http://github.com/nfjinjing/loli
 
 
== Lemmachine ==
 
 
Lemmachine is a REST'ful web framework that makes it easy to get HTTP right by exposing users to overridable hooks with sane defaults. The main architecture is a copy of Erlang-based Webmachine, which is currently the best documentation reference (for hooks & general design).
 
 
Lemmachine stands out from the dynamically typed Webmachine by being written in dependently typed Agda. The goal of the project is to show the advantages gained from compositional testing by taking advantage of proofs being inherently compositional. See proofs for examples of universally quantified proofs (tests over all possible input values) written against the default resource, which does not override any hooks.
 
 
[http://github.com/larrytheliquid/Lemmachine#readme More information]
 
 
'''Author''': Larry Diehl
 
 
'''Packages & repositories'''
 
 
Github: http://github.com/larrytheliquid/Lemmachine
 
   
 
== mohws ==
 
== mohws ==
Line 119: Line 160:
 
A web server with a module system and support for CGI. Based on Simon Marlow's original Haskell Web Server.
 
A web server with a module system and support for CGI. Based on Simon Marlow's original Haskell Web Server.
   
  +
{| class="wikitable"
'''License:''' BSD3
 
  +
!License:
  +
|BSD3
  +
|-
  +
!Copyright:
  +
|Simon Marlow, Bjorn Bringert
  +
|-
  +
!Author:
  +
|Simon Marlow, Bjorn Bringert <bjorn@bringert.net>
  +
|-
  +
!Maintainer:
  +
|Henning Thielemann <webserver@henning-thielemann.de>
  +
|-
  +
!Packages & repositories
  +
|[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mohws Hackage] - [http://code.haskell.org/mohws/ Darcs]
  +
|}
   
  +
== Scotty ==
'''Copyright:''' Simon Marlow, Bjorn Bringert
 
   
  +
A Haskell web framework inspired by Ruby's Sinatra, using WAI and Warp. Sinatra + Warp = Scotty.
'''Author:''' Simon Marlow, Bjorn Bringert <bjorn@bringert.net>
 
 
'''Maintainer:''' Henning Thielemann <webserver@henning-thielemann.de>
 
 
'''Packages & repositories'''
 
 
* Hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mohws
 
* Darcs: http://code.haskell.org/mohws/
 
 
== Salvia ==
 
 
Salvia is a feature rich modular web server and web application framework that can be used to write dynamic websites in Haskell. From the lower level protocol code up to the high level application code, everything is written as a Salvia handler. This approach makes the server extremely extensible. To see a demo of a Salvia website, please see the salvia-demo package.
 
 
All the low level protocol code can be found in the salvia-protocol package, which exposes the datatypes, parsers and pretty-printers for the URI, HTTP, Cookie and MIME protocols.
 
 
This Salvia package itself can be separated into three different parts: the interface, the handlers and the implementation. The interface module defines a number of type classes that the user can build the web application against. Reading the request object, writing to the response, or gaining direct access to the socket, all of these actions are reflected using one type class aspect in the interface. The handlers are self contained modules that implement a single aspect of the Salvia web server. The handlers expose their interface requirements in their type context. Salvia can have multiple implementations which can be switched by using different instances for the interface type classes. This package has only one implementation, a simple accepting socket loop server. The salvia-extras package has two additional implementations. Keeping a clear distinction between the abstract server aspects and the actual implementation makes it very easy to migrate existing web application to different back-ends.
 
 
'''License:''' BSD3
 
 
'''Author:''' Sebastiaan Visser
 
 
'''Maintainer:''' sfvisser@cs.uu.nl
 
 
'''Announcement:''' http://www.haskell.org/pipermail/haskell-cafe/2010-March/074870.html
 
 
'''Package & repositories'''
 
 
* Hackage: http://hackage.haskell.org/package/salvia
 
* Git: http://github.com/sebastiaanvisser/salvia
 
 
== Snap ==
 
 
Snap is a simple web development framework for unix systems, written in the Haskell programming language.
 
 
Snap is well-documented and has a test suite with a high level of code coverage, but it is early-stage software with still-evolving interfaces. Snap is therefore likely to be most appropriate for early adopters and potential contributors.
 
 
* A fast HTTP server library with an optional high-concurrency backend using the libev event loop library
 
* A sensible and clean monad for web programming
 
* An XML-based templating system for generating HTML
 
 
'''License:''' BSD3
 
 
'''Author:''' James Sanders, Gregory Collins, Doug Beardsley
 
 
'''Maintainer:''' snap@snapframework.com
 
 
'''Home page:''' http://snapframework.com/
 
 
'''Documentation:''' http://snapframework.com/docs
 
 
'''Package & repositories'''
 
 
* Hackage: http://hackage.haskell.org/package/snap-server
 
* Git: http://git.snapframework.com/snap-server.git
 
 
== Turbinado ==
 
 
Turbinado is a Rails-ish MVC web framework for Haskell. Turbinado gives you all of the benefits of coding in Haskell and adds:
 
http://www.cin.ufpe.br/~haskell/hwsproxygen/
 
* A fast HTTP server with static- and dynamic-content serving capabilities;
 
* Views built using HTML, HAML or Haskell templating syntax;
 
* Automagic recompilation of Controllers, Layouts and Views;
 
* A database ORM to make database interaction (especially with PostgreSQL) joyful;
 
* A rich set of tags to make designing pages simpler;.
 
 
'''Author:''' Alson Kemp
 
 
'''Package & repositories:'''
 
 
* Github: http://github.com/alsonkemp/turbinado
 
 
== Yesod ==
 
 
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.
 
   
  +
Scotty is simple, cheap and cheerful way to write RESTful, declarative web applications. It has good documentation for all the relevant functions.
'''License:''' BSD3
 
   
  +
* A page is as simple as defining the verb, url pattern, and Text content.
'''Author:''' Michael Snoyman <michael@snoyman.com>
 
  +
* It is template-language agnostic. Anything that returns a Text value will do.
  +
* Conforms to WAI Application interface.
  +
* Uses very fast Warp webserver by default.
   
  +
{| class="wikitable"
'''Maintainer:''' Michael Snoyman <michael@snoyman.com>
 
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| Andrew Farmer
  +
|-
  +
! Maintainer:
  +
| Andrew Farmer
  +
|-
  +
! Home page:
  +
| https://github.com/scotty-web/scotty
  +
|-
  +
! Documentation:
  +
| http://hackage.haskell.org/package/scotty
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/scotty Hackage] - [https://github.com/scotty-web/scotty Git]
  +
|}
   
  +
== Miso ==
'''Announcement:''': http://www.haskell.org/pipermail/haskell-cafe/2010-March/074271.html
 
   
  +
Miso is a small "isomorphic" Haskell front-end framework featuring a virtual-dom, diffing / patching algorithm, event delegation, event batching, SVG, Server-sent events, Websockets, and an extensible Subscription-based subsystem. Inspired by Elm, Redux and Bobril. IO and other effects (like XHR) can be introduced into the system via the Effect data type. Miso makes heavy use of the GHCJS FFI and therefore has minimal dependencies.
'''Home page:''' http://www.yesodweb.com/
 
   
'''Documentation:''' http://docs.yesodweb.com/yesod/
 
   
  +
{| class="wikitable"
'''Screencast:''' http://www.youtube.com/watch?v=BEWJnDgrmp0
 
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| David Johnson
  +
|-
  +
! Maintainer:
  +
| djohnson.m@gmail.com
  +
|-
  +
! Home page:
  +
| https://github.com/dmjio/miso
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/miso Hackage] - [https://github.com/dmjio/miso Git]
  +
|}
   
  +
== Servant ==
'''Package & repositories'''
 
   
  +
Servant is a a light-weight framework primarily for REST APIs. It allows to specify API specifications as type aliases and then work with these type aliases to create servers, but also documentation, client code in Haskell and Javascript, etc.. It is based on wai.
* Hackage: http://hackage.haskell.org/package/hyena
 
* Github: http://github.com/tibbe/hyena
 
   
== WASH ==
 
   
  +
{| class="wikitable"
An extended version of Simon Marlow's webserver (hws) that runs WASH modules as servlets. WASH modules are compiled transparently and dynamically loaded into the running server. Each servlet runs in one of three modes: LogOnly (using a log to reconstruct the current state like WASH's CGI implementation), StateIDOnly (running a thread for each session and continuing in the same thread with each form submission), LogAndState (use a thread for efficiency and keep the log for robustness).
 
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| Alp Mestanogullari, Sönke Hahn, Julian K. Arni
  +
|-
  +
! Maintainer:
  +
| alpmestan@gmail.com
  +
|-
  +
! Home page:
  +
| http://haskell-servant.github.io/
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/servant Hackage] - [https://github.com/haskell-servant Git]
  +
|}
   
  +
== Spock ==
'''Author:''' Simon Marlow
 
   
  +
Another Haskell web framework for rapid development: This toolbox provides everything you need to get a quick start into web hacking with haskell: routing, middleware, json, blaze, sessions, cookies, database helper, csrf-protection, global state
'''Home page:''' http://www.informatik.uni-freiburg.de/~thiemann/WASH/#wsp
 
   
  +
* Simple API
== Web functions ==
 
  +
* Adds lots of useful features for rapid web development
  +
* Fast tree based routing
  +
* Plugins like [http://hackage.haskell.org/package/Spock-auth Spock-auth] and [http://hackage.haskell.org/package/Spock-worker Spock-worker]
   
  +
{| class="wikitable"
From the site: "WebFunctions is a domain specific embedded language for web authoring, implemented in Haskell. The functionality of the WebFunctions framework was inspired by Apple's WebObjects. We claim it is easier to use since the Haskell type checker makes a lot of extra checks, that are absent from the Apple framework. Unfortunately we do not yet have all the nice tooling and special editors, but we are working on this."
 
  +
! License:
  +
| BSD3
  +
|-
  +
! Author:
  +
| Alexander Thiemann
  +
|-
  +
! Maintainer:
  +
| Alexander Thiemann
  +
|-
  +
! Home page:
  +
| https://github.com/agrafix/Spock
  +
|-
  +
! Documentation:
  +
| http://hackage.haskell.org/package/Spock
  +
|-
  +
! Package & repositories
  +
| [http://hackage.haskell.org/package/Spock Hackage] - [https://github.com/agrafix/Spock Git]
  +
|}
   
  +
==See also==
'''Author:''' Robert Van Herk
 
   
  +
* [[Web/Framework survey]]
'''Home page:''' http://www.cs.uu.nl/wiki/WebFunctions/WebHome
 

Revision as of 07:41, 27 August 2020

Haskell Web Development

Software:
Servers - Libraries - Frameworks
Deploy - Cloud
Interfaces to frameworks
Databases and Persistence
Testing and Verification
Content Management

Community & Research:
Forums and Discussion
Literature (research, talks and blogs)
Existing Haskell web applications
Ongoing projects and ideas

Content from Web should be merged here.

Below is a list of known to be active Haskell web frameworks. Rather than one framework to rule them all, Haskell provides several options. You can view the Web/Deploy page to get an idea of how you might deploy an application written in some of these frameworks.

See also: there are also many inactive web frameworks to draw inspiration from

IHP: Integrated Haskell Platform

IHP is a modern batteries-included web framework using haskell and nix. It comes with everything you need to build great web applications out of the box. Combined with the unique mix of technologies and a fast development process, IHP makes it very pleasant to build applications.

The development environment is fully managed, so you don't need to worry about installing GHC, Cabal or other haskell tools. The built-in web server automatically reloads your haskell code, no need to manually recompile your app. Thanks to code generators and it's great documentation you can build real web applications with very basic knowledge of haskell. You will pick up more advanced Haskell along the way!

Notable features:

  • HSX, a JSX-like template language that looks like HTML while providing type safety
  • Auto live reloading without the need to setup anything
  • Documentation with examples: it lets you query the database without learning about monads
  • Type-safe, composable SQL queries
  • Active community that can help you with type errors
  • IHP runs on MacOS, Windows and Linux.
License MIT
Author: digitally induced GmbH and Open Source Contributors
Maintainer: digitally induced GmbH
Home page: https://ihp.digitallyinduced.com/
Documentation: https://ihp.digitallyinduced.com/Guide/
Package & repositories [1]

Join the Gitter Community or the IHP Forum to get help while building your application.

Happstack

Happstack is a Haskell web framework. Happstack is designed so that developers can prototype quickly, deploy painlessly, scale massively, operate reliably, and change easily. It supports GNU/Linux, OS X, FreeBSD, and Windows environments.

License BSD3
Author: Happstack team, HAppS LLC
Maintainer: Happstack team <happs@googlegroups.com>
Home page: http://happstack.com/
Documentation: http://happstack.com/page/view-page-slug/3/documentation
Package & repositories Hackage - Darcs

Happstack is a complete web framework. The main component is happstack-server: an integrated HTTP server, routing combinators, fileserving, etc. In addition, a number of packages that used to be coupled to Happstack have now been decoupled from it, but remain promoted and documented for use with Happstack:

  • safecopy: datatype serialization and migration support
  • acid-state: a powerful NoSQL ACID storage system with native support for Haskell types

It also includes integration with many 3rd party libraries including:

See the Happstack Home Page for more information and to learn how to get support via IRC and mailing lists.

Snap

Snap is a web development framework built around an abstraction called snaplets.

Snap is well-documented and has a test suite with a high level of code coverage. It has been used in production for years, and version 1.0 was released in August 2016. As of July 2017, it does not support HTTP/2.

The framework provides:

  • A fast HTTP server library
  • A sensible and clean monad for web programming
  • A simple, yet powerful template system that supports both HTML5 and XML

Snaplets that come with the framework include functionality for templating, authentication and sessions. Additional functionality (including MySQL and PostgreSQL database access) is provided by third-party snaplets.

License: BSD3
Author: James Sanders, Gregory Collins, Doug Beardsley
Maintainer: snap@snapframework.com
Home page: http://snapframework.com/
Documentation: http://snapframework.com/docs
Package & repositories Hackage - Git

Yesod

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.

License: BSD3
Author: Michael Snoyman <michael@snoyman.com>
Maintainer: Michael Snoyman <michael@snoyman.com>
Announcement: http://www.haskell.org/pipermail/haskell-cafe/2010-March/074271.html
Home page: http://www.yesodweb.com/
Documentation: http://www.yesodweb.com/book
Screencast: http://www.yesodweb.com/page/screencasts
Package & repositories Hackage - Github

Yesod is a full-featured web framework. It takes a modular approach to development, so many parts of the framework such as Hamlet and Persistent are available as standalone packages. However, put together, Yesod provides you with solutions for templating, routing, persistence, sessions, JSON, authentication/authorization, and more. Yesod's major guiding principle is type safety: if your application compiles, it works.

Yesod is very well documented through a combination of haddocks and the Yesod book.

Yesod is built on WAI, or the Web Application Interface. This is similar to WSGI in Python or Rack in Ruby. It provides a single interface that all applications can target and work on multiple backends. Backends exist for CGI, FastCGI, SCGI, development server (auto-recompile) and even a Webkit-powered desktop version.

But the premier backend is Warp: a very simple web server which, at the time of writing, is the fastest Haskell has to offer. You can read more in its release announcement and see some followup benchmarks. Warp is already powering Yesod; some other major players that are planning a move are Hoogle and Happstack.

You can see a list of Yesod-powered sites and packages, or check out the source code for Haskellers. Most discussions for Yesod take place on the yesodweb list, so feel free to join in and ask any questions you have, the Yesod community is very beginner-friendly.

mohws

A web server with a module system and support for CGI. Based on Simon Marlow's original Haskell Web Server.

License: BSD3
Copyright: Simon Marlow, Bjorn Bringert
Author: Simon Marlow, Bjorn Bringert <bjorn@bringert.net>
Maintainer: Henning Thielemann <webserver@henning-thielemann.de>
Packages & repositories Hackage - Darcs

Scotty

A Haskell web framework inspired by Ruby's Sinatra, using WAI and Warp. Sinatra + Warp = Scotty.

Scotty is simple, cheap and cheerful way to write RESTful, declarative web applications. It has good documentation for all the relevant functions.

  • A page is as simple as defining the verb, url pattern, and Text content.
  • It is template-language agnostic. Anything that returns a Text value will do.
  • Conforms to WAI Application interface.
  • Uses very fast Warp webserver by default.
License: BSD3
Author: Andrew Farmer
Maintainer: Andrew Farmer
Home page: https://github.com/scotty-web/scotty
Documentation: http://hackage.haskell.org/package/scotty
Package & repositories Hackage - Git

Miso

Miso is a small "isomorphic" Haskell front-end framework featuring a virtual-dom, diffing / patching algorithm, event delegation, event batching, SVG, Server-sent events, Websockets, and an extensible Subscription-based subsystem. Inspired by Elm, Redux and Bobril. IO and other effects (like XHR) can be introduced into the system via the Effect data type. Miso makes heavy use of the GHCJS FFI and therefore has minimal dependencies.


License: BSD3
Author: David Johnson
Maintainer: djohnson.m@gmail.com
Home page: https://github.com/dmjio/miso
Package & repositories Hackage - Git

Servant

Servant is a a light-weight framework primarily for REST APIs. It allows to specify API specifications as type aliases and then work with these type aliases to create servers, but also documentation, client code in Haskell and Javascript, etc.. It is based on wai.


License: BSD3
Author: Alp Mestanogullari, Sönke Hahn, Julian K. Arni
Maintainer: alpmestan@gmail.com
Home page: http://haskell-servant.github.io/
Package & repositories Hackage - Git

Spock

Another Haskell web framework for rapid development: This toolbox provides everything you need to get a quick start into web hacking with haskell: routing, middleware, json, blaze, sessions, cookies, database helper, csrf-protection, global state

  • Simple API
  • Adds lots of useful features for rapid web development
  • Fast tree based routing
  • Plugins like Spock-auth and Spock-worker
License: BSD3
Author: Alexander Thiemann
Maintainer: Alexander Thiemann
Home page: https://github.com/agrafix/Spock
Documentation: http://hackage.haskell.org/package/Spock
Package & repositories Hackage - Git

See also