[![Package Version](](
[![Hex Docs](](

Wisp is a practical Gleam web framework rapid development and easy maintenance.
We worry about the hassle of web development, and you focus on writing your

It is based around two concepts: handlers and middleware.

# Handlers

A handler is a function that takes a HTTP request and returns a HTTP
response. A handler may also take other arguments, such as a "context" type
defined in your application which may hold other state such as a database
connection or user session.

import wisp.{Request, Response}

pub type Context {
  Context(secret: String)

pub fn handle_request(request: Request, context: Context) -> Response {

# Middleware

A middleware is a function that takes a response returning function as its
last argument, and itself returns a response. As with handlers both
middleware and the functions they take as an argument may take other

Middleware can be applied in a handler with Gleam's `use` syntax. Here the
`log_request` middleware is used to log a message for each HTTP request
handled, and the `serve_static` middleware is used to serve static files
such as images and CSS.

import wisp.{Request, Response}

pub fn handle_request(request: Request) -> Response {
  use <- wisp.log_request
  use <- wisp.serve_static(req, under: "/static", from: "/public")

# Learning Wisp

The Wisp examples are a good place to start. They cover various scenarios and
include comments and tests.

- [Hello, World!](
- [Routing](
- [Working with form data](
- [Working with JSON](
- [Working with other formats](
- [Using a database](
- [Serving static assets](
- [Logging](
- [Working with cookies](
- [Configuring default responses](

API documentation is available on [HexDocs](

# Wisp applications

These open source Wisp applications may be useful examples.

- []( A HTML
  serving application that uses an SQLite + LiteFS database, deployed to