# Revali > Revali is a Dart API framework. It reads the annotations on your classes and methods and generates the HTTP server, a type-safe Dart client, an OpenAPI document and a Dockerfile. ## Revali Install the framework, configure your app, and run the CLI. - [Overview](https://docs.revali.dev/revali): What Revali is, and how annotations become a running server. - [Installation](https://docs.revali.dev/revali/getting-started/installation): The SDK, the two packages, and the `routes/` directory. - [Create Your First Endpoint](https://docs.revali.dev/revali/getting-started/create-your-first-endpoint): A controller, request binding, and the exact responses. - [Run the Server](https://docs.revali.dev/revali/getting-started/run-the-server): `revali dev`, hot reload, debugging, and what gets generated. - [Messaging](https://docs.revali.dev/revali/messaging): Consume queue messages with @Consumes, backed by a broker. - [Testing](https://docs.revali.dev/revali/testing): Drive your server in-process with `revali_test`. - [Overview](https://docs.revali.dev/revali/app-configuration): Everything an app can declare, in one place. - [Create an App](https://docs.revali.dev/revali/app-configuration/create-an-app): Declare the `@App()` that owns host, port and prefix. - [Configure Dependencies](https://docs.revali.dev/revali/app-configuration/configure-dependencies): Register services once and inject them anywhere. - [Error Responses](https://docs.revali.dev/revali/app-configuration/default-responses): Default 400/404/500 bodies, and `HttpError` for error codes. - [Environment Variables](https://docs.revali.dev/revali/app-configuration/env-vars): Read configuration from the environment, type-safely. - [HTTPS in Development](https://docs.revali.dev/revali/app-configuration/https): Serve TLS locally without a proxy in front. - [Compression](https://docs.revali.dev/revali/app-configuration/compression): Gzip responses for clients that ask for them. - [Worker Isolates](https://docs.revali.dev/revali/app-configuration/workers): Several isolates on one port, and what they do not share. - [Graceful Shutdown](https://docs.revali.dev/revali/app-configuration/graceful-shutdown): Finish in-flight requests before the process exits. - [Health Probes](https://docs.revali.dev/revali/app-configuration/health-probes): Liveness and readiness, and why they are not one check. - [Request Tracing](https://docs.revali.dev/revali/app-configuration/tracing): Carry a request id and W3C trace context across a hop. - [revali dev](https://docs.revali.dev/revali/cli/dev): Run the server with code generation and hot reload. - [revali create](https://docs.revali.dev/revali/cli/create): Scaffold controllers, apps, components, observers and pipes. - [revali build](https://docs.revali.dev/revali/cli/build): Produce the compiled server for deployment. - [revali up](https://docs.revali.dev/revali/cli/up): Run every service in the repository at once. - [revali services](https://docs.revali.dev/revali/cli/services): List the Revali services in this repository. - [revali compose](https://docs.revali.dev/revali/cli/compose): Generate a docker-compose.yaml for every service. - [revali routes](https://docs.revali.dev/revali/cli/routes): Print every route the generator found. - [revali doctor](https://docs.revali.dev/revali/cli/doctor): Check the project for the things that usually go wrong. - [revali ai](https://docs.revali.dev/revali/cli/ai): Install a Revali reference file for your AI coding assistant. - [revali.yaml](https://docs.revali.dev/revali/revali-configuration): Enable, disable and configure constructs. - [Middleware and Guards](https://docs.revali.dev/revali/tutorials/middleware): Log every request, and protect endpoints with a guard. - [Error Handling](https://docs.revali.dev/revali/tutorials/error-handling): Turn thrown exceptions into the responses you meant. - [Database Integration](https://docs.revali.dev/revali/tutorials/database-integration): Wire a database in through dependency injection. ## Constructs The packages that generate your server, client, docs and Dockerfile. - [Overview](https://docs.revali.dev/constructs): What a construct is, and which ones ship with Revali. - [Overview](https://docs.revali.dev/constructs/revali_server): The server reference — controllers, binding, requests, responses and the request lifecycle. - [Controllers](https://docs.revali.dev/constructs/revali_server/core/controllers): Group related endpoints under one URL path with a @Controller class - [HTTP Methods](https://docs.revali.dev/constructs/revali_server/core/methods): Method annotations that turn controller methods into endpoints, and the route path syntax - [Binding](https://docs.revali.dev/constructs/revali_server/core/binding): Get path, query, header, cookie, body and injected values into endpoint parameters - [Pipes](https://docs.revali.dev/constructs/revali_server/core/pipes): Transform or validate a bound value before it reaches the endpoint - [Overview](https://docs.revali.dev/constructs/revali_server/request): The read-only Request object, its properties, and how to access it from endpoints and lifecycle components - [Body](https://docs.revali.dev/constructs/revali_server/request/body): How request bodies are decoded by Content-Type, read with @Body, read in lifecycle components, and extended with custom parsers - [Client IP](https://docs.revali.dev/constructs/revali_server/request/client-ip): Read the client IP with @Ip() or request.ip, and resolve it from trusted proxy headers - [Redirect](https://docs.revali.dev/constructs/revali_server/request/redirect): Redirect an endpoint to another URL with @Redirect - [HEAD Requests](https://docs.revali.dev/constructs/revali_server/request/head-requests): HEAD is answered automatically for every GET route - [OPTIONS Requests](https://docs.revali.dev/constructs/revali_server/request/options-requests): OPTIONS is answered automatically for every route with the allowed methods - [Overview](https://docs.revali.dev/constructs/revali_server/response): How an endpoint's return value becomes the HTTP response, and how to change the body, status and headers - [Headers](https://docs.revali.dev/constructs/revali_server/response/headers): Headers Revali sets automatically, and setting your own with @SetHeader or the Headers object - [Status Code](https://docs.revali.dev/constructs/revali_server/response/status-code): The status codes Revali sends by default and how to set your own - [Cookies](https://docs.revali.dev/constructs/revali_server/response/cookies): Read request cookies with @Cookie and set response cookies with SetCookies - [Public Files](https://docs.revali.dev/constructs/revali_server/response/public): Serve static files from the project's public directory - [Server-Sent Events](https://docs.revali.dev/constructs/revali_server/response/server-sent-events): Stream values to the client over a long-lived HTTP response with @SSE - [WebSockets](https://docs.revali.dev/constructs/revali_server/response/websockets): Two-way messaging over a WebSocket connection with @WebSocket - [Overview](https://docs.revali.dev/constructs/revali_server/context): The per-request object that lifecycle components receive - request, response, shared data, metadata, route, and reflection. - [Data Sharing](https://docs.revali.dev/constructs/revali_server/context/data-sharing): Pass values between lifecycle components and endpoints within one request, keyed by type. - [Meta](https://docs.revali.dev/constructs/revali_server/context/meta): Attach your own annotations to endpoints and controllers and read them in lifecycle components. - [Reflect](https://docs.revali.dev/constructs/revali_server/context/reflect): Read metadata annotations on the fields of your return types at runtime, for example to strip private fields from responses. - [Overview](https://docs.revali.dev/constructs/revali_server/lifecycle-components): Run code before and after your endpoints - authentication, logging, data loading, error handling - and control where it applies. - [Writing a Component](https://docs.revali.dev/constructs/revali_server/lifecycle-components/components): The rules for a LifecycleComponent class - which methods become which role, what their parameters can bind, and how the constructor gets its values. - [Observer](https://docs.revali.dev/constructs/revali_server/lifecycle-components/observer): Watch every request and its outcome for logging and metrics, without changing either. - [Throttle](https://docs.revali.dev/constructs/revali_server/lifecycle-components/kits/throttle): Reject callers that send too many requests with 429 Too Many Requests. - [Request Wrapper](https://docs.revali.dev/constructs/revali_server/lifecycle-components/advanced/wrapper): Wrap the whole request pipeline in setup and teardown code, such as a Zone value, a transaction, or timing. - [Middleware](https://docs.revali.dev/constructs/revali_server/lifecycle-components/advanced/middleware): Prepare a request before guards and the endpoint run - load data, set headers - or stop it early. - [Guards](https://docs.revali.dev/constructs/revali_server/lifecycle-components/advanced/guards): Allow or deny a request before the endpoint runs - authentication, roles, permissions. - [Interceptors](https://docs.revali.dev/constructs/revali_server/lifecycle-components/advanced/interceptors): Run code just before the endpoint (pre) and just after it (post), for example to add request data or change the response. - [Exception Catchers](https://docs.revali.dev/constructs/revali_server/lifecycle-components/advanced/exception-catchers): Turn exceptions thrown during a request into error responses. - [Response Handler](https://docs.revali.dev/constructs/revali_server/lifecycle-components/advanced/response-handler): Replace how the final response is written to the HTTP connection. - [Allow Origins](https://docs.revali.dev/constructs/revali_server/access-control/allow-origins): Restrict which browser origins may call your API (CORS), and how Revali answers CORS preflight requests. - [Expect Headers](https://docs.revali.dev/constructs/revali_server/access-control/expect-headers): Reject requests that are missing required headers with 403, before any lifecycle component runs. - [Prevent Headers](https://docs.revali.dev/constructs/revali_server/access-control/prevent-headers): Reject requests that carry specific headers with 403, before any lifecycle component runs. - [Overview](https://docs.revali.dev/constructs/revali_client): Generate a typed Dart client package for your Revali API, then install, configure and use it - [Storage & Cookies](https://docs.revali.dev/constructs/revali_client/storage): How the generated client stores cookies, and how to persist them across app restarts with a custom Storage - [Generated Code](https://docs.revali.dev/constructs/revali_client/generated-code): The files revali_client generates, the Server class, how endpoints map to client methods, supported types and errors - [Interceptors & Retries](https://docs.revali.dev/constructs/revali_client/resilience): Add headers and logging, give up, try again — safely. - [get_it Integration](https://docs.revali.dev/constructs/revali_client/integrations/get_it): Register the generated Server and every data source with get_it in one call - [Overview](https://docs.revali.dev/constructs/revali_swagger): Generate an OpenAPI 3.0.3 spec from your Revali routes, then install and configure revali_swagger - [Annotations](https://docs.revali.dev/constructs/revali_swagger/annotations): Optional annotations from revali_swagger_annotations that add summaries, tags, responses and schema overrides to the generated spec - [Type Inference](https://docs.revali.dev/constructs/revali_swagger/type-inference): How revali_swagger turns Dart parameter and return types into JSON Schema, and when to override it with @ApiType - [Overview](https://docs.revali.dev/constructs/revali_docker): Generate a Dockerfile for your Revali server with revali build, then build, run and deploy the image - [Fly.io](https://docs.revali.dev/constructs/revali_docker/deploy/fly-io): Deploy a Revali server to Fly.io using the Dockerfile generated by revali_docker ## Create Constructs Write your own code generator against the Revali pipeline. - [Overview](https://docs.revali.dev/create-constructs): What a construct can generate, and when to write one. - [Getting Started](https://docs.revali.dev/create-constructs/getting-started): A construct package that Revali will actually run. - [Construct Lifecycle](https://docs.revali.dev/create-constructs/core/construct-lifecycle): How Revali discovers, compiles, caches and runs constructs, and when to pass --recompile - [Build Construct](https://docs.revali.dev/create-constructs/core/build-construct): Generic versus build constructs, and how to write a BuildConstruct with preBuild and postBuild hooks - [Debugging](https://docs.revali.dev/create-constructs/tips-and-tricks): Step through your construct with a debugger.