diff --git a/docs/platforms/javascript/guides/effect/index.mdx b/docs/platforms/javascript/guides/effect/index.mdx
index 2bbfb82eaffff1..1f61f58d614e34 100644
--- a/docs/platforms/javascript/guides/effect/index.mdx
+++ b/docs/platforms/javascript/guides/effect/index.mdx
@@ -13,6 +13,8 @@ Please reach out on [GitHub](https://github.com/getsentry/sentry-javascript/issu
This guide will show you how to integrate Sentry into your [Effect](https://effect.website/) project using the `@sentry/effect` SDK.
+`@sentry/effect` supports **Effect v3** and **Effect v4**. The integration automatically detects which version you have installed, but the `Tracer` and `Logger` layer APIs differ between major versions. Make sure to follow the correct code snippets for your version below.
+
## Step 1: Install
@@ -41,12 +43,19 @@ pnpm add @sentry/effect
## Step 2: Configure
-The SDK provides an `effectLayer` that initializes Sentry. You can compose it with additional Effect layers to enable tracing, logging, and metrics.
+The SDK provides an `effectLayer` that initializes Sentry. You can compose it with additional Effect layers to enable tracing, logging, and metrics. The `effectLayer`, `SentryEffectTracer`, `SentryEffectLogger`, and `SentryEffectMetricsLayer` exports are the same for Effect v3 and v4. The only difference between versions is how you compose layers for tracing and logging, which is covered in the snippets below.
+
+### Effect v3
+
+
-### Server Usage
+- Node: Provide `SentryLive` before launching your HTTP layer (for example, with `NodeRuntime`).
+- Browser: Provide `SentryLive` to your app layer.
-```typescript {filename:main.ts}
-import * as Sentry from "@sentry/effect/server";
+In both cases, use `Layer.setTracer` to configure tracing and `Logger.replace` to configure logging.
+
+```typescript {tabTitle: Server} {filename: main.ts}
+import * as Sentry from "@sentry/effect";
import { NodeRuntime } from "@effect/platform-node";
// ___PRODUCT_OPTION_START___ logs
import * as Logger from "effect/Logger";
@@ -92,10 +101,8 @@ const MainLive = HttpLive.pipe(Layer.provide(SentryLive));
MainLive.pipe(Layer.launch, NodeRuntime.runMain);
```
-### Client Usage
-
-```typescript {filename:main.ts}
-import * as Sentry from "@sentry/effect/client";
+```typescript {tabTitle: Client} {filename: main.ts}
+import * as Sentry from "@sentry/effect";
// ___PRODUCT_OPTION_START___ logs
import { Logger } from "effect";
// ___PRODUCT_OPTION_END___ logs
@@ -133,6 +140,104 @@ const SentryLive = Layer.mergeAll(
const MainLive = YourAppLayer.pipe(Layer.provide(SentryLive));
```
+### Effect v4
+
+
+
+Effect v4 changes how you install the default `Tracer` and `Logger` services. Use `Layer.succeed(Tracer.Tracer, …)` plus `Logger.layer([…])`.
+
+```typescript {tabTitle: Server} {filename: main.ts}
+import * as Sentry from "@sentry/effect";
+import { NodeRuntime } from "@effect/platform-node";
+// ___PRODUCT_OPTION_START___ logs
+import * as Logger from "effect/Logger";
+// ___PRODUCT_OPTION_END___ logs
+import * as Layer from "effect/Layer";
+// ___PRODUCT_OPTION_START___ performance
+import * as Tracer from "effect/Tracer";
+// ___PRODUCT_OPTION_END___ performance
+import { HttpLive } from "./Http.js";
+
+const SentryLive = Layer.mergeAll(
+ Sentry.effectLayer({
+ dsn: "___PUBLIC_DSN___",
+ // ___PRODUCT_OPTION_START___ performance
+
+ // Set tracesSampleRate to 1.0 to capture 100%
+ // of transactions for tracing.
+ // We recommend adjusting this value in production.
+ tracesSampleRate: 1.0,
+ // ___PRODUCT_OPTION_END___ performance
+ // ___PRODUCT_OPTION_START___ logs
+
+ // Enable logs to be sent to Sentry
+ enableLogs: true,
+ // ___PRODUCT_OPTION_END___ logs
+ }),
+ // ___PRODUCT_OPTION_START___ performance
+
+ // Enable Effect tracing
+ Layer.succeed(Tracer.Tracer, Sentry.SentryEffectTracer),
+ // ___PRODUCT_OPTION_END___ performance
+ // ___PRODUCT_OPTION_START___ logs
+
+ // Forward Effect logs to Sentry
+ Logger.layer([Sentry.SentryEffectLogger]),
+ // ___PRODUCT_OPTION_END___ logs
+ // ___PRODUCT_OPTION_START___ metrics
+
+ // Forward Effect metrics to Sentry
+ Sentry.SentryEffectMetricsLayer,
+ // ___PRODUCT_OPTION_END___ metrics
+);
+
+const MainLive = HttpLive.pipe(Layer.provide(SentryLive));
+
+MainLive.pipe(Layer.launch, NodeRuntime.runMain);
+```
+
+```typescript {tabTitle: Client} {filename: main.ts}
+import * as Sentry from "@sentry/effect";
+// ___PRODUCT_OPTION_START___ logs
+import * as Logger from "effect/Logger";
+// ___PRODUCT_OPTION_END___ logs
+import * as Layer from "effect/Layer";
+// ___PRODUCT_OPTION_START___ performance
+import * as Tracer from "effect/Tracer";
+// ___PRODUCT_OPTION_END___ performance
+
+const SentryLive = Layer.mergeAll(
+ Sentry.effectLayer({
+ dsn: "___PUBLIC_DSN___",
+ // ___PRODUCT_OPTION_START___ performance
+
+ // Set tracesSampleRate to 1.0 to capture 100%
+ // of transactions for tracing.
+ // We recommend adjusting this value in production.
+ tracesSampleRate: 1.0,
+ integrations: [Sentry.browserTracingIntegration()],
+ // ___PRODUCT_OPTION_END___ performance
+ // ___PRODUCT_OPTION_START___ logs
+
+ // Enable logs to be sent to Sentry
+ enableLogs: true,
+ // ___PRODUCT_OPTION_END___ logs
+ }),
+ // ___PRODUCT_OPTION_START___ performance
+
+ // Enable Effect tracing
+ Layer.succeed(Tracer.Tracer, Sentry.SentryEffectTracer),
+ // ___PRODUCT_OPTION_END___ performance
+ // ___PRODUCT_OPTION_START___ logs
+
+ // Forward Effect logs to Sentry
+ Logger.layer([Sentry.SentryEffectLogger]),
+ // ___PRODUCT_OPTION_END___ logs
+);
+
+const MainLive = YourAppLayer.pipe(Layer.provide(SentryLive));
+```
+
## Features
The SDK provides composable layers for Effect integration:
@@ -153,7 +258,7 @@ Add a test error to verify your setup:
```typescript
import { Effect } from "effect";
-import * as Sentry from "@sentry/effect/server";
+import * as Sentry from "@sentry/effect";
const program = Effect.gen(function* () {
yield* Effect.fail(new Error("Sentry Test Error"));