Spock
Intro
Hackage: Spock
Stackage: Spock
Another Haskell web framework for rapid development
Library Usage Example
{-# LANGUAGE OverloadedStrings #-}
import Web.Spock
import qualified Data.Text as T
main =
runSpock 3000 $ spockT id $
do get ("echo" <//> var) $ \something ->
text $ T.concat ["Echo: ", something]
Install
- Using cabal:
cabal install Spock
- Using Stack:
stack install Spock
- From Source (cabal):
git clone https://github.com/agrafix/Spock.git && cd Spock && cabal install
- From Source (stack):
git clone https://github.com/agrafix/Spock.git && cd Spock && stack build
Mailing list
Please join our mailing list at [email protected]
Features
Another Haskell web framework for rapid development: This toolbox provides
everything you need to get a quick start into web hacking with haskell:
- fast typesafe routing
- middleware
- json
- sessions
- cookies
- database helper
- csrf-protection
- typesafe contexts
Important Links
Talks
Candy
Extensions
The following Spock extensions exist:
Works well with Spock
SSL / HTTPS
If you’d like to use your application via HTTPS, there are two options:
- Use nginx/haproxy/… as reverse proxy in front of the Spock application.
- Convert the Spock application to a
wai
-application using the spockAsApp
. Then use the warp-tls
package to run it.
Benchmarks
See the Spock-bench repository to reproduce.
Framework |
GHC |
Version |
simple route |
route with one param |
deeply nested route |
Spock |
7.10.2 |
0.11.0.0 |
69243 |
65835 |
64763 |
scotty |
7.10.2 |
0.10.2 |
66441 |
65357 |
9542 |
snap |
7.10.2 |
0.9.8.0 |
39964 |
35566 |
38356 |
fn |
7.10.2 |
0.2.0.2 |
63083 |
63183 |
22346 |
servant |
7.10.2 |
0.7 |
66041 |
65590 |
64606 |
Example Projects
Notes
Since version 0.11.0.0 Spock drops simple routing in favor of typesafe routing and drops safe actions in favor of the “usual” way of csrf protection with a token.
Since version 0.7.0.0 Spock supports typesafe routing. If you wish to continue using the untyped version of Spock you can Use Web.Spock.Simple
. The implementation of the routing is implemented in a separate haskell package called reroute
.
Since version 0.5.0.0 Spock is no longer built on top of scotty. The
design and interface is still influenced by scotty, but the internal
implementation differs from scotty’s.
Thanks to
- Tim Baumann Github (lot’s of help with typesafe routing)
- Tom Nielsen Github (much feedback and small improvements)
- … and all other awesome contributors!
Hacking
Pull requests are welcome! Please consider creating an issue beforehand, so we can discuss what you would like to do. Code should be written in a consistent style throughout the project. Avoid whitespace that is sensible to conflicts. (E.g. alignment of =
signs in functions definitions) Note that by sending a pull request you agree that your contribution can be released under the BSD3 License as part of the Spock
package or related packages.
Misc
Supported GHC Versions
License
Released under the BSD3 license.
(c) 2013 - 2016 Alexander Thiemann