https://github.com/gleam-wisp/wisp
🧚 A practical web framework for Gleam
https://github.com/gleam-wisp/wisp
gleam-lang web-framework
Last synced: 7 months ago
JSON representation
🧚 A practical web framework for Gleam
- Host: GitHub
- URL: https://github.com/gleam-wisp/wisp
- Owner: gleam-wisp
- License: apache-2.0
- Created: 2023-08-04T19:41:07.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-28T16:10:56.000Z (7 months ago)
- Last Synced: 2025-03-28T17:34:14.101Z (7 months ago)
- Topics: gleam-lang, web-framework
- Language: Gleam
- Homepage: https://gleam-wisp.github.io/wisp/
- Size: 1.46 MB
- Stars: 1,050
- Watchers: 6
- Forks: 48
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
- awesome-gleam - wisp - [📚](https://hexdocs.pm/wisp/) - A practical web framework for Gleam (Packages / Web frameworks)
README

[](https://hex.pm/packages/wisp)
[](https://hexdocs.pm/wisp/)
Wisp is a practical Gleam web framework for 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.
```gleam
import wisp.{type Request, type 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.
```gleam
import wisp.{type Request, type Response}
pub fn handle_request(request: Request) -> Response {
use <- wisp.log_request(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.
- [Hello, World!](https://github.com/lpil/wisp/tree/main/examples/00-hello-world)
- [Routing](https://github.com/lpil/wisp/tree/main/examples/01-routing)
- [Working with form data](https://github.com/lpil/wisp/tree/main/examples/02-working-with-form-data)
- [Working with JSON](https://github.com/lpil/wisp/tree/main/examples/03-working-with-json)
- [Working with other formats](https://github.com/lpil/wisp/tree/main/examples/04-working-with-other-formats)
- [Using a database](https://github.com/lpil/wisp/tree/main/examples/05-using-a-database)
- [Serving static assets](https://github.com/lpil/wisp/tree/main/examples/06-serving-static-assets)
- [Logging](https://github.com/lpil/wisp/tree/main/examples/07-logging)
- [Working with cookies](https://github.com/lpil/wisp/tree/main/examples/08-working-with-cookies)
- [Configuring default responses](https://github.com/lpil/wisp/tree/main/examples/09-configuring-default-responses)
- [Working with files](https://github.com/lpil/wisp/tree/main/examples/10-working-with-files)
API documentation is available on [HexDocs](https://hexdocs.pm/wisp/).
# Wisp applications
These open source Wisp applications may be useful examples.
- [https://packages.gleam.run/](https://github.com/gleam-lang/packages): A HTML
serving application that uses an SQLite + LiteFS database, deployed to Fly.io.