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:
Setup development environment
make initRun all checks (lint, vet, race)
make checkRun specific tests
go test ./middleware/...
go test -race ./...Run benchmarks
make benchmarkCode 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








Echo
High performance, extensible, minimalist Go web framework.
* Official website
* Quick start
* Middlewares
Help and questions: Github 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
<div>
<a href="https://encore.dev" style="display: inline-flex; align-items: center; gap: 10px">
<img src="https://user-images.githubusercontent.com/78424526/214602214-52e0483a-b5fc-4d4c-b03e-0b7b23e012df.svg" height="28px" alt="encore icon"></img>
<b>Encore – the platform for building Go-based cloud backends</b>
</a>
</div>
<br/>
Click here for more information on sponsorship.
Guide
Supported Echo versions
- Latest major version of Echo is v5 as of 2026-01-18.
- See 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
// go get github.com/labstack/echo/{version}
go get github.com/labstack/echo/v5Latest version of Echo supports last four Go major releases and might work with
older versions.
Example
package mainimport (
"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 | JWT middleware |
| github.com/labstack/echo-contrib | casbin, gorilla/sessions, pprof) middlewares |
| github.com/labstack/echo-opentelemetry | OpenTelemetry middleware for tracing and metrics |
| github.com/labstack/echo-prometheus | Prometheus 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 | Automatically generate RESTful API documentation with OpenAPI Client and Server Code Generator |
| github.com/swaggo/echo-swagger | Automatically generate RESTful API documentation with Swagger 2.0. |
| github.com/ziflex/lecho | Zerolog logging library wrapper for Echo logger interface. |
| github.com/brpaz/echozap | Uber´s Zap logging library wrapper for Echo logger interface. |
| github.com/samber/slog-echo | Go slog logging library wrapper for Echo logger interface. |
| github.com/darkweak/souin/plugins/echo | HTTP cache system based on Souin to automatically get your endpoints cached. It supports some distributed and non-distributed storage systems depending your needs. |
| github.com/mikestefanello/pagoda | Rapid, easy full-stack web development starter kit built with Echo. |
| 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 (Author)
- Nitin Rana (Consultant)
- Roland Lammel (Maintainer)
- Martti T. (Maintainer)
- Pablo Andres Fuente (Maintainer)
- Contributors