# Repository: labstack/echo # Stars: 32325 ## CLAUDE.md # CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## About This Project Echo is a high performance, minimalist Go web framework. This is the main repository for Echo v4, which is available as a Go module at `github.com/labstack/echo/v4`. ## Development Commands The project uses a Makefile for common development tasks: - `make check` - Run linting, vetting, and race condition tests (default target) - `make init` - Install required linting tools (golint, staticcheck) - `make lint` - Run staticcheck and golint - `make vet` - Run go vet - `make test` - Run short tests - `make race` - Run tests with race detector - `make benchmark` - Run benchmarks Example commands for development: ```bash # Setup development environment make init # Run all checks (lint, vet, race) make check # Run specific tests go test ./middleware/... go test -race ./... # Run benchmarks make benchmark ``` ## Code Architecture ### Core Components **Echo Instance (`echo.go`)** - The `Echo` struct is the top-level framework instance - Contains router, middleware stacks, and server configuration - Not goroutine-safe for mutations after server start **Context (`context.go`)** - The `Context` interface represents HTTP request/response context - Provides methods for request/response handling, path parameters, data binding - Core abstraction for request processing **Router (`router.go`)** - Radix tree-based HTTP router with smart route prioritization - Supports static routes, parameterized routes (`/users/:id`), and wildcard routes (`/static/*`) - Each HTTP method has its own routing tree **Middleware (`middleware/`)** - Extensive middleware system with 50+ built-in middlewares - Middleware can be applied at Echo, Group, or individual route level - Common middleware: Logger, Recover, CORS, JWT, Rate Limiting, etc. ### Key Patterns **Middleware Chain** - Pre-middleware runs before routing - Regular middleware runs after routing but before handlers - Middleware functions have signature `func(next echo.HandlerFunc) echo.HandlerFunc` **Route Groups** - Routes can be grouped with common prefixes and middleware - Groups support nested sub-groups - Defined in `group.go` **Data Binding** - Automatic binding of request data (JSON, XML, form) to Go structs - Implemented in `binder.go` with support for custom binders **Error Handling** - Centralized error handling via `HTTPErrorHandler` - Automatic panic recovery with stack traces ## File Organization - Root directory: Core Echo functionality (echo.go, context.go, router.go, etc.) - `middleware/`: All built-in middleware implementations - `_test/`: Test fixtures and utilities - `_fixture/`: Test data files ## Code Style - Go code uses tabs for indentation (per .editorconfig) - Follows standard Go conventions and formatting - Uses gofmt, golint, and staticcheck for code quality ## Testing - Standard Go testing with `testing` package - Tests include unit tests, integration tests, and benchmarks - Race condition testing is required (`make race`) - Test files follow `*_test.go` naming convention ## README.md [![Sourcegraph](https://sourcegraph.com/github.com/labstack/echo/-/badge.svg?style=flat-square)](https://sourcegraph.com/github.com/labstack/echo?badge) [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](https://pkg.go.dev/github.com/labstack/echo/v5) [![Go Report Card](https://goreportcard.com/badge/github.com/labstack/echo?style=flat-square)](https://goreportcard.com/report/github.com/labstack/echo) [![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/labstack/echo/echo.yml?style=flat-square)](https://github.com/labstack/echo/actions) [![Codecov](https://img.shields.io/codecov/c/github/labstack/echo.svg?style=flat-square)](https://codecov.io/gh/labstack/echo) [![Forum](https://img.shields.io/badge/community-forum-00afd1.svg?style=flat-square)](https://github.com/labstack/echo/discussions) [![Twitter](https://img.shields.io/badge/twitter-@labstack-55acee.svg?style=flat-square)](https://twitter.com/labstack) [![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://raw.githubusercontent.com/labstack/echo/master/LICENSE) ## Echo High performance, extensible, minimalist Go web framework. * [Official website](https://echo.labstack.com) * [Quick start](https://echo.labstack.com/docs/quick-start) * [Middlewares](https://echo.labstack.com/docs/category/middleware) Help and questions: [Github Discussions](https://github.com/labstack/echo/discussions) ### Feature Overview - Optimized HTTP router which smartly prioritize routes - Build robust and scalable RESTful APIs - Group APIs - Extensible middleware framework - Define middleware at root, group or route level - Data binding for JSON, XML and form payload - Handy functions to send variety of HTTP responses - Centralized HTTP error handling - Template rendering with any template engine - Define your format for the logger - Highly customizable - Automatic TLS via Let’s Encrypt - HTTP/2 support ## Sponsors
encore icon Encore – the platform for building Go-based cloud backends

