> ## Documentation Index
> Fetch the complete documentation index at: https://eo.utopy.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Router composition

> Apply Effect-aware options to routers, lazy routers, prefixes, and tags.

`effect-orpc` supports oRPC router composition patterns.

## Apply options to a router

```ts title="router.ts" theme={null}
const usersRouter = effectProcedure.router({
  list: effectProcedure.effect(function* () {
    return yield* UsersRepo.list();
  }),

  get: effectProcedure.input(z.object({ id: z.string() })).effect(function* ({
    input,
  }) {
    return yield* UsersRepo.findById(input.id);
  }),
});
```

## Prefix and tag a router

```ts title="prefix-and-tag.ts" theme={null}
export const apiRouter = effectProcedure.prefix("/api").tag("Users").router({
  users: usersRouter,
});
```

## Lazy routers

Use `.lazy(...)` for lazy-loaded routers.

```ts title="lazy.ts" theme={null}
export const router = effectProcedure.lazy(async () => ({
  default: await import("./users-router").then((module) => module.usersRouter),
}));
```

## Mix router leaves

Routers can contain standard oRPC procedures and Effect procedures.

```ts title="mixed.ts" theme={null}
import { os } from "@orpc/server";

export const router = {
  health: os.handler(() => "ok"),
  users: usersRouter,
};
```

## Next step

Mount a router in [Hono guide](/guides/hono) when you are ready for HTTP integration.
