# 72sevenzy2/grouter architecture

> Architecture diagram of the GitHub repository 72sevenzy2/grouter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/72sevenzy2/grouter
- Repository: https://github.com/72sevenzy2/grouter

## Overview

Grouter is a Go HTTP router. Applications register routes and middleware, then pass the router to the standard HTTP server; incoming requests are matched against static or parameterized routes, wrapped in middleware, and dispatched to handlers with extracted parameters. The graph separates registration/grouping, matching and request context, and middleware integration. Middleware implementations live in a separately imported package; response behavior beyond the shown router code is not expanded. The README documents wildcard routes and middleware capabilities not all individually implemented in the excerpts.

Main entry points: [`grouter/router.go`](https://github.com/72sevenzy2/grouter/blob/main/grouter/router.go) (Router), [`grouter/handlers.go`](https://github.com/72sevenzy2/grouter/blob/main/grouter/handlers.go) (Route methods), [`grouter/group.go`](https://github.com/72sevenzy2/grouter/blob/main/grouter/group.go) (Route groups), [`grouter/group_handlers.go`](https://github.com/72sevenzy2/grouter/blob/main/grouter/group_handlers.go) (Group methods)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_registration["Route registration"]
  node_route_api["Route methods<br/>[handlers.go]"]
  node_groups["Route groups<br/>[group.go]"]
  node_group_methods["Group methods<br/>[group_handlers.go]"]
end

subgraph group_runtime["Request routing"]
  node_router["Router<br/>[router.go]"]
  node_route_store["Route tables<br/>[types.go]"]
  node_path_matching["Path matching<br/>[utils.go]"]
  node_request_context["Request parameters<br/>[types.go]"]
  node_error_pages["HTML error pages<br/>[template.go]"]
end

subgraph group_middleware["Middleware"]
  node_middleware_api["Middleware aliases"]
  node_middleware_chain["Middleware chain"]
  node_middleware_pkg["Middleware package"]
end

node_app(("Application"))
node_httpclient(("HTTP client"))
node_server["Go HTTP server"]
node_handler["Application handler"]

node_app -->|"registers routes"| node_route_api
node_route_api -->|"delegates to"| node_router
node_app -->|"creates groups"| node_groups
node_groups -->|"registers routes"| node_group_methods
node_group_methods -->|"delegates to"| node_router
node_router -->|"stores routes"| node_route_store
node_router -->|"serves HTTP"| node_server
node_httpclient -.->|"sends requests"| node_server
node_server -->|"dispatches requests"| node_router
node_router -->|"looks up routes"| node_route_store
node_router -->|"matches dynamic paths"| node_path_matching
node_router -->|"builds context"| node_request_context
node_router -->|"dispatches handler"| node_handler
node_app -->|"configures middleware"| node_middleware_api
node_middleware_api -->|"wraps middleware"| node_middleware_pkg
node_router -->|"applies middleware"| node_middleware_chain
node_middleware_chain -->|"wraps handler"| node_handler

click node_router "https://github.com/72sevenzy2/grouter/blob/main/grouter/router.go"
click node_route_api "https://github.com/72sevenzy2/grouter/blob/main/grouter/handlers.go"
click node_route_store "https://github.com/72sevenzy2/grouter/blob/main/core/types.go"
click node_groups "https://github.com/72sevenzy2/grouter/blob/main/grouter/group.go"
click node_group_methods "https://github.com/72sevenzy2/grouter/blob/main/grouter/group_handlers.go"
click node_path_matching "https://github.com/72sevenzy2/grouter/blob/main/grouter/utils.go"
click node_request_context "https://github.com/72sevenzy2/grouter/blob/main/core/types.go"
click node_middleware_api "https://github.com/72sevenzy2/grouter/blob/main/grouter/middleware_alias.go"
click node_middleware_chain "https://github.com/72sevenzy2/grouter/blob/main/grouter/middleware_alias.go"
click node_error_pages "https://github.com/72sevenzy2/grouter/blob/main/grouter/template.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_route_api,node_groups,node_group_methods,node_httpclient toneBlue
class node_router,node_route_store,node_path_matching,node_request_context,node_error_pages toneAmber
class node_middleware_api,node_middleware_chain,node_middleware_pkg,node_server,node_handler toneMint
class node_app toneIndigo
```

## Components

### Route registration

- [Route methods](https://github.com/72sevenzy2/grouter/blob/main/grouter/handlers.go): `grouter/handlers.go`
- [Route groups](https://github.com/72sevenzy2/grouter/blob/main/grouter/group.go): `grouter/group.go`
- [Group methods](https://github.com/72sevenzy2/grouter/blob/main/grouter/group_handlers.go): `grouter/group_handlers.go`

### Request routing

- [Router](https://github.com/72sevenzy2/grouter/blob/main/grouter/router.go): `grouter/router.go`
- [Route tables](https://github.com/72sevenzy2/grouter/blob/main/core/types.go): `core/types.go`
- [Path matching](https://github.com/72sevenzy2/grouter/blob/main/grouter/utils.go): `grouter/utils.go`
- [Request parameters](https://github.com/72sevenzy2/grouter/blob/main/core/types.go): `core/types.go`
- [HTML error pages](https://github.com/72sevenzy2/grouter/blob/main/grouter/template.go): `grouter/template.go`

### Middleware

- [Middleware aliases](https://github.com/72sevenzy2/grouter/blob/main/grouter/middleware_alias.go): `grouter/middleware_alias.go`
- [Middleware chain](https://github.com/72sevenzy2/grouter/blob/main/grouter/middleware_alias.go): `grouter/middleware_alias.go`
- **Middleware package**

### Other components

- **Application**
- **HTTP client**
- **Go HTTP server**
- **Application handler**

## Connections

- Application → Route methods: registers routes (evidence: `README.md`)
- Route methods → Router: delegates to (evidence: `grouter/handlers.go`)
- Application → Route groups: creates groups (evidence: `README.md`)
- Route groups → Group methods: registers routes (evidence: `grouter/group.go`)
- Group methods → Router: delegates to
- Router → Route tables: stores routes (evidence: `grouter/router.go`)
- Router → Go HTTP server: serves HTTP (evidence: `README.md`)
- HTTP client → Go HTTP server: sends requests
- Go HTTP server → Router: dispatches requests (evidence: `README.md`)
- Router → Route tables: looks up routes (evidence: `grouter/router.go`)
- Router → Path matching: matches dynamic paths (evidence: `grouter/router.go`)
- Router → Request parameters: builds context (evidence: `grouter/router.go`)
- Router → Application handler: dispatches handler (evidence: `grouter/router.go`)
- Application → Middleware aliases: configures middleware (evidence: `README.md`)
- Middleware aliases → Middleware package: wraps middleware (evidence: `grouter/middleware_alias.go`)
- Router → Middleware chain: applies middleware (evidence: `grouter/router.go`)
- Middleware chain → Application handler: wraps handler (evidence: `grouter/middleware_alias.go`)
