# Renderer

**Kind:** Type

**Source:** [`src/context.ts`](https://github.com/honojs/hono/blob/main/src/context.ts#L78)

Renderer type which can either be a ContextRenderer or DefaultRenderer.

`Renderer` represents a rendering callback accepted by the context system. It can be either a `ContextRenderer`, which receives context data, or a `DefaultRenderer`, which renders without context.

## Definition

```ts
ContextRenderer extends Function ? ContextRenderer : DefaultRenderer
```

## Diagram

```mermaid
graph LR
  Renderer[Renderer] --> ContextRenderer[ContextRenderer]
  Renderer --> DefaultRenderer[DefaultRenderer]
  ContextRenderer --> Context[Context data]
  DefaultRenderer --> Output[Rendered output]
  ContextRenderer --> Output
```

## Usage

```ts
import type { Renderer } from "./context";

const fallbackRenderer: Renderer = () => {
  return "No context available";
};

function registerRenderer(renderer: Renderer) {
  return renderer;
}

registerRenderer(fallbackRenderer);
```

## AI Coding Instructions

- Treat `Renderer` as a union of `ContextRenderer` and `DefaultRenderer`.
- Use a context-aware callback when rendering depends on context data.
- Use a default callback when rendering does not require context data.
- Avoid calling a `Renderer` directly unless the active renderer variant is known.
- Keep renderer return values compatible with the output expected by the surrounding context API.
