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]
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.
Official sources
- [1]poem-web/poem — GitHub repository(2026-10-06)
- [2]Poem 3.1.12 — README(2026-10-06)
- [3]Poem 3.1.12 — Cargo.toml(2026-10-06)
- [4]Poem 3.1.12 — CHANGELOG(2026-10-06)
- [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
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
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
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
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
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- reqwest11,864 Stars
4 shared tag(s) · 1 shared category(s) · Same language
use async or blocking Rust HTTP clients with JSON, TLS, proxies, and multipart support
Rust - ASP.NET Core38,465 Stars
3 shared tag(s) · 3 shared category(s)
build web apps, HTTP APIs, and mobile backends on a modular cross-platform .NET web framework
C# - Eclipse Vert.x14,689 Stars
3 shared tag(s) · 3 shared category(s)
build reactive JVM applications for HTTP and TCP with event loops and non-blocking I/O
Java - Dropwizard8,582 Stars
3 shared tag(s) · 3 shared category(s)
combine Jetty, Jersey, Jackson, and Metrics into a production-ready Java REST-service stack
Java - Flask74,897 Stars
3 shared tag(s) · 2 shared category(s)
build Python WSGI applications with routing, request handling, and Jinja templates
Python - Fiber40,204 Stars
3 shared tag(s) · 2 shared category(s)
combine Express-inspired routing, binding, and middleware on top of fasthttp
Go
Report incorrect information
Tell us if any listing information is incorrect or outdated.