> ## 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.

# EffectBuilder

> Reference for the Effect-aware builder surface.

`EffectBuilder` wraps an oRPC builder with Effect-aware methods while preserving the standard oRPC builder surface.

## Definition flow

```ts title="flow.ts" theme={null}
const procedure = eos
  .$context<RequestContext>()
  .provide(AppLive)
  .errors({ UserNotFoundError })
  .input(GetUserInput)
  .output(User)
  .use(authMiddleware)
  .traced("users.get")
  .effect(function* ({ input }) {
    return yield* UsersRepo.findById(input.id);
  });
```

## Callback shapes

Effect-native callbacks accepted by `.effect(...)`, `.provide(...)`, `.provideOptional(...)`, `.use(...)`, and `.middleware(...)` can be generator functions or callbacks that return an `Effect`.

```ts title="callback-shapes.ts" theme={null}
effectProcedure.effect(function* () {
  return yield* UsersRepo.list();
});

effectProcedure.effect(
  Effect.fn("users.list")(function* () {
    return yield* UsersRepo.list();
  }),
);

effectProcedure.effect(() =>
  Effect.gen(function* () {
    return yield* UsersRepo.list();
  }),
);
```

## Method summary

| Category      | Methods                                                 |
| ------------- | ------------------------------------------------------- |
| Configuration | `.$config`, `.$context`, `.$meta`, `.$route`, `.$input` |
| Schemas       | `.input`, `.output`                                     |
| Errors        | `.errors`                                               |
| Services      | `.provide`, `.provideOptional`                          |
| Middleware    | `.use`, `.middleware`                                   |
| Handlers      | `.handler`, `.effect`                                   |
| Telemetry     | `.traced`                                               |
| Routers       | `.prefix`, `.tag`, `.router`, `.lazy`                   |

## Decorated procedures

Calling `.effect(...)` returns an `EffectDecoratedProcedure`, which keeps procedure helpers such as:

* `.errors(...)`
* `.meta(...)`
* `.route(...)`
* `.provide(...)`
* `.provideOptional(...)`
* `.use(...)`
* `.callable(...)`
* `.actionable(...)`

## See also

* [Effect procedures](/capabilities/effect-procedures)
* [Middleware](/capabilities/middleware)
