#
{% endmacro %}
{% macro answer() %}
{% endmacro %}
{% macro endfaq() %}
{% endmacro %}
# FAQ
Below you'll find a collection of commonly asked questions and answers. If you
have suggestions for questions you'd like to see answered here, [comment on the
discussion thread].
[comment on the discussion thread]: https://github.com/rwf2/Rocket/discussions/1836
## About Rocket
{{ faq("monolithic") }}
Is Rocket a monolithic framework like Rails? Or is it more like Flask?
{{ answer() }}
Neither!
Rocket's core is small yet complete with respect to security and correctness. It
mainly consists of:
* Guard traits like [`FromRequest`] and [`FromData`].
* Derive macros for all common traits.
* Attribute macros for routing.
* Thorough compile and launch-time checking.
* Zero-copy parsers and validators for common formats like multipart and SSE.
* Syntax sugar extensions for features like async streams and traits.
* Optional features for functionality like TLS, secrets, and so on.
The goal is for functionality like templating, sessions, ORMs, and so on to be
implemented entirely outside of Rocket while maintaining a first-class feel and
experience. Indeed, crates like [`rocket_dyn_templates`] and [`rocket_db_pools`]
do just this. As a result, Rocket is neither "bare-bones" nor is it a kitchen
sink for all possible features.
Unlike other frameworks, Rocket makes it its mission to help you avoid security
and correctness blunders. It does this by including, out-of-the-box:
* A flexible, type-based [configuration](../configuration/) system.
* [Security and privacy headers](@api/master/rocket/shield/) by default.
* Zero-Copy RFC compliant [URI parsers](@api/master/rocket/http/uri).
* Safe, [typed URIs](@api/master/rocket/macro.uri.html) with compile-time checking.
* [Compile-time and launch-time route checking](@api/master/rocket/attr.route.html).
* A [testing framework](@api/master/rocket/local) with sync and `async` variants.
* Safe, exclusive access to fully decoded HTTP values.
* Mandatory [data limits](@api/master/rocket/data/struct.Limits.html) to prevent
trivial DoS attacks.
Of course, this functionality comes at a compile-time cost (but notably, _not_
a runtime cost), impacting Rocket's clean build-time. For comparison, here's
what a clean build of "Hello, world!" looks like for some Rust web frameworks:
| Framework | Dependencies | Build Time | Build w/ `sscache` |
|-----------------|--------------|------------|--------------------|
| Rocket 0.5 | 105 | 12s | 5s |
| Actix-Web 4.4.0 | 119 | 11s | 4s |
| Axum 0.6.20 | 78 | 10s | 4s |