# Echo > Echo is a Go web framework. These docs cover setup, routing, requests, responses, middleware, and runnable examples. This index describes the v5.4.0 docs, built against [Echo source](https://github.com/labstack/echo/tree/v5.4.0). For package API signatures, see [pkg.go.dev](https://pkg.go.dev/github.com/labstack/echo/v5). ## Guide - [Quickstart](https://echo.labstack.com/guide/quickstart/): Build a production-ready Echo API in under five minutes. - [Installation](https://echo.labstack.com/guide/installation/): Add Echo v5 to your Go module. - [Routing](https://echo.labstack.com/guide/routing/): Match request URLs to handlers on Echo's zero-allocation radix tree. - [Context](https://echo.labstack.com/guide/context/): The per-request object carrying the request, response, params, and helpers. - [Binding](https://echo.labstack.com/guide/binding/): Parse request data into typed Go structs from path, query, header, and body. - [Error Handling](https://echo.labstack.com/guide/error-handling/): Centralized HTTP error handling by returning errors from handlers and middleware. - [Request](https://echo.labstack.com/guide/request/): Retrieve form, query, and path data from a request, and validate it. - [Response](https://echo.labstack.com/guide/response/): Send strings, HTML, JSON, XML, files, streams, redirects, and response hooks. - [Serving Static Files](https://echo.labstack.com/guide/static-files/): Serve images, JavaScript, CSS, fonts, and other assets with Echo. - [Templates](https://echo.labstack.com/guide/templates/): Render HTML templates with any engine by registering a renderer. - [Cookies](https://echo.labstack.com/guide/cookies/): Create, read, and list HTTP cookies using the standard http.Cookie type. - [Customization](https://echo.labstack.com/guide/customization/): Customize Echo's logger, validator, binder, renderer, serializer, and error handling. - [Testing](https://echo.labstack.com/guide/testing/): Test handlers and middleware with httptest and the echotest helpers. - [IP Address](https://echo.labstack.com/guide/ip-address/): Retrieve the real client IP address securely behind proxies. - [Request Scheme and Trusted Proxies](https://echo.labstack.com/guide/request-scheme/): Configure how Echo determines HTTP or HTTPS behind a trusted proxy. ## Middleware - [Basic Auth](https://echo.labstack.com/middleware/basic-auth/): HTTP Basic authentication middleware that validates username and password credentials. - [Body Dump](https://echo.labstack.com/middleware/body-dump/): Capture request and response payloads and pass them to a handler for logging or debugging. - [Body Limit](https://echo.labstack.com/middleware/body-limit/): Reject requests whose body exceeds a configured maximum size. - [Casbin Auth](https://echo.labstack.com/middleware/casbin-auth/): Authorize requests with the Casbin access control library using a small custom middleware. - [Context Timeout](https://echo.labstack.com/middleware/context-timeout/): Apply a timeout to the request context so context-aware operations can return early. - [CORS](https://echo.labstack.com/middleware/cors/): Cross-Origin Resource Sharing middleware for secure cross-domain access control. - [CSRF](https://echo.labstack.com/middleware/csrf/): Cross-Site Request Forgery protection using Sec-Fetch-Site metadata and token validation. - [Decompress](https://echo.labstack.com/middleware/decompress/): Transparently decompress gzip-encoded request bodies. - [Gzip](https://echo.labstack.com/middleware/gzip/): Compress HTTP responses with the gzip compression scheme. - [JWT](https://echo.labstack.com/middleware/jwt/): JSON Web Token authentication middleware provided by the echo-jwt module. - [Key Auth](https://echo.labstack.com/middleware/key-auth/): Key-based authentication middleware that validates an API key from header, query, form, or cookie. - [Request Logger](https://echo.labstack.com/middleware/logger/): Log selected request and response values with your logging library. - [Method Override](https://echo.labstack.com/middleware/method-override/): Override the HTTP method of a POST request via header, form, or query value. - [OpenTelemetry](https://echo.labstack.com/middleware/open-telemetry/): OpenTelemetry instrumentation for HTTP requests in Echo. - [Prometheus](https://echo.labstack.com/middleware/prometheus/): Generate Prometheus metrics for HTTP requests in Echo. - [Proxy](https://echo.labstack.com/middleware/proxy/): HTTP and WebSocket reverse proxy middleware with load balancing. - [Rate Limiter](https://echo.labstack.com/middleware/rate-limiter/): Limit the number of requests from a particular IP or identifier within a time period. - [Recover](https://echo.labstack.com/middleware/recover/): Recover from panics anywhere in the chain and delegate to the centralized error handler. - [Redirect](https://echo.labstack.com/middleware/redirect/): Redirect requests between HTTP/HTTPS and www/non-www variants. - [Request ID](https://echo.labstack.com/middleware/request-id/): Generate a unique ID for each request. - [Rewrite](https://echo.labstack.com/middleware/rewrite/): Rewrite the URL path based on configured rules. - [Secure](https://echo.labstack.com/middleware/secure/): Protect against XSS, content sniffing, clickjacking, and other injection attacks. - [Session](https://echo.labstack.com/middleware/session/): HTTP session management backed by gorilla/sessions. - [Static](https://echo.labstack.com/middleware/static/): Serve files from a directory and keep encoded paths safe by default. - [Trailing Slash](https://echo.labstack.com/middleware/trailing-slash/): Add or remove a trailing slash from the request URI. ## Cookbook - [Hello World](https://echo.labstack.com/cookbook/hello-world/): A minimal Echo server that responds with a greeting. - [CRUD](https://echo.labstack.com/cookbook/crud/): Create, read, update, and delete resources with Echo and JSON binding. - [Auto TLS](https://echo.labstack.com/cookbook/auto-tls/): Automatically obtain and renew TLS certificates from Let's Encrypt. - [CORS](https://echo.labstack.com/cookbook/cors/): Enable Cross-Origin Resource Sharing with an allow list or a custom origin function. - [Embed Resources](https://echo.labstack.com/cookbook/embed-resources/): Serve static assets bundled into the binary with Go's embed package. - [File Download](https://echo.labstack.com/cookbook/file-download/): Serve files for download, inline display, or as named attachments. - [File Upload](https://echo.labstack.com/cookbook/file-upload/): Handle single and multiple multipart file uploads alongside form fields. - [Graceful Shutdown](https://echo.labstack.com/cookbook/graceful-shutdown/): Drain in-flight requests before stopping the server on an interrupt signal. - [HTTP/2 Server](https://echo.labstack.com/cookbook/http2/): Serve traffic over HTTP/2 by starting Echo with a TLS certificate. - [JWT](https://echo.labstack.com/cookbook/jwt/): Authenticate requests with JSON Web Tokens using the echo-jwt middleware. - [Custom Middleware](https://echo.labstack.com/cookbook/middleware/): Write custom Echo middleware to collect request statistics and set response headers. - [Server-Sent Events (SSE)](https://echo.labstack.com/cookbook/sse/): Stream server-sent events from an Echo handler, either per connection or broadcast to many clients. - [Streaming Response](https://echo.labstack.com/cookbook/streaming-response/): Stream data to the client as it is produced using chunked transfer encoding. - [WebSocket](https://echo.labstack.com/cookbook/websocket/): Handle WebSocket connections in Echo using golang.org/x/net/websocket or gorilla/websocket. - [Subdomain](https://echo.labstack.com/cookbook/subdomain/): Route requests to different Echo instances per host using a virtual host handler. - [Timeout](https://echo.labstack.com/cookbook/timeout/): Apply a request timeout to handlers with the ContextTimeout middleware. - [Reverse Proxy](https://echo.labstack.com/cookbook/reverse-proxy/): Use Echo as a reverse proxy and load balancer in front of upstream applications. ## Other versions and languages - [Next version](https://echo.labstack.com/next/llms.txt): preview docs for the next Echo release. - [Español](https://echo.labstack.com/es/): localized documentation. - [日本語](https://echo.labstack.com/ja/): localized documentation. - [Português](https://echo.labstack.com/pt-br/): localized documentation. - [简体中文](https://echo.labstack.com/zh-cn/): localized documentation.