NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #948 most downloaded on crates.io
Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust
Last release 27 days ago
21 Aug 2026
Release timing varies
gaps range from 1 weeks to 7 months
Most releases are documented
notes for 44 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
9 years old
158 releases · first in 2017
PayloadConfig is now also considered in Bytes and String extractors when set using App::data. [#1610]
PayloadConfig is now also considered in Bytes and String extractors when set using App::data. #1610web::Path now has a public representation: web::Path(pub T) that enables destructuring. #1594ServiceRequest::app_data allows retrieval of non-Data data without splitting into parts to access HttpRequest which already allows this. #1618awc. #1621One column per quarter.
Re-export actix_rt::main as actix_web::main.
actix_rt::main as actix_web::main.HttpRequest::match_pattern and ServiceRequest::match_pattern for extracting the matched resource pattern.HttpRequest::match_name and ServiceRequest::match_name for extracting matched resource name.cookie crate. Actix-web no longer requires ring dependency.NormalizePath improved consistency when path needs slashes added and removed.Replace deprecated net2 crate with socket2
Data<T> from Arc<T> #1509net2 crate with socket2{Resource,Scope}::default_service(f) handlers now support app data extraction. [#1452]
Add helper function for creating routes with TRACE method guard web::trace()
TRACE method guard web::trace()test::read_body_json() and test::TestRequest::send_request() for testing.sha-1 crate instead of unmaintained sha1 crateStream #1308time dependency to 0.2.7actix-tls dependency to 2.0.0-alpha.1rustls dependency to 0.17Rename HttpServer::start() to HttpServer::run()
Rename HttpServer::start() to HttpServer::run()
Allow to gracefully stop test server via TestServer::stop()
Allow to specify multi-patterns for resources
Move BodyEncoding to dev module #1220
Move BodyEncoding to dev module #1220
Allow to set peer_addr for TestRequest #1074
Make web::Data deref to Arc<T> #1214
Rename App::register_data() to App::app_data()
HttpRequest::app_data<T>() returns Option<&T> instead of Option<&Data<T>>
AppConfig::secure() is always false. #1202Fixed compilation with default features off
Add test server, test::start() and test::start_with()
test::start() and test::start_with()Delete HttpServer::run(), it is not useful with async/await
### Changed - Migrate to tokio 0.2
Nothing published for this version
Remove implementation of Responder for ().
Migrated to std::future
Remove implementation of Responder for (). (#1167)
time dependency to 0.2.7actix-connect dependency to 2.0.0-alpha.2test_server async fn.net2 crate with socket2base64 dependency to 0.12env_logger dependency to 0.7Add Payload::into_inner method and make stored def::Payload public.
Payload::into_inner method and make stored def::Payload public. (#1110)Host guards when the Host header is unset (e.g. HTTP/2 requests) (#1129)Add Scope::register_data and Resource::register_data methods, parallel to App::register_data.
Add Scope::register_data and Resource::register_data methods, parallel to App::register_data.
Add middleware::Condition that conditionally enables another middleware
Allow to re-construct ServiceRequest from HttpRequest and Payload
Add HttpServer::listen_uds for ability to listen on UDS FD rather than path, which is useful for example with systemd.
Make UrlEncodedError::Overflow more informative
Use actix-testing for testing utils
### Fixed - Request Extensions leak #1062
Form implements Responder, returning a application/x-www-form-urlencoded response
Re-implement Host predicate (#989)
Form implements Responder, returning a application/x-www-form-urlencoded response
Add into_inner to Data
Add test::TestRequest::set_form() convenience method to automatically serialize data and set the header in test requests.
Query payload made pub. Allows user to pattern-match the payload.
Enable rust-tls feature for client #1045
Update serde_urlencoded to 0.6.1
Update url to 2.1
Unix domain sockets (HttpServer::bind_uds) #92
Unix domain sockets (HttpServer::bind_uds) #92
Actix now logs errors resulting in "internal server error" responses always, with the error logging level
Logger middlewareAdd Responder impl for (T, StatusCode) where T: Responder
Add Responder impl for (T, StatusCode) where T: Responder
Allow to access app's resource map via ServiceRequest::resource_map() and HttpRequest::resource_map() methods.
rand dependency version to 0.7Support asynchronous data factories #850
encoding_rs crate instead of unmaintained encoding crateMove cors middleware to actix-cors crate.
Move cors middleware to actix-cors crate.
Move identity middleware to actix-identity crate.
Add support for PathConfig #903
Add support for PathConfig #903
Add middleware::identity::RequestIdentity trait to get_identity from HttpMessage.
Move cors middleware to actix-cors crate.
Move identity middleware to actix-identity crate.
Disable default feature secure-cookies.
Allow to test an app that uses async actors #897
Re-apply patch from #637 #894
Add ServiceRequest::set_payload() method.
Add Scope::configure() method.
Add ServiceRequest::set_payload() method.
Add test::TestRequest::set_json() convenience method to automatically serialize data and set header in test requests.
Add macros for head, options, trace, connect and patch http methods
Option<_> indirection around ServerBuilder from HttpServer. #863Fix Logger request time format, and use rfc3339. #867
Clear http requests pool on app service drop #860
Add Query ::from_query() to extract parameters from a query string. #846
Query<T>::from_query() to extract parameters from a query string. #846QueryConfig, similar to JsonConfig for customizing error handling of query extractors.JsonConfig is now Send + Sync, this implies that error_handler must be Send + Sync too.Nothing published for this version
Allow to set/override app data on scope level
App::configure take an FnOnce instead of FnAdd helper function for executing futures test::block_fn()
test::block_fn()Extractor configuration could be registered with App::data() or with Resource::data() #775
Route data is unified with app data, Route::data() moved to resource level to Resource::data()
CORS handling without headers #702
Allow constructing Data instances to avoid double Arc for Send + Sync types.
NormalizePath middleware impl #806App::data_factory() is deleted.Add raw services support via web::service()
Add raw services support via web::service()
Add helper functions for reading response body test::read_body()
Add support for remainder match (i.e "/path/{tail}*")
Extend Responder trait, allow to override status code and headers.
Store visit and login timestamp in the identity cookie #502
.to_async() handler can return Responder type #792Add helper functions for reading test response body, test::read_response() and test::read_response_json()`
Add helper functions for reading test response body, test::read_response() and test::read_response_json()`
Add .peer_addr() #744
Add NormalizePath middleware
Rename RouterConfig to ServiceConfig
Rename test::call_success to test::call_service
Removed ServiceRequest::from_parts() as it is unsafe to create from parts.
CookieIdentityPolicy::max_age() accepts value in seconds
TestRequest::app_data()Allow using any service as default service.
Allow using any service as default service.
Remove generic type for request payload, always use default.
Removed Decompress middleware. Bytes, String, Json, Form extractors automatically decompress payload.
Make extractor config type explicit. Add FromRequest::Config associated type.
Added async io TestBuffer for testing.
TestBuffer for testing.App::configure() allow to offload app configuration to different methods
App::configure() allow to offload app configuration to different methods
Added URLPath option for logger
Added ServiceRequest::app_data(), returns Data<T>
Added ServiceFromRequest::app_data(), returns Data<T>
FromRequest trait refactoring
Move multipart support to actix-multipart crate
Renamed TestRequest::to_service() to TestRequest::to_srv_request()
Renamed TestRequest::to_service() to TestRequest::to_srv_request()
Renamed TestRequest::to_response() to TestRequest::to_srv_response()
Removed Deref impls
actix_web::web::md()Multipart::Field renamed to MultipartField
Use forked cookie
Multipart::Field renamed to MultipartField
Complete architecture re-design.
Complete architecture re-design.
Return 405 response if no matching route found within resource #538
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Remove the experimental experimental-io-uring crate feature and its implementation, including the NamedFile::open_async() method.
experimental-io-uring crate feature and its implementation, including the NamedFile::open_async() method.Files::new.Files::try_compressed() to support serving pre-compressed static files.Range: bytes=0-.Files when use_hidden_files() is enabled and request paths contain . segments.NamedFile panic when serving files with pre-UNIX epoch modification times.Content-Encoding: identity header in NamedFile range responses.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →