馃 A practical web framework for Gleam
Gleam 89.4%
HTML 2.4%
CSS 1.3%
Shell 0.1%
JavaScript 0.1%
Other 6.7%
173 1 0

Clone this repository

https://tangled.org/keii.dev/wisp
git@tangled.org:keii.dev/wisp

For self-hosted knots, clone URLs may differ based on your setup.

README.md

Wisp

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 application.

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 {
  wisp.ok()
}

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 arguments.

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(request, under: "/static", from: "/public")
  wisp.ok()
}

Learning Wisp#

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

API documentation is available on HexDocs.

Wisp applications#

These open source Wisp applications may be useful examples.