rouille
High-level idiomatic web framework.
3.6.2
14M downloads/mo
#2585 most downloaded on crates.io
tomaka/rouille
What this package is like to depend on
Last release 3 years ago
no release in 18 months
Ships unpredictably
gaps range from 8 days to 2.4 years
Most releases are documented
notes for 24 of 37 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
37 releases · first in 2016
0 releases in the last 12 months
see the full history below
Release timeline
37 releases · Jan 2016 to Apr 2023Releases
latest 37-
3.6.224 Apr 2023Release notes
Open source →Changes
- Use sha1-smol, closes #267 by @goto-bus-stop in #269
- Fix
rouille::Server: Exposenew_sslon featrustlsby @NobodyXu in #272 - Remove dependency on num_cpus by @meesfrensel in #268
New Contributors
- @goto-bus-stop made their first contribution in #269
- @NobodyXu made their first contribution in #272
- @meesfrensel made their first contribution in #268
Full Changelog: v3.6.1...v3.6.2
Release notes
Open source →- Expose
new_sslfeature forrustlssupport fromtiny-http. - Switch to
sha1-smolfor a smaller footprint, more stable hash library. - Remove dependency on
num_cpususingstd::thread::available_parallelisminstead.
-
3.6.112 Oct 2022Release notes
Open source →Changes
Reverts Added a number of default features as it breaks any downstreams who were specifying
default-features = false.Full Changelog: v3.6.0...v3.6.1
Release notes
Open source →Reverts Added a number of default features as it breaks any downstreams who were specifying
default-features = false. -
3.6.012 Oct 2022Release notes
Open source →Changes
- Added
rustlssupport (viatiny-http), if you're currently using thesslfeature you can switch from OpenSSL to Rustls by instead enabling therustlsfeature in yourCargo.toml. - Added a number of default features to allow users to reduce their dependency graph where they don't need all the functionality Rouille provides.
logging,assets,postandsessionare now optional, but enabled by default for backwards compatibility. - Correctly support 'flag' type query parameters where the parameter has no associated value. Previously a query like
GET /?foowould returnNonefromget_param, instead ofSome(""). - Updated
tiny-httpto 0.12.0, further reducing the dependency tree by breaking our hard requirement ontime-rs. This version oftiny-httpalso enables Unix socket listeners, which will be exposed in a future release of Rouille.
New Contributors
- @HookedBehemoth made their first contribution in #254
- @vmiklos made their first contribution in #265
- @DeWarner made their first contribution in #259
Full Changelog: v3.5.0...v3.6.0
Release notes
Open source →- Added
rustlssupport (viatiny-http), if you're currently using thesslfeature you can switch from OpenSSL to Rustls by instead enabling therustlsfeature in yourCargo.toml. - Added a number of default features to allow users to reduce
their dependency graph where they don't need all the functionality Rouille provides.
logging,assets,postandsessionare now optional, but enabled by default for backwards compatibility. - Correctly support 'flag' type query parameters where the parameter has no
associated value. Previously a query like
GET /?foowould returnNonefromget_param, instead ofSome(""). - Updated
tiny-httpto 0.12.0, further reducing the dependency tree by breaking our hard requirement ontime-rs. This version oftiny-httpalso enables Unix socket listeners, which will be exposed in a future release of Rouille.
- Added
-
3.5.022 Dec 2021Release notes
Open source →Changes
- Replaced our use of the
brotli2crate with the alternative pure Rust implementationbrotli. This removes Rouille's vulnerability to RUSTSEC-2021-0131, which existed due tobrotli-sysbundling a vulnerable version of the underlying C library. - Unpinned
time-rsand as a result increased our MSRV to 1.51, we don't have a formal MSRV policy and the ecosystem is making it more and more difficult to support compiler versions more than about 6 months old.
All Changes: v3.4.0...v3.5.0
Release notes
Open source →- Replaced our use of the
brotli2crate with the alternative pure Rust implementationbrotli. This removes Rouille's vulnerability to RUSTSEC-2021-0131, which existed due tobrotli-sysbundling a vulnerable version of the underlying C library. - Unpinned
time-rsand as a result increased our MSRV to 1.51, we don't have a formal MSRV policy and the ecosystem is making it more and more difficult to support compiler versions more than about 6 months old.
- Replaced our use of the
-
3.4.004 Nov 2021Release notes
Open source →Changes
- Resolved a number of cleanup & refactoring TODOs
- Correctly identify non-lowercase content types as text (e.g.
text/JSONwould be incorrectly identified as non-text). - Pinned
time-rsto 0.3.2 to avoid a semver-breaking change in their MSRV. - Bumped
chronoto 0.4.19 and disabled their default feature set to avoid warnings aboutRUSTSEC-2020-0071(Rouille was never vulnerable, but used a vulnerable version ofchrono).
Release notes
Open source →- Resolved a number of cleanup & refactoring TODOs
- Correctly identify non-lowercase content types as text (e.g.
text/JSONwould be incorrectly identified as non-text). - Pinned
time-rsto 0.3.2 to avoid a semver-breaking change in their MSRV. - Bumped
chronoto 0.4.19 and disabled their default feature set to avoid warnings aboutRUSTSEC-2020-0071(Rouille was never vulnerable, but used a vulnerable version ofchrono).
-
3.3.115 Sep 2021Release notes
Open source →Changes
- Use
.strip_prefixin place of.starts_withwhere appropriate, this stops a Clippy lint from leaking out of ourrouter!macro and into downstream code.
Release notes
Open source →- Use
.strip_prefixin place of.starts_withwhere appropriate, this stops a Clippy lint from leaking out of ourrouter!macro and into downstream code.
- Use
-
3.3.001 Sep 2021Release notes
Open source →Changes
- Bumped minimum supported Rust version to 1.48
- Added module-level documentation for
rouille::content_encoding - Updated
timedependency to0.3andpostgresto0.19to fix a compile failure due to a yanked version ofsha1. - Fixed numerous typos in the crate documentation.
Release notes
Open source →- Bumped minimum supported Rust version to 1.48
- Added module-level documentation for
rouille::content_encoding - Updated
timedependency to0.3andpostgresto0.19to fix a compile failure due to a yanked version ofsha1. - Fixed numerous typos in the crate documentation.
-
3.2.130 Jun 2021Release notes
Open source →Changes
- Removed unused dependency
termand updatedrand,multipart,deflateandtimeto latest supported versions.
Release notes
Open source →- Removed unused dependency
termand updatedrand,multipart,deflateandtimeto latest supported versions.
- Removed unused dependency
-
3.2.029 Jun 2021Release notes
Open source →Changes
- Add
ResponseBody::from_reader_and_sizefor constructing aResponseBody
from aReaderand an already known size such thatContent-Lengthmay be
set on the response.
- Add
-
3.1.104 May 2021Release notes
Open source →- Replace all uses of deprecated
try!with?to suppress warnings that can leak out of macro contexts.
- Replace all uses of deprecated
-
3.1.025 Apr 2021Release notes
Open source →- Add
Server::poll_timeout()for polling more efficiently. - Add
Server::stoppable()for running a single, cancellable server thread. - Add
Server::join()for finalising all in-flight requests before shutting down. - Prevent infinite loop on Websocket EOF
- Update
tiny-httpto 0.8.1 containing fixes for:- HTTPS deadlock where one request holds a locked resource while another is attempting HTTPS negotiation
- Fix RUSTSEC-2020-0031
- Don't set
Transfer-Encoding: chunkedon 1xx or 204 responses (which can lead to clients hanging).
- Bump minimum support Rust version to 1.41.1
- Add
-
3.0.007 Dec 2018Release notes
Open source →- Bump minimum supported Rust version to 1.34.2
- embedded, exposed
urlversion increased to 2.0 - Don't use deprecated
Error::description()
-
2.2.001 Sep 2018Release notes
Open source →- Bump minimum supported Rust version to 1.20.0.
- Expose that the
Requestbody (accessible withrequest.data()) has aSendbound.
-
2.1.007 Mar 2018Release notes
Open source →- Replace
flate2withdeflate - Fixed handling of url-encoded path components in route!() macro. Previously, URL was eagerly decoded and thus would fail to match intended routes if special characters were used (such as ? or /). Now, individual matched components are decoded after matching.
- Added
Response::empty_204. - Added ssl feature and new_ssl constructor to Server, for https support. The certificate and private key must be supplied by user.
- Replace
-
2.0.004 Feb 2018Release notes
Open source →- Dropped the use of rustc-serialize in favor of using serde.
- Updated
multipartto 0.13. Theinput::multipart::get_multipart_inputfunction returns types reexported frommultipartwhich have small but breaking API changes. - Update
Serverwith an option to use a thread pool to process requests
-
1.0.318 Sep 2017Nothing published for this version
-
1.0.230 Jun 2017Nothing published for this version
-
1.0.131 Jan 2017Nothing published for this version
-
1.0.018 Dec 2016 -
0.4.218 Dec 2016Release notes
Open source →- The
content_encodingmodule now supports brotli. - Added an
accept!macro similar to amatchexpression that chooses a block depending on the value of theAcceptheader of the request. - Added
proxy::full_proxy. It behaves the same asproxybut returns more status codes and less errors. - Added
Response::from_data,from_file,with_content_disposition_attachment,empty_406,with_public_cache,with_private_cache,with_no_cache,without_header,with_additional_headerandwith_unique_headerfor easier response manipulation. - Added
Request::headers()that provides an iterator to the list of headers. - Added
input::priority_header_preferredandinput::parse_priority_headerto easily parse request headers such asAcceptorAccept-Language. - MIME types that contain "font" are now also compressed by the
content_encodingmodule. - Changed
text/xmltoapplication/xmlin the MIME types auto-determination.
- The
-
0.4.115 Dec 2016Release notes
Open source →- Added a
Serverstruct as an alternative tostart_serverfor manual control over the behavior. - Added a
content_encoding::applyfunction that appliesContent-Encodingto a response. - The
try_or_400!macro now returns a response whose body describes the error in JSON. - The
try_or_400!macro now requires the error to implement thestd::error::Errortrait.
- Added a
-
0.4.014 Dec 2016Release notes
Open source →- Added support for websockets with the
websocketmodule. - Added
Request::do_not_track()to query the DNT header. - Renamed
get_json_input()tojson_input(). - Renamed
get_cookies()tocookies(). - Renamed
get_basic_http_auth()tobasic_http_auth(). - The logs now show the time of the start of the request processing.
Request::header()now returns aOption<&str>instead ofOption<String>.Response::svg()andResponse::html()now take aInto<String>instead of aInto<Vec<u8>>.- Renamed
Response::error()andsuccess()tois_error()andis_success(). - The
headersfield ofResponseare nowVec<(Cow<'static, str>, Cow<'static, str>)>instead ofVec<(String, String)>. - Removed
Response::redirectand replaced it withredirect_301,redirect_302, etc. - Added
Response::with_etag()to add an ETag header to a response. - Added an
upgradefield toResponse, necessary for websockets. - Fixed being able to set the value of the Content-Length and Transfer-Encoding headers.
plain_text_bodynow has a limit of 1 MB of data before returning an error.- Added
plain_text_body_with_limitwhich does the same asplain_text_bodybut with a customizable limit. - Implemented the
std::error::Errortrait on all error types. - Added
Response::into_reader_and_size()to retrieve aReadobject from aResponseBody. - Fixed issue with static files not being found on Windows because of
/and\mismatch.
- Added support for websockets with the
-
0.3.303 Dec 2016 -
0.3.202 Dec 2016 -
0.3.130 Nov 2016 -
0.3.030 Nov 2016Release notes
Open source →- Reworked POST input. You can now use the
post_input!macro instead of creating a decodable struct. - Removed the
input::sessionmodule and replaced it with thesessionmodule. Sessions no longer store data in a hashmap, but instead only provide a way to generate a unique ID per client.
- Reworked POST input. You can now use the
-
0.2.218 Nov 2016Nothing published for this version
-
0.2.107 Nov 2016Nothing published for this version
-
0.2.020 Oct 2016Release notes
Open source →- Fixed the
+character in the query string not being replaced with a space as it should. Request::data()now returns anOption<impl Read>instead of aVec<u8>. Ifdata()is called twice, the second call will returnNone.RouteErrorhas been removed. You are now encouraged to return aResponseeverywhere instead of aResult<Response, RouteError>.- The
try_or_400!,find_route!andassert_or_4OO!macros and thematch_assetsfunction have been adjusted for the previous change. - Added a
try_or_404!macro similar totry_or_400!. - In the case of a panic, the response with status code 500 that the server answers now contains a small text in its body, indicating the user that an internal server error occured.
- Added
Response::empty_400(),Response::empty_404(),Response::success()andResponse::error().
- Fixed the
-
0.1.726 Sep 2016Nothing published for this version
-
0.1.622 Sep 2016Nothing published for this version
-
0.1.502 Sep 2016Nothing published for this version
-
0.1.418 May 2016Nothing published for this version
-
0.1.330 Mar 2016Nothing published for this version
-
0.1.222 Mar 2016Nothing published for this version
-
0.1.121 Mar 2016Nothing published for this version
-
0.1.024 Jan 2016Nothing published for this version