effect-orpc as a thin Effect-aware layer around oRPC.
It does not replace oRPC. It lets you keep oRPC’s routing, validation, contracts, middleware, and client surface while using Effect for implementation logic.
Core pieces
| Piece | Role |
|---|---|
eos | Default Effect-aware oRPC builder. |
.provide(layer) | Provides base Effect services to downstream middleware and handlers. |
.provide(tag, provider) | Builds a request-scoped service from oRPC context and input. |
.effect(handler) | Defines a procedure handler as an Effect generator. |
ORPCTaggedError | Defines yieldable Effect errors that map to oRPC errors. |
makeEffectORPC(runtime) | Uses a caller-owned ManagedRuntime instead of acquiring a layer per call. |
Builder-first flow
Most applications start by creating a reusable procedure builder:procedure.ts
users.ts
Runtime boundaries
Effect-native steps are batched into one runtime boundary, so Effect.runPromiseExit is ran only once if possible.one-boundary.ts
Default path vs guides
- The default path is framework-free:
eos,.provide(...),.effect(...), and tagged errors. - Guides cover integrations and non-default runtime concerns such as Hono, OpenTelemetry, the Node fiber context bridge, and testing.