Click [here](https://github.com/sponsors/labstack) for more information on sponsorship. ## [Guide](https://echo.labstack.com/guide) ### Supported Echo versions - Latest major version of Echo is `v5` as of 2026-01-18. - See [API_CHANGES_V5.md](./API_CHANGES_V5.md) for public API changes between `v4` and `v5`, notes on upgrading. - Echo `v4` is supported with **security*** updates and **bug** fixes until **2026-12-31** ### Installation ```sh // go get github.com/labstack/echo/{version} go get github.com/labstack/echo/v5 ``` Latest version of Echo supports last four Go major [releases](https://go.dev/doc/devel/release) and might work with older versions. ### Example ```go package main import ( "github.com/labstack/echo/v5" "github.com/labstack/echo/v5/middleware" "log/slog" "net/http" ) func main() { // Echo instance e := echo.New() // Middleware e.Use(middleware.RequestLogger()) // use the RequestLogger middleware with slog logger e.Use(middleware.Recover()) // recover panics as errors for proper error handling // Routes e.GET("/", hello) // Start server if err := e.Start(":8080"); err != nil { slog.Error("failed to start server", "error", err) } } // Handler func hello(c *echo.Context) error { return c.String(http.StatusOK, "Hello, World!") } ``` # Official middleware repositories Following list of middleware is maintained by Echo team. | Repository | Description | |------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| | [github.com/labstack/echo-jwt](https://github.com/labstack/echo-jwt) | [JWT](https://github.com/golang-jwt/jwt) middleware | | [github.com/labstack/echo-contrib](https://github.com/labstack/echo-contrib) | [casbin](https://github.com/casbin/casbin), [gorilla/sessions](https://github.com/gorilla/sessions), [pprof](https://pkg.go.dev/net/http/pprof)) middlewares | | [github.com/labstack/echo-opentelemetry](https://github.com/labstack/echo-opentelemetry) | [OpenTelemetry](https://opentelemetry.io/) middleware for tracing and metrics | | [github.com/labstack/echo-prometheus](https://github.com/labstack/echo-prometheus) | [Prometheus](https://github.com/prometheus/client_golang/) middleware for Echo | # Third-party middleware repositories Be careful when adding 3rd party middleware. Echo teams does not have time or manpower to guarantee safety and quality of middlewares in this list. | Repository | Description | |------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [oapi-codegen/oapi-codegen](https://github.com/oapi-codegen/oapi-codegen) | Automatically generate RESTful API documentation with [OpenAPI](https://swagger.io/specification/) Client and Server Code Generator | | [github.com/swaggo/echo-swagger](https://github.com/swaggo/echo-swagger) | Automatically generate RESTful API documentation with [Swagger](https://swagger.io/) 2.0. | | [github.com/ziflex/lecho](https://github.com/ziflex/lecho) | [Zerolog](https://github.com/rs/zerolog) logging library wrapper for Echo logger interface. | | [github.com/brpaz/echozap](https://github.com/brpaz/echozap) | Uber´s [Zap](https://github.com/uber-go/zap) logging library wrapper for Echo logger interface. | | [github.com/samber/slog-echo](https://github.com/samber/slog-echo) | Go [slog](https://pkg.go.dev/golang.org/x/exp/slog) logging library wrapper for Echo logger interface. | | [github.com/darkweak/souin/plugins/echo](https://github.com/darkweak/souin/tree/master/plugins/echo) | HTTP cache system based on [Souin](https://github.com/darkweak/souin) to automatically get your endpoints cached. It supports some distributed and non-distributed storage systems depending your needs. | | [github.com/mikestefanello/pagoda](https://github.com/mikestefanello/pagoda) | Rapid, easy full-stack web development starter kit built with Echo. | | [github.com/go-woo/protoc-gen-echo](https://github.com/go-woo/protoc-gen-echo) | ProtoBuf generate Echo server side code | Please send a PR to add your own library here. ## Contribute **Use issues for everything** - For a small change, just send a PR. - For bigger changes open an issue for discussion before sending a PR. - PR should have: - Test case - Documentation - Example (If it makes sense) - You can also contribute by: - Reporting issues - Suggesting new features or enhancements - Improve/fix documentation ## Credits - [Vishal Rana](https://github.com/vishr) (Author) - [Nitin Rana](https://github.com/nr17) (Consultant) - [Roland Lammel](https://github.com/lammel) (Maintainer) - [Martti T.](https://github.com/aldas) (Maintainer) - [Pablo Andres Fuente](https://github.com/pafuent) (Maintainer) - [Contributors](https://github.com/labstack/echo/graphs/contributors) ## License [MIT](https://github.com/labstack/echo/blob/master/LICENSE)