A guide to writing idiomatic Effect code.
See the codeEffect best practices and patterns — https://www.effect.solutions
Living Document: Opinionated collection exploiting Cunningham's Law. Disagree? Open an issue
Curated Effect TypeScript patterns for common scenarios — error handling, services, layers, testing, and more. For humans and AI agents.
Website: Browse at effect.solutions
CLI: Access docs offline
bunx effect-solutions list # List all topics
bunx effect-solutions show http-clients # Show specific topic
bunx effect-solutions open-issue # Leave feedback
Error handling
import { Effect } from "effect"
Effect.gen(function* () {
const user = yield* findUser(id).pipe(
Effect.catchTag("NotFound", () => Effect.succeed(null))
)
})
HTTP client setup
import { Effect, HttpClient } from "effect"
import { FetchHttpClient } from "@effect/platform"
const program = Effect.gen(function* () {
const http = yield* HttpClient.HttpClient
const result = yield* http.get("/api/users")
})
program.pipe(
Effect.provide(FetchHttpClient.layer)
)
See effect.solutions for full patterns and rationale.
bun scripts/changeset-named.ts "description"See CONTRIBUTING.md for details and CLAUDE.md for development workflow.
bun run version (creates tag vX.Y.Z).Release workflow builds multi-arch CLI binaries and runs changeset publish to publish all packages to npm.effect-solutions - CLI for local docsMIT
TypeScript
97.5%
CSS
2.2%
A guide to writing idiomatic Effect code.
See the codeEffect best practices and patterns — https://www.effect.solutions
Living Document: Opinionated collection exploiting Cunningham's Law. Disagree? Open an issue
Curated Effect TypeScript patterns for common scenarios — error handling, services, layers, testing, and more. For humans and AI agents.
Website: Browse at effect.solutions
CLI: Access docs offline
bunx effect-solutions list # List all topics
bunx effect-solutions show http-clients # Show specific topic
bunx effect-solutions open-issue # Leave feedback
Error handling
import { Effect } from "effect"
Effect.gen(function* () {
const user = yield* findUser(id).pipe(
Effect.catchTag("NotFound", () => Effect.succeed(null))
)
})
HTTP client setup
import { Effect, HttpClient } from "effect"
import { FetchHttpClient } from "@effect/platform"
const program = Effect.gen(function* () {
const http = yield* HttpClient.HttpClient
const result = yield* http.get("/api/users")
})
program.pipe(
Effect.provide(FetchHttpClient.layer)
)
See effect.solutions for full patterns and rationale.
bun scripts/changeset-named.ts "description"See CONTRIBUTING.md for details and CLAUDE.md for development workflow.
bun run version (creates tag vX.Y.Z).Release workflow builds multi-arch CLI binaries and runs changeset publish to publish all packages to npm.effect-solutions - CLI for local docsMIT
TypeScript
97.5%
CSS
2.2%