echo

High performance, minimalist Go web framework

32,602 stars Go Markdown Skills API Spec #echo#go#http2#https
AI Prompts & Specs

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)
![GoDoc](https://pkg.go.dev/github.com/labstack/echo/v5)
![Go Report Card](https://goreportcard.com/report/github.com/labstack/echo)
![GitHub Workflow Status (with event)](https://github.com/labstack/echo/actions)
![Codecov](https://codecov.io/gh/labstack/echo)
![Forum](https://github.com/labstack/echo/discussions)
![Twitter](https://twitter.com/labstack)
![License](https://raw.githubusercontent.com/labstack/echo/master/LICENSE)

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

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 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 | 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

License

MIT