- Type the Hono app with environment bindings: `new Hono<{ Bindings: Env; Variables: { user: User } }>()` for typed `c.env` and `c.get()`/`c.set()`.
- Use `@hono/zod-validator` for typed request validation: `zValidator('json', schema)` — the handler receives the validated and inferred type automatically.
- Define route schemas with Zod and let Hono infer handler parameter types from the validator middleware chain.
- Chain typed middleware with `.use()` to accumulate context types: each middleware adds variables via `c.set('key', value)` that downstream handlers access type-safely via `c.get('key')`.
- Use `app.route('/api', subApp)` with typed sub-apps to compose modular route groups with their own `Hono<Env>` instances.
- Type middleware with `createMiddleware<{ Variables: { user: User } }>()` so downstream handlers get typed `c.get('user')` access.
- Use `hc<AppType>('http://...')` for end-to-end type-safe RPC client generation from your Hono routes.
- Define shared response types and use `c.json<ResponseType>(data, status)` for compile-time response shape enforcement.