Packages

@effect/tsgo

0.56.0 · 21 Oct 2026MIT587.3k / weekRepositoryHomepagenpmAtom feed

125 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.

  1. 0.56.x · latest line
  2. 0.56.0

    21 Oct 2026
    • 97d3c56: Track the typescript@beta dist-tag alongside typescript@latest and typescript@next. repoctl upstream update now resolves the beta tag into upstream.json, so the TypeScript beta compiler (currently 7.1.0-beta) is built, tested in CI under the beta channel, and shipped with the platform packages.

    • eb044ca: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 28534d7609062699a68b1b66e2367f8d95dbf290, update the TypeScript beta tag to typescript@beta, and update the TypeScript latest tag to typescript@latest.

  3. 0.55.x
  4. 0.55.0

    20 Oct 2026
    • d53a707: Add the opt-in preferEffectString diagnostic in effectNative for native String method invocations. It suggests 32 effect/String counterparts, including trimLeft to String.trimStart and trimRight to String.trimEnd.

      Each suggestion explains typing or runtime differences. For example, email.indexOf("@") suggests String.indexOf, which returns Option with None replacing -1.

      The rule defaults to off and the effect-native preset enables it as a warning. Both Effect v3 and v4 are supported. Only suppression quick fixes are available.

  5. 0.54.x
  6. 0.54.1

    20 Oct 2026
    • 70bb791: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 5237fd46890956e4bb8177a1a05dcd69e4166560, and update the TypeScript latest tag to typescript@latest. Refresh the Oxlint configuration schema from the selected package.

  7. 0.54.0

    19 Oct 2026
    • e00f33c: Add the schemaClassObjectLiteral diagnostic. It warns when an object literal is checked as a Schema class instance. A plain object has no class prototype, so instanceof, class methods, and Schema encoding fail at runtime. A Schema brand does not help, because a spread copies the brand property.

      class User extends Schema.Class<User, { readonly brand: unique symbol }>("User")({ name: Schema.String }) {}
      
      const copy: User = { ...user } // warning: build it with User.make({ ...user })
      const renamed = User.make({ ...user, name: "b" }) // ok

      In Effect v4, the rule skips objects nested inside a Schema constructor call, such as Parent.make({ child: { ...child } }), because v4 builds the nested class instance from the plain object.

  8. 0.53.x
  9. 0.53.5

    19 Oct 2026
    • c83ee4d: runEffectInsideEffect now reports Effect.runSyncExit and Effect.runPromiseExit, the same as Effect.runSync and Effect.runPromise. The quick fix rewrites them to Effect.runSyncExitWith and Effect.runPromiseExitWith in Effect v4, and to Runtime.runSyncExit and Runtime.runPromiseExit in Effect v3.

      export const nested = Effect.gen(function*() {
        yield* Effect.void
        setTimeout(() => {
          Effect.runPromiseExit(child)
          // ^- `Effect.runPromiseExit` is called inside an Effect with a separate services invocation.
        }, 0)
      })
    • de42db0: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 5237fd46890956e4bb8177a1a05dcd69e4166560, and update the TypeScript latest tag to typescript@latest.

  10. 0.53.4

    17 Oct 2026
  11. 0.53.3

    16 Oct 2026
    • 1ab5264: effect-tsgo diagnostics now reports a diagnostic's related locations. They used to be dropped in every format, so missingEffectContext never showed which layer could provide the missing service and apiStabilityLeak never showed where the unstable declaration lives.

      With --format json, each diagnostic that has related locations gets a relatedInformation array. Each entry has the same location fields as the diagnostic, plus its own code and message. Diagnostics without related locations are unchanged.

      {
        "line": 23,
        "column": 3,
        "code": 377004,
        "name": "missingEffectContext",
        "message": "This Effect requires a service that is missing from the expected Effect context: `Db | Fs`.",
        "relatedInformation": [
          {
            "file": ".../src/index.ts",
            "start": 662,
            "length": 14,
            "line": 22,
            "column": 3,
            "endLine": 22,
            "endColumn": 17,
            "code": 377059,
            "message": "Adjusting this layer composition could provide the missing service."
          }
        ]
      }

      With --format pretty, the related locations are printed under the diagnostic, each with its own code snippet, as tsc --pretty does:

      src/index.ts:23:3 - error effect(missingEffectContext): This Effect requires a service that is missing from the expected Effect context: `Db | Fs`.
      
      23   Effect.runPromise
           ~~~~~~~~~~~~~~~~~
      
        src/index.ts:22:3 - Adjusting this layer composition could provide the missing service.
          22   Effect.provide(live),
               ~~~~~~~~~~~~~~

      The ~ markers in pretty output are also aligned again on lines 10 and above. They used to sit one column to the left of the code.

    • 4672ba1: Make globalDate and globalDateInEffect do less work per file. Their shared walker used to look up the Effect context flags of every node it visited, although only call expressions (Date.now()) and new expressions (new Date()) can produce a diagnostic. It now looks up the flags only on those two node kinds, like globalFetch, globalConsole, globalTimers, globalRandom and cryptoRandomUUID already do.

      Reported diagnostics are unchanged.

    • b5df4e9: Speed up apiStabilityLeak by reusing one stability analysis per file.

      The rule used to allocate a fresh analysis, with its maps and work queues, for every export of a file. It now keeps one analysis per file and resets it before each export. The reset analysis behaves exactly like a fresh one, so the reported diagnostics are unchanged. A published surface that a later export reads from the shared cache is no longer queued for publication again, and a published surface without retained findings no longer allocates a findings map.

      On packages/effect of effect 4.0.5 with every rule enabled, the rule allocates 252 MB → 140 MB.

  12. 0.53.2

    16 Oct 2026
    • c75c219: Make apiStabilityLeak allocate less. The rule used to create an empty findings map for every type, signature and symbol it inspected, and to copy the stored findings into a new map every time it re-checked an unresolved result. Most results never get a finding, and most re-checks add nothing. A result's map is now created when it gets its first finding, and a re-check that adds nothing keeps the stored map instead of copying it.

      For example, on the Effect monorepo the rule allocated 605 MB in 5.3 M objects before and 496 MB in 3.4 M objects after. Its CPU went from 3.4 s to 3.2 s.

      Reported diagnostics are unchanged.

    • 0076e24: Make apiStabilityLeak faster on namespace exports. The rule checks each member of a namespace export in one shared analysis, and every member used to re-check every unresolved result that earlier members left behind. A namespace with thousands of members did millions of repeated checks. Each member now re-checks only the results its own check reached.

      For example, on the Effect monorepo the Generated namespace export of @effect/ai-openai has 3,603 members. Across the whole repository the rule used 22.8 s of CPU before and 3.4 s after.

      Reported diagnostics are unchanged.

    • 410f21e: Rules now read the type the checker computed for an expression while it checked the file, instead of asking the checker again afterwards. Asking again repeated work, such as flow analysis, and in a few cases gave a different type than the check used. For example, a return literal checked while its enclosing generic call was still resolving:

      export const takeWhileDefined = dual(2, <A>(self: Iterable<A>, f: (input: A) => A | undefined) => ({
        [Symbol.iterator]() {
          const iterator = self[Symbol.iterator]()
          return {
            next() {
              const result = iterator.next()
              if (result.done) {
                // the check typed this as { done: boolean; value: undefined }
                // asking again gave { done: true; value: undefined }
                return { done: true, value: undefined }
              }
              return { done: false, value: f(result.value) }
            }
          }
        }
      }))

      Rules now see { done: boolean; value: undefined }, the type the rest of the check is based on.

  13. 0.53.1

    15 Oct 2026
    • 06f7842: Stop experimentalApiUsage and unstableApiUsage from causing TS2589 and follow-on type errors in generic calls such as Match.when({ kind: "A0" }, ...) over a wide union.

      When a generic call infers a property back to the object literal, the rules look up the type the literal would get without its own inferences. They used to resolve the call again with inference blocked, which could instantiate types the original check never built. They now replay the checker's type-argument inference on the signature it already resolved and leave out the literal's argument, so return type inferences, inferences from the other arguments, defaults, and constraints apply as before. When that type has no matching property, the rules use the type parameters' constraints.

      These cases are now reported too:

    • f4b49a4: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 9eedcb0dd7257f8a1a175adbef28f3b6d3492d7a, and update the TypeScript latest tag to typescript@latest.

  14. 0.53.0

    14 Oct 2026
    • 13a46c9: The deterministicKeys rule and the key completions now compute a key for files without a package.json, or whose nearest package.json has no name. The key is built as usual, but without the package name. The sub-directory segment is relative to the package.json directory if one is found, otherwise to the tsconfig.json directory, otherwise to the program's common source directory.

      Projects that enabled deterministicKeys without a package.json will now see reports. This differs from the upstream @effect/language-service, which skips these files.

      {
        "name": "@effect/language-service",
        "keyPatterns": [{ "target": "service", "pattern": "default" }]
      }
      // src/services/AuthService.ts, no package.json, tsconfig.json at the project root
      // reports: the expected key is `services/AuthService/MyService`
      export class MyService extends Context.Service<MyService, {}>()("MyService") {}
    • d8c489b: Add errorPayloadShadowsName to detect inline name payload fields on Effect error classes. For example, Data.TaggedError("ToolNotFound")<{ name: string }> copies the payload's name onto the error instance and hides the error type in logs. Rename the field to toolName. The rule inspects inline payloads only and allows a field whose value is the literal the error already uses as its name.

    • 13a46c9: Add an "identifier" pattern to keyPatterns for the deterministicKeys rule. With it, the expected key is the class name alone.

      {
        "name": "@effect/language-service",
        "keyPatterns": [{ "target": "error", "pattern": "identifier" }]
      }
      // reports: the expected key is `KeybindingsConfigError`
      export class KeybindingsConfigError extends Data.TaggedError("KeybindingsConfigParseError")<{}> {}
  15. 0.52.x
  16. 0.52.0

    13 Oct 2026
    • removed

      7450a52: Remove the debug plugin option and the debug-only Flows group from the document outline.

    • 3e4a55d: Route Effect contextual-type queries through TypeParser.GetContextualType and enforce the wrapper with customlint. For example, use tp.GetContextualType(node, checker.ContextFlagsNone) instead of the checker method. Query behavior stays unchanged, with one place to add contextual-type safety guards in future changes.

    • 0269634: Add effectSleepZeroToYieldNow, a style suggestion with a quick fix for zero-duration Effect.sleep calls.

      For example, Effect.sleep(0) becomes Effect.yieldNow() in Effect v3 and Effect.yieldNow in Effect v4. The rule also recognizes safe zero-duration strings, tuples, and Duration constructors. The replacement yields through the fiber scheduler instead of the Clock service.

  17. 0.51.x
  18. 0.51.1

    7 Oct 2026
  19. 0.51.0

    7 Oct 2026
    • 9ca6ea2: Add related declaration locations to apiStabilityLeak diagnostics. For example, when a stable export exposes an experimental type, the diagnostic on the export now includes a child pointing to the experimental type's declaration, including declarations in other files.

    • caee22f: Fix apiStabilityLeak to ignore inherited bases whose public members are all optional and explicitly stability-tagged, including bases reached through augmentations and superclass factories. Direct properties and parameters typed as those bases remain checked. Exclude @internal properties and methods from the public surface throughout the leak check.

  20. 0.50.x
  21. 0.50.0

    6 Oct 2026
    • 69c8ce5: Add the opt-in apiStabilityLeak diagnostic for Effect v4 package maintainers.
      It reports exports whose public types, parameters, or return values expose a
      less stable API: stable exports must not expose unstable or experimental types,
      and unstable exports must not expose experimental types. Untagged exports are
      treated as stable; experimental exports impose no restriction.

      For example, export interface StableApi { value: ExperimentalType } reports
      a leak when ExperimentalType has an @stability experimental tag. Public
      members, generic arguments, inferred types, and re-exports are checked without
      recursively instantiating types.

      The rule is off by default and excluded from the recommended, strict, and
      correctness presets. Enable the new maintainers preset to report it as a
      warning, or configure apiStabilityLeak directly. Declared stability lookups are
      shared with the existing unstable and experimental API usage diagnostics.

  22. 0.49.x
  23. 0.49.0

    6 Oct 2026
    • 75e6ca5: Migrate compiler integrations to the current TypeScript path and configuration APIs, and refresh the TypeScript patch stack for the new upstream snapshot. Keep TypeScript 7.0.2 supported through adapters for the legacy typescript-go provider.

      For example, plugin option and diagnostic severity resolution now accept rooted source and config file paths directly, while the legacy shims adapt those calls to TypeScript 7.0.2. Preserve Effect options through upstream option cloning and comparison, and fix include patterns for files in filesystem roots.

      Keep the Nix compiler source pin, lock file, and vendor hash synchronized with the updated snapshot, and apply Git binary compiler patches during Nix builds. Preserve the original TypeScript 7.0.2 provider shim APIs for tsgolint, with modern API adapters confined to the canonical shim facade.

  24. 0.48.x
  25. 0.48.1

    5 Oct 2026
    • c964cca: Fix unstableApiUsage and experimentalApiUsage naming overloaded (dual) exports by module, which prevented allowedUnstableApis / allowedExperimentalApis from allowing them per export.

      A dual export whose call signatures carry their own @stability tag — for example effect/http/HttpClientRequest#bodyText — was reported under the bare module name (effect/http/HttpClientRequest) because the selected call signature is not the module export. An allow-list entry for effect/http/HttpClientRequest#bodyText therefore never matched, and the only way to allow the use was a whole-module entry.

      The reported name now resolves to the export that owns the selected overload signature, matching the README's package/module#exportName form:

      import { HttpClientRequest } from "effect/http"
      
      export const request = HttpClientRequest.post("http://x").pipe(
        HttpClientRequest.setHeader("a", "b"),
        HttpClientRequest.bodyText("{}", "application/json")
      )

      With:

      "allowedUnstableApis": [
        "effect/http/HttpClientRequest#post",
        "effect/http/HttpClientRequest#setHeader",
        "effect/http/HttpClientRequest#bodyText"
      ]

      all three uses are allowed, and any unlisted dual export still warns under package/module#exportName.

  26. 0.48.0

    2 Oct 2026
    • a954eb5: Add allowedUnstableApis and allowedExperimentalApis to selectively allow unstable or experimental declaration modules or exported APIs. For example, effect/http/HttpClient allows the entire module, while effect/http/HttpClient#get allows only its exported get API. Both options support per-file overrides, and both diagnostics display the declaration-based name.

    • 0900778: Build packaged TypeScript compilers without embedded standard libraries so editor go-to-definition opens real library files. Ship matching lib.*.d.ts files beside each versioned compiler and the latest lib/tsc alias, keeping diagnostics and get-exe-path working when running the packaged executable directly.

  27. 0.47.x
  28. 0.47.2

    30 Sep 2026
    • 536f83a: Fix a panic in unstableApiUsage and experimentalApiUsage on the default of a dynamically imported export = or JSON module.

    • bddb623: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 0681ef7fa3a2378ccf49645b6d5b7463bdca74bb, and update the TypeScript latest tag to typescript@latest.

  29. 0.47.1

    30 Sep 2026
    • d4f19b3: Allow effect-tsgo patch to run without the deprecated --force flag.

  30. 0.47.0

    29 Sep 2026
    • b67ef81: Update the Effect v4 integration to 4.0.0-rc.118 and use its public module paths. Namespace auto-imports for nested modules now resolve to paths such as effect/cli/Prompt.

    • 66668e2: Add the experimentalApiUsage and unstableApiUsage diagnostics for APIs marked with @stability experimental or @stability unstable. Both rules warn by default. For example, a reference to an unstable API now reports that breaking changes may happen between versions.

    • 8067475: Fix getExePath rejecting the schema version shipped by platform packages.

      Discover installed Oxlint musl bindings without rejecting them before component selection, so TypeScript-only commands work when Oxlint is installed on Alpine Linux. Report unsupported Oxlint replacements during patch preparation instead, allowing --skip-missing and restoring original binaries with unpatch.

  31. 0.46.x
  32. 0.46.1

    26 Sep 2026
    • 09644ee: effect-tsgo diagnostics now reports files it skipped because their tsconfig does not enable the @effect/language-service plugin, instead of only printing Checked 0 files out of N files. The JSON summary gains a matching filesWithoutPlugin count.

      Checked 0 files out of 8 files.
      Skipped 8 files because their tsconfig does not enable the @effect/language-service plugin.
      0 errors, 0 warnings and 0 messages.
    • dfa24e8: Fix effectFnOpportunity conversions to preserve enclosing expressions, sibling declarations, comments, literal spelling, and source formatting. Avoid suggesting conversions for function declarations referenced before their declaration.

      Wrap non-call pipe arguments in unary callbacks so they do not receive the converted function's arguments. For example, .pipe(Effect.ignore) becomes an Effect.fn pipeable _ => Effect.ignore(_), while factory calls such as Effect.map(f) are retained.

    • 8d89b43: Deduplicate strictBooleanExpressions diagnostics when multiple union members display the same type name.

  33. 0.46.0

    25 Sep 2026
    • 6db6fa6: Add the catchIfTagToCatchTag diagnostic and quick fix for replacing direct _tag equality predicates in Effect.catchIf with Effect.catchTag.

    • ae1ed02: Add the v4-only catchRefailToTapError diagnostic. It suggests Effect.tapError when an Effect.catch handler sequences an effect with Effect.andThen or a zero-argument Effect.flatMap callback and then fails with the original, unmodified error. Generator handlers and selective catches are excluded.

    • 437b17e: Retain the latest three stable Oxlint releases and the Oxlint runtimes required by the latest three stable Vite+ releases, including their compiler dependencies. Add versioned compatibility profiles so CI tests every distinct retained runtime pair.

      The refreshed upstream metadata supports Oxlint 1.77.0, 1.79.0, 1.80.0, 1.81.0, and 1.82.0, covering Vite+ 0.2.9, 0.3.0, and 0.3.1, and advances TypeScript next to 7.1.0-dev.20260911.1.

  34. 0.45.x
  35. 0.45.0

    10 Sep 2026
    • 066c4b0: Add the opt-in schemaSync diagnostic to prefer Effect-based Schema decoding and encoding over decodeSync, decodeUnknownSync, encodeSync, and encodeUnknownSync in any context. It recommends the corresponding Effect v3 or v4 method and is enabled by the effect-native preset.

    • bc87c9f: Update the TypeScript next tag to typescript@next, which ships typescript-go commit f3b04fe05642d53b4ff126a4af05fe2587b43748, and update the TypeScript latest tag to typescript@latest.

  36. 0.44.x
  37. 0.44.0

    9 Sep 2026
    • a64e17d: Add obsoleteMatchImport diagnostic (TS377127) to warn when importing @effect/match in projects targeting Effect v4. In Effect v4, pattern matching is built directly into effect (import { Match } from "effect" or import * as Match from "effect/Match").

    • 63331b6: Add obsoleteSchemaImport diagnostic (TS377128) to warn when importing @effect/schema or @effect/schema/* in projects targeting Effect v4. In Effect v4, Schema is built directly into effect (import { Schema } from "effect" or import * as Schema from "effect/Schema").

    • 29733f1: Add the timeoutCatchTagToTimeoutOrElse diagnostic and quick fixes for Effect v4. Suggest Effect.timeoutOrElse for Effect.timeout followed by Effect.catchTag("TimeoutError", ...), and Effect.timeoutOption for the corresponding Some/None pattern. Only suggest a rewrite when the input error channel excludes TimeoutError and the handler does not use the caught error.

  38. 0.43.x
  39. 0.43.0

    8 Sep 2026
    • 956b8d6: Extend nodeBuiltinImport to recommend Effect-native alternatives for console, timers, timers/promises, stream, stream/promises, and stream/web, including their node: forms.

      For Effect v4, also flag crypto and node:crypto imports and recommend Crypto from effect. For example, import { randomUUID } from "node:crypto" is now diagnosed; use the Crypto service's randomUUIDv4 effect instead. Effect v3 crypto imports remain allowed because that version has no corresponding Crypto service.

      Correct the Effect v4 child_process recommendation to point to effect/unstable/process. The rule remains disabled by default; configure nodeBuiltinImport with error severity to prohibit covered imports.

  40. 0.42.x
  41. 0.42.0

    8 Sep 2026
    • 7565750: Add the matchEffectToMapBoth style diagnostic and quick fix for replacing Effect.matchEffect handlers that return Effect.fail and Effect.succeed with Effect.mapBoth.

    • a09feae: Add the catchAllTagDispatchToCatchTag style diagnostic and quick fix for replacing manual tagged-error dispatch with Effect.catchTag or Effect.catchTags.

    • 2d501a2: Add the provideLayerSucceedToProvideService diagnostic and quick fix for replacing inline Layer.succeed and Layer.effect provision with direct service provision.

  42. 0.41.x
  43. 0.41.0

    4 Sep 2026
    • removed

      d3efa70: Remove the AST location parameter from type-only TypeParser operations. Effect, Layer, Stream, Schema, service, Context.Tag, Scope, and related type predicates now derive instantiated property types directly from the supplied checker type.

    • d095234: Normalize piping-flow transformations around their callee, arguments, and explicit type arguments without exposing a representation-dependent transformation node. Add shared rewriter operations for replacing transformations and flow prefixes while preserving data-first, data-last, pipe(...), and .pipe(...) source forms.

    • 1d0dfb8: Update the TypeScript next tag to typescript@next, which ships typescript-go commit cf7b9361a33fa0c8e1afa3cf45fde29c9ab23ec0, and update the TypeScript latest tag to typescript@latest.

  44. 0.40.x
  45. 0.40.0

    3 Sep 2026
    • 815273c: Add the Effect v4 raceFirstWithSleepToTimeout style diagnostic, which suggests Effect.timeoutOrElse when a first-completion race has exactly one Effect.sleep- or Effect.delay-based timer arm.

      Reclassify acquireReleaseDisposable as style and unsafeEffectTypeAssertion as correctness.

    • c1ac8e5: Avoid reporting the schemaNumber diagnostic when Schema.Number is refined with the built-in isFinite or isInt checks, including pipe-style refinements.

    • 0fba9d1: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 43a90f4c105bc9db7cb7aa299beddafbabe1d23e, and update the TypeScript latest tag to typescript@latest.

  46. 0.39.x
  47. 0.39.1

    2 Sep 2026
    • c2e4353: Update the TypeScript next tag to 7.1.0-dev.20260901.1, update Oxlint to 1.81.0, and refresh the generated configuration schemas. Support SchemaStore's draft-07 nullable schema representation when injecting the Effect language-service plugin schema.

  48. 0.39.0

    1 Sep 2026
    • 7e30dc9: Add the acquireReleaseDisposable rule to replace manual disposal finalizers passed to Effect.acquireRelease with Effect.acquireDisposable.

    • f134c31: Add the optionMatchToFromOption diagnostic and quick fix for Option-to-Effect conversions that can use Effect.fromOption.

      The rule recognizes supported Option.match call styles and Option.isSome / Option.isNone conditional expressions whose branches only wrap the value with Effect.succeed or produce Effect.fail. It suggests the one-argument Effect.fromOption form for the default Cause.NoSuchElementError, and preserves custom failures in a lazy callback.

    • 90c884e: Expose piping-flow extraction through the etsgoapi Go API.

      The type parser already understands "piping flows" — a subject expression followed by an ordered list of transformations, unifying the pipe(...), pipeable .pipe(...), data-first, data-last and Effect.fn forms — but that analysis was only reachable from internal packages. etsgoapi.TypeParser now surfaces it so external Go integrations can consume it without importing internal/....

      tp := etsgoapi.NewTypeParser(program, checker)
      for _, flow := range tp.PipingFlows(sourceFile, true /* includeEffectFn */) {
          // flow.Subject.Node / flow.Subject.OutType — the starting expression and its type
          for _, step := range flow.Transformations {
              // step.Kind (pipe | pipeable | dataFirst | dataLast | call | effectFn | effectFnUntraced)
              // step.Callee / step.Args / step.OutType
          }
      }

      Adds the public PipingFlow, PipingFlowSubject, PipingFlowTransformation and TransformationKind types alongside the new (*TypeParser).PipingFlows method.

  49. 0.38.x
  50. 0.38.0

    27 Aug 2026
    • 773b245: Add the allOfMapToForEach style diagnostic, which suggests replacing
      Effect.all(values.map(callback), options) with the equivalent
      Effect.forEach(values, callback, options) form.

    • fe7a29e: Add the catchAllDieToOrDie style diagnostic, which suggests replacing
      Effect.catch or Effect.catchAll with Effect.orDie when the catch-all
      handler forwards its typed failure unchanged to Effect.die.

    • 32c575a: Add the catchConditionalRefailToCatchIf diagnostic for conditional Effect.catch and Effect.catchCause handlers that re-fail their untouched input, suggesting Effect.catchIf, Effect.catchCauseIf, or Effect.catchTag as appropriate.

  51. 0.37.x
  52. 0.37.0

    25 Aug 2026
    • afb17ac: Support both the legacy microsoft/typescript-go compiler and the migrated
      microsoft/TypeScript/tsc compiler behind the canonical TypeScript shim
      namespace.

    • a3af171: Build the Nix package from the migrated TypeScript monorepo source and update the pinned compiler revision correctly.

    • eba879b: Suppress the unnecessaryPipeChain diagnostic when merging chained pipe calls would exceed the available overload arity.

  53. 0.36.x
  54. 0.36.5

    15 Aug 2026
    • 9ddab5d: Report unsupported target package versions with the current @effect/tsgo version and the supported alternatives.

    • 922903b: Document the target package versions supported by each published release.

    • ca311a5: Exclude type-only heritage nodes from execution flow graphs across supported TypeScript versions.

  55. 0.36.4

    10 Aug 2026
    • 7a616ec: Allow declaration emit with noEmitOnError when all diagnostics are ignored Effect diagnostics.

  56. 0.36.3

    10 Aug 2026
    • 73f7f28: Refresh patched binaries when an updated @effect/tsgo package provides a different replacement artifact.

    • 9190801: Update Effect v4 dependencies and embedded test fixtures to 4.0.0-beta.107.

  57. 0.36.2

    10 Aug 2026
    • 8362acc: Extend the walker-rule prefilter to call expressions.

      A call expression's type is its resolved signature's return type, and both the signature and that return type are already cached from the main check phase. NodeCouldBeStrictEffect now consults them for call nodes and skips the expensive flow-analysis re-check when the declared return type conclusively cannot be a strict Effect. Signature-less calls, optional chains, and every inconclusive return type stay conservative, and promiseInEffectSuccess no longer computes a location type for calls only to discard it. Emitted diagnostics are unchanged; on a large Effect monorepo build this removes a further ~4.6% of wall time on top of the reference-node prefilter, bringing the total Effect diagnostics overhead versus a pristine tsgo build of the same commit down to ~17%.

    • 9020153: Skip diagnostic rules below the minimum visible severity before executing them.

      In tsc CLI mode without includeSuggestionsInTsc, suggestion- and message-severity diagnostics are dropped from the output after rules run. The rule runner now receives the minimum severity the caller can surface and skips such rules up front, avoiding their type-checker queries entirely. A rule below the threshold still runs when any directive in the file references it (for example // @effect-diagnostics ruleName:error or a wildcard), since directives can raise its severity and must be tracked for unusedDirective reporting. Emitted diagnostics are unchanged; on a large Effect monorepo build this removes roughly 1–2s of check time.

    • 257af25: Skip flow-analysis type queries for references that conclusively cannot be an Effect.

      The effectInFailure and promiseInEffectSuccess rules walk every node of a file and query its flow type just to test whether it is a strict Effect type. The new TypeParser.NodeCouldBeStrictEffect prefilter inspects the referenced symbol's declared type first — flow narrowing can only refine the declared type, so a declared type that conclusively contains no possibly-Effect constituent (primitives, plain objects with a different type name, unions thereof) can never produce a strict Effect flow type, and the expensive query is skipped. The predicate is conservative: any/unknown, type parameters, conditionals, symbol-less types, and deep unions always fall through to the full query. Emitted diagnostics are unchanged; on a large Effect monorepo build this removes ~10% of build wall time (~2.7s of ~26.8s).

  58. 0.36.1

    9 Aug 2026
    • 4db1d4b: Preserve existing indentation and newline styles when setup updates JSON configuration files.

    • c154a04: Update the TypeScript next tag to typescript@next, which ships typescript-go commit 24fabe95acba758c05fcb349bf427a3a0c8ad676, and update the TypeScript latest tag to typescript@latest.

  59. 0.36.0

    8 Aug 2026
    • 8423f68: Add recommended and category-specific shared configurations for Oxlint.

  60. 0.35.x
  61. 0.35.0

    7 Aug 2026
    • f25821b: Generate detailed upstream update pull request descriptions with explicit version changes and the TypeScript-Go commits introduced by the update.

    • 3fe06c8: Avoid false positive TS2731 diagnostics for symbol-valued interpolations in tagged template literals when Effect diagnostic rules traverse the template expression.

    • 989964b: Prevent preferTypedSchemaDecoder from panicking when a decoder input is produced by a preceding call or pipe transformation.

  62. 0.34.x
  63. 0.34.0

    7 Aug 2026
    • 974513e: Add a non-interactive setup workflow with explicit project, integration, diagnostic, editor, preview, and apply options. Setup now also recommends running the package manager install command whenever it changes package.json.

    • ba4ec9a: Cache generated TypeScript-Go shims by their effective inputs during local repository setup and CI runs.

    • 6d0ffda: Remove unused internal helpers and add dead-code analysis to the repository lint workflow.

  64. 0.33.x
  65. 0.33.0

    6 Aug 2026
    • ae0d537: Add the preferTypedSchemaDecoder style suggestion, which recommends typed Schema decoder APIs when an input is assignable to the schema's encoded type.

    • 42534d2: Reuse Go build cache entries across shim generation by preparing package-loading inputs at stable, content-addressed paths.

    • cfea036: Update Effect v4 dependencies and embedded test fixtures to 4.0.0-beta.104, update Schema class completions for the Error and TaggedError renames, and suppress auto-imports from blocked Effect internal modules.

  66. 0.32.x
  67. 0.32.1

    5 Aug 2026
    • 479f268: Avoid installing redundant Oxlint dependencies when Vite+ is present and identify already-patched components in skip messages.

  68. 0.32.0

    5 Aug 2026
    • 52ec481: Normalize upstream metadata into versioned TypeScript, Oxlint, and oxlint-tsgolint components, including the versions required by Vite+. Repository setup and validation now operate on unique component versions instead of named upstream profiles.

    • 7447a69: Patch Oxlint's TypeScript declarations with the effecttsgo plugin and rule names.

  69. 0.31.x
  70. 0.31.0

    4 Aug 2026
    • 9cfdd81: Add a yield* quick fix for floating Effects in yieldable Effect contexts, and preserve narrowed wrapper error references when converting hand-rolled reason dispatch to Effect.catchReason or Effect.catchReasons.

  71. 0.30.x
  72. 0.30.0

    4 Aug 2026
    • f155e33: Ship an Effect-aware Oxlint configuration schema and configure existing .oxlintrc.json files to use it when enabling the Oxlint integration. Keep the bundled TypeScript and Oxlint base schemas synchronized through the upstream update workflow.

  73. 0.29.x
  74. 0.29.0

    4 Aug 2026
    • 02035a1: Add TypeScript and Oxlint integration selection to effect-tsgo setup, including supported Oxlint dependency pinning and integration-aware prepare scripts.

    • 9e21c6c: Split release builds for TSC, tsgolint, and the Oxlint native binding so Go artifacts can be cross-compiled on Linux independently of the platform-specific Rust builds.

  75. 0.28.x
  76. 0.28.0

    4 Aug 2026
    • 0ee639c: Expose Effect code actions as lazy Oxlint suggestions through the renamed etsoxlintrunner integration.

  77. 0.27.x
  78. 0.27.1

    3 Aug 2026
    • 421bda3: Install Oxlint cross-compilation targets for its pinned Rust toolchain.

  79. 0.26.x
  80. 0.26.7

    3 Aug 2026
    • 452eca4: Increase the release profile build timeout to 45 minutes.

  81. 0.24.x
  82. 0.24.3

    23 Jul 2026

    Reading the note…