Embed a raw 'Application' in a Servant API

Version on this page:
LTS Haskell 22.26:
Stackage Nightly 2024-06-21:
Latest on Hackage:

See all snapshots servant-rawm appears in

BSD-3-Clause licensed by Dennis Gosnell
Maintained by [email protected]
This version can be pinned in stack with:servant-rawm-,5415


Build Status Hackage Stackage LTS Stackage Nightly BSD3 license

servant-rawm provides a way to embed a WAI Application in a Servant handler. It is more convenient and powerful than the Raw type provided by servant.

See the Haddocks on Hackage for servant-rawm for an explanation of how to use the RawM type.


There is code for an example server, client, and documentation located in example/. The following section describes how to run the example executables.


The example executables can be built with the following command:

$ stack build --flag servant-rawm:buildexample


After building, the server can be run with the following command:

$ stack exec -- servant-rawm-example-server

This runs a server on port 8201 serving files in example/files/.

It can be accessed from curl like the following:

$ curl http://localhost:8201/serve-directory/foo.txt
This is an example text file.


After building, the client can be run like the following:

$ stack exec -- servant-rawm-example-client
Successfully got file ./example/files/foo.txt:

This is an example text file.


After building, the documentation can be generated like the following. This is documentation for the API defined in example/Api.hs:

$ stack exec -- servant-rawm-example-docs


  • Update to work with servant-0.16 #10. Thanks @vlatkoB!

  • Update to work with the latest version of Servant (0.14) and remove support from older versions of Servant.
  • Remove support from Stackage LTS versions older than 12.

  • Add missing test file to extra-source-files in the cabal file.

  • Add tests and more documentation.

  • (commit 30a2cd48488d) Add a phantom type to RawM to allow the user to change the output documentation.
  • (commit 30a2cd48488d) Add a HasDocs instance for RawM that uses the HasDocs instance for the phantom type.

  • Initial release.