mrkeyoor.com_
Fri 02 Oct 15:36 UTC
Dev Toolsevaluationupdated 02 Oct 2026

effect review

Effect is a TypeScript library for typed failures, dependency management, concurrency, scheduling, tracing, and schema validation. It gives large applications one execution model for work that would otherwise be split across promises, exceptions, retry helpers, and cleanup code.

Verdict

Our Effect run built in 112 seconds and passed 13,213 tests, but 33 tests failed after repeated 5,000 ms timeouts, so the codebase is substantial and the fresh-container result was not clean. Use Effect when a TypeScript team wants typed failures, managed resources, and concurrency under one model, and will invest in teaching that model. Choose a narrower library when you only need Result values or event streams.

We ran it

Lab card: what happened when we ran effectScreenshot of effect (effect.website)
Install✓ · 106s1069 packages · 1565 MB
Build✓ · 112s
Tests✗ · 500sran, no count parsed
Repo2591 files~834,039 lines of source · 43.9 MB · 7 CI workflows

Answers from our run

Does effect build from source?

Dependencies installed in 106 seconds (1069 packages), and the build succeeded in 112 seconds. We cloned commit 6389d9a into a clean Debian container with 3 CPUs and no project-specific setup.

Do effect's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use effect?

Teams that cannot enable TypeScript's strict flag: the README makes strict type checking a requirement.

What are the alternatives to effect?

fp-ts, neverthrow, RxJS. Our Effect run built in 112 seconds and passed 13,213 tests, but 33 tests failed after repeated 5,000 ms timeouts, so the codebase is substantial and the fresh-container result was not clean.

Setup3/5Build passed, but 1,069 packages and 1,565 MB is a lot
Docs4/5Requirements, stability tiers, LTS terms, and packages are explicit
Community5/516,418 stars and same-day issue and pull request activity
Maturity4/5Version 4.0.0 is LTS, though our full suite failed

Who it’s for

TypeScript teams building services with cancellation, retries, resource cleanup, and several external dependencies.
Library authors who want errors and required services represented in types.
Teams prepared to learn Effect as a programming model, rather than add one helper at a time.
Projects that can standardize on strict TypeScript 5.9 or newer.

Who it’s NOT for

Teams that cannot enable TypeScript's strict flag: the README makes strict type checking a requirement.
Small applications that only need typed success and failure values: our install pulled 1,069 packages and occupied 1,565 MB for the full monorepo.
Release processes that require a green suite in a fresh container: our run ended with 33 failed tests across 5 files.
Projects pinned to an older toolchain: Effect 4 requires TypeScript 5.9 or newer, and the Node SQLite package requires Node 22.16 or newer.
Teams expecting every API to follow major-version stability: the README permits unstable APIs to change in minor releases and experimental APIs in patch releases.

Setup reality

Our fresh Debian sandbox installed commit 6389d9a in 106 seconds. It pulled 1,069 packages and occupied 1,565 MB. The build succeeded in 112 seconds, but the test command failed after 500 seconds with 5 failed files, 33 failed tests, and repeated 5,000 ms timeouts.

The core library needs no account or secret. Your project must use TypeScript 5.9 or newer with strict enabled, then configure the services and integration packages your application uses. Database, AI, and telemetry adapters bring their own credentials and infrastructure.

Node 18 is the general runtime floor, but individual integrations can demand more. The README names Node 22.16 for @effect/sql-sqlite-node. Effect 4 is the LTS line, while unstable and experimental APIs have looser compatibility promises.

Effect turns failures and dependencies into part of the program

Effect asks you to stop treating exceptions, retries, cancellation, and cleanup as separate concerns. An Effect value records what it can produce, how it can fail, and which services it needs. The runtime then coordinates that work. For a service that calls a database, a remote API, and a queue, this can make control flow easier to inspect than nested try blocks and hand-built retry loops. It also changes how your team writes TypeScript.

The repository covers much more than its core package. Its synchronized 4.0.0 release includes platform adapters for Node, Bun, Deno, and browsers, plus SQL clients, AI providers, OpenTelemetry, testing helpers, and schema tooling. That shared model is the appeal: a PostgreSQL layer and an Anthropic layer can use the same service, error, scope, and tracing concepts. It is also the commitment. Effect is closer to an application foundation than a utility you sprinkle into two files.

Version 4.0.0 has an LTS promise and strict entry requirements

Effect 4.0.0 was released on October 1, 2026. The README calls the 4.x line LTS and promises at least 3 years of support, followed by defined bug-fix and security-fix windows around the next major release. Stable APIs reserve breaking changes for majors. Unstable APIs may change in a minor release, while experimental ones may change in a patch, so package choice matters as much as the headline LTS label.

The compiler requirements are equally direct. You need TypeScript 5.9 or newer and must enable strict. Node 18 is the general minimum, although integrations can set a higher floor. The documented example is @effect/sql-sqlite-node, which needs Node 22.16 or newer. A team can trial the core with npm install effect, but a real adoption should begin by checking every intended package against the runtimes already deployed.

What happened when we ran it

Our sandbox installed commit 6389d9a in 106 seconds, adding 1,069 packages and using 1,565 MB on disk. The checkout itself contained 2,591 files, roughly 834,039 lines of source, and occupied 43.9 MB. The build completed successfully in 112 seconds. We used a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, Node 22, and no secrets.

The test step failed after 500 seconds. Vitest reported 452 passing files, 5 failed files, and 1 skipped file. At test level, 13,213 passed, 33 failed, 10 were expected to fail, and 60 were skipped out of 13,316. The log tail repeatedly reports Test timed out in 5000ms, then exits with code 1. It does not identify a cause in the supplied lines, so blaming the container, the tests, or a missing service would be speculation.

Those numbers give a mixed but useful result. A 112-second successful build across this monorepo is meaningful, and 13,213 passing tests show broad exercised behavior. The 33 failures still block a clean release gate. A team evaluating Effect should rerun the failing files on its own CI hardware and inspect the full logs before deciding whether the 5-second limits expose slow infrastructure, nondeterministic tests, or product defects. Our log tail cannot make that distinction.

The 1,565 MB install belongs in the adoption budget

The application dependency may be smaller than the development monorepo we measured, but contributing to Effect or validating the repository means carrying 1,069 installed packages. Seven CI workflow files show that upstream automation exists. There is no Dockerfile, so the repository does not hand contributors a canonical container matching our Debian setup. Tests are distributed through the monorepo rather than collected in a root tests directory.

Learning cost will usually exceed install cost. Typed error channels, service layers, scopes, fibers, schedules, and schemas reinforce one another, which is why adopting a single concept rarely captures the whole benefit. That cohesion pays off in services where cancellation and cleanup are everyday problems. In a small request handler with one database call, the same vocabulary can obscure code for coworkers who know ordinary promises but have never used Effect.

October activity shows fast maintenance and live edge cases

GitHub recorded 16,418 stars, a push on October 2, 2026, and 301 open issues and pull requests combined. A separate issue search found 177 open issues. The dates matter more than the size of the queue: maintainers and contributors were updating reports and pull requests on the day of this review, one day after the 4.0.0 release. This is active software with a busy public workbench.

Fresh 4.0.0 reports also show where careful upgrades matter. Issue 8673 documents an uncaught Node socket error during re-entrant reader teardown. Issue 8635 reports a Bun worker finalizer calling a missing close() method. Both include reproductions, and issue 8673 already had a linked fix pull request when checked. They do not make Effect unsafe as a whole. They do argue for testing the exact runtime adapters and shutdown paths your service uses.

Adopt the model deliberately, or choose a smaller tool

Effect earns its place when a team repeatedly solves typed failure, dependency wiring, cancellation, resource lifetime, and observability in the same TypeScript services. The package family then gives those problems a common grammar. The active October 2026 maintenance and stated LTS terms support a serious evaluation, while the failed sandbox suite says your own CI trial should remain a release condition.

If the immediate problem is only typed errors, neverthrow asks far less of the codebase. fp-ts fits teams that want functional abstractions without Effect's runtime, and RxJS remains the more direct choice for observable event streams. Effect is the pick when those narrower boundaries have already started leaking into one another. Budget for training, pin the stability tier you can tolerate, and make the 33 failures we saw a question to resolve before rollout.

Alternatives

ProjectWhat it isPick it when
fp-tsA functional programming library built around composable TypeScript types and functions.pick this instead when you want functional primitives without adopting Effect's runtime and service system.
neverthrowA focused Result type for typed success and failure in TypeScript.pick this instead when typed errors are the job and scheduling, services, and structured concurrency are not.
RxJSA mature observable library for composing asynchronous event streams.pick this instead when streams and event composition are central, and you do not need Effect's full application model.

What people are saying

  1. [github-trending] Effect-TS/effect
  2. [lobsters] Keep if clauses side-effect free
  3. [hackernews] The Effect of CRTs on Pixel Art (2024)
  4. [mastodon-trends] Naomi Klein: ‘Extreme wealth has a deranging effect. It turns you into a supremacist’
  5. [hackernews] The Waymo effect: how AI is quietly making research less collaborative
  6. [hackernews] Uber shuts operations in Nigeria and Uganda with immediate effect

Sources

  1. Effect README
  2. Effect 4.0.0 release
  3. Effect issue 8673: NodeSocket re-entrant teardown
  4. Effect issue 8635: Bun worker finalizer

More dev tools reviews

touchHLE · SwitchHosts · Duo-animation · DuoLikeAnimation · team-Omzo · lid-plane · the whole board →