OSS TanbouSign in with GitHub

build Rust HTTP servers by composing routes, extractors, and middleware

OSS scale score 235.3OSS health 100
About these scores

OSS scale score is an unbounded metric that log-compresses and weights Stars, Watchers, Forks, and Contributors. Discovery score is the current OSS scale score minus the score at discovery. Update pace is commits in the last 30 days, growth momentum is the OSS scale score difference within the recent observation window, and OSS health is a 0–100 rating based on available recency, Community Health, and release data.

Stars
4,445
Primary language
Rust
License
Apache-2.0
Repository last updated
Oct 5, 2026
On this page

Overview

Poem is a web framework for Rust. It composes routing, extractors, responses, and middleware into HTTP servers and can add WebSockets, SSE, sessions, TLS, static files, and Tower compatibility through optional features.

Features and best fit

Based on official documentation; not hands-on tested · Content checked:

Key features

Compose HTTP endpoints from routes, handlers, and extractors

Routes bind paths to handlers, while extractors such as Path map request data into Rust types. Middleware can wrap Endpoints to apply cross-cutting request and response behavior.

Sources: [2]

Enable WebSockets, SSE, TLS, sessions, and other server features as needed

Poem provides optional WebSocket, SSE, compression, cookie and session, static-file, rustls/native TLS, and Tower compatibility features. poem-openapi can be added for OpenAPI-oriented APIs.

Sources: [2][3]

Best fit

Fits Rust backends that want HTTP-server capabilities in one framework

It suits API servers and web applications that prefer to manage routing, middleware, streaming, and TLS within one framework while retaining Tower Service and Layer compatibility.

Sources: [2]

Before adoption

Separate stable 3.1.12 from the unreleased 4.0 line and its breaking changes

Stable Poem 3.1.12 has Rust 1.85 as its MSRV. The default branch targets unreleased 4.0.0 with Rust 1.94 and breaking integration/dependency changes, so upgrades should follow the dedicated migration guide.

Sources: [3][4][5]

Official sources

  1. [1]poem-web/poem — GitHub repository(2026-10-06)
  2. [2]Poem 3.1.12 — README(2026-10-06)
  3. [3]Poem 3.1.12 — Cargo.toml(2026-10-06)
  4. [4]Poem 3.1.12 — CHANGELOG(2026-10-06)
  5. [5]Poem — 4.0 migration guide on development branch(2026-10-06)
Supplemental curator note

Poem is a fit when a backend wants routing, streaming, sessions, TLS, and other HTTP-server features in one framework. The default branch is moving toward unreleased 4.0, so do not copy master-branch APIs directly into stable 3.1.x applications.

Try it in 3 steps

  1. 1

    Clone the stable 3.1.12 source

    Pin the commit recorded for the Poem 3.1.12 crates.io package. Rust 1.85 or newer is required.

    git clone https://github.com/poem-web/poem.git && cd poem && git checkout 393c7410855661ffcdc6714371aaaf2ce251b508
  2. 2

    Start the Hello World example

    Run the official examples-workspace Hello World server, which listens on port 3000.

    cd examples && cargo run -p example-hello-world
  3. 3

    Check the path-parameter response

    Send a request from another terminal and confirm that the Path extractor and handler return hello: world.

    curl -fsS http://127.0.0.1:3000/hello/world
Check the official README

Growth

Growth trends · Last 30 days

4,445 Stars

Trend data is still being collected.

Built with

Categories and tags

GitHub data

GitHub dataView detailed GitHub data

GitHub Topics

  • fastapi
  • framework
  • http
  • poem
  • rust
  • rust-crate
  • rust-lang
  • rust-library
  • server
  • web
Stars
4,445
Forks
360
Watchers
40
Open issues
183
Contributors
142
Owner type
Organization
Primary language
Rust
License
Apache-2.0
Repository last updated
Oct 5, 2026
Write a related article

Share a guide or use case for this OSS in Markdown. Articles are published after administrator approval.

Report incorrect information

Tell us if any listing information is incorrect or outdated.

After reading this page, do you know what to do next?