Middleware Architecture
ZeroStarter uses Hono’s middleware system for cross-cutting concerns. Middleware can be applied globally, to specific routes, or as router-level middleware.Global Middleware
Applied to all routes via wildcard pattern (index.ts:16-28):
CORS Configuration
The CORS middleware allows cross-origin requests from trusted origins:- origin: Comma-separated list from
HONO_TRUSTED_ORIGINSenvironment variable - allowHeaders: Accepts
content-typeandauthorizationheaders - allowMethods: Supports
GET,OPTIONS,POST,PUT - credentials: Enables cookies and authentication headers
- maxAge: Preflight cache duration (600 seconds)
Request Logger
Hono’s built-in logger middleware logs all requests and responses in development.Rate Limiting Middleware
ZeroStarter implements flexible rate limiting with IP, user, and API key support.Configuration Function
ThecreateRateLimiter function creates configurable rate limiters (middlewares/rate-limiter.ts:28-38):
Key Generation Strategy
Rate limit keys are generated with fallback priority (middlewares/rate-limiter.ts:7-19):
- User ID (if authenticated)
- API key (if provided)
- IP address (from headers)
- Random UUID (fallback)
Global Rate Limiter
Default IP-based rate limiting for unauthenticated requests (middlewares/rate-limiter.ts:40-43):
HONO_RATE_LIMIT: Maximum requests per window (default: 60)HONO_RATE_LIMIT_WINDOW_MS: Time window in milliseconds (default: 60000)
User-Specific Rate Limiting
Authenticated users get higher limits (middlewares/auth.ts:9-13):
Authentication Middleware
Protects routes by verifying Better Auth sessions (middlewares/auth.ts:15-26):
- Validates session using Better Auth
- Returns 401 if no valid session
- Sets
sessionanduserin context variables - Applies user-specific rate limiting
- Continues to next handler
Using in Routes
Apply to all routes in a router (routers/v1.ts:32):
Accessing Session Data
Retrieve authenticated user and session from context:Creating Custom Middleware
UsecreateMiddleware from Hono:
Middleware with Type Variables
Define custom context variables:Conditional Middleware
Apply middleware based on conditions:Middleware Execution Order
Middleware executes in the order defined:Error Handling in Middleware
Middleware errors are caught by the global error handler:Next Steps
- Validation - Define request/response schemas
- Routing - Learn about route structure