This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
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.
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 golintmake vet- Run go vetmake test- Run short testsmake race- Run tests with race detectormake benchmark- Run benchmarks
Example commands for development:
# 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 benchmarkEcho Instance (echo.go)
- The
Echostruct 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
Contextinterface 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.
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.gowith support for custom binders
Error Handling
- Centralized error handling via
HTTPErrorHandler - Automatic panic recovery with stack traces
- 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
- Go code uses tabs for indentation (per .editorconfig)
- Follows standard Go conventions and formatting
- Uses gofmt, golint, and staticcheck for code quality
- Standard Go testing with
testingpackage - Tests include unit tests, integration tests, and benchmarks
- Race condition testing is required (
make race) - Test files follow
*_test.gonaming convention