# What changed in langfuse

> 50 changes in langfuse 5 to 6 from its official release notes, upgrade guides and advisories: 24 breaking, 2 deprecations, 17 new APIs and options. Each one cited. Sources checked 2026-11-06. HTML: https://unstale.sh/npm/langfuse/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## langfuse 6

### Breaking changes

- The legacy namespace and deprecated public API methods are removed; use their documented replacements. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Removed; create scores with `api.scores.create([...])` instead. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Accepts an array of `CreateScoreRequest` objects and can report partial acceptance through `accepted`, `rejected`, and `errors`; the response no longer contains the score `id`. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Use this method to delete a score; it replaces `api.legacy.scoreV1.delete(scoreId)`. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Now behaves like the former `api.scoresV3.getManyV3`; filter scores by `id` rather than `scoreIds`. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Removed with no alias; use `api.scores.getMany` for score reads. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Dataset items are now plain `DatasetItem[]` without `link()`; use the experiment runner instead. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- The SDK requires Langfuse Cloud or self-hosted Langfuse v4.59.0 or later; self-hosted v3 and earlier v4 releases are unsupported. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- The LangChain integration now requires `@langchain/core@^1.0.0`; older versions cause a peer dependency conflict. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Now sends scores to `POST /api/public/scores` using public-key authentication. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Deprecated top-level convenience methods such as `getPrompt`, `getDataset`, and `fetchTrace` are removed; use the managers or API client replacements. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Metadata values, including strings, are JSON-encoded on spans; custom processors and exporters reading these attributes need to parse them with `JSON.parse()`. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- v6 requires Node.js 22 or later; packages are compiled to ES2022, so bundles for older runtimes must transpile the SDK. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Removed along with `span.setTraceIO()` and `createTraceAttributes()`; set trace input and output on the root observation instead. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)

### New APIs and options

- Batch score creation accepts an array of `CreateScoreRequest` objects. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Set `compression: "none"` on `LangfuseSpanProcessor` to disable gzip compression when a proxy rejects compressed requests. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Experiment results now provide `result.experimentUrl`, linking directly to the experiment comparison view. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- `LangfuseClient` now exposes `getExperimentUrl(experimentId)` to get an experiment URL. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- `LangfuseClient` now exposes `getProjectId()`. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Set to `none` to disable span-batch gzip compression when a proxy rejects compressed requests. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Dataset versions are recorded on experiment items using this attribute. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Metadata sent with v6 can be filtered by dotted paths such as `a.b = 1`; numeric and boolean comparisons are not supported yet. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Affected generated API methods now take an optional `request` argument before `requestOptions`; pass `{}` when supplying options to methods without query parameters or a body. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)

### Behavior and default changes

- Experiments are recorded through OpenTelemetry; sampled-out item traces do not appear in the experiment, while run-level scores are always stored. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- A `LangfuseSpanProcessor` mask function receives decoded observation metadata, which may be a number, boolean, or object rather than a string. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Scores are sent in batches of up to 100 to `POST /api/public/scores` instead of the legacy ingestion endpoint; rejected scores in partial responses are logged and not retried. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Score methods validate input on the client and never throw; scores with an empty name or invalid value are logged and dropped. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)
- Span batches are gzip-compressed on Node.js and Bun; browser and edge runtimes do not compress. (6.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v5-to-v6)

## langfuse 5

### Breaking changes

- Use this environment variable to set the release instead of the removed `release` trace attribute. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Use this environment variable to set the tracing environment instead of the removed `environment` trace attribute. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Now points to the Metrics v2 endpoint; use `langfuse.api.legacy.metricsV1` for a self-hosted Langfuse v3 server. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Now points to the Observations v2 endpoint; use `langfuse.api.legacy.observationsV1` for a self-hosted Langfuse v3 server. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Propagated metadata now requires `Record<string, string>` values, with values no longer than 200 characters. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- By default, exports Langfuse-created spans, spans with `gen_ai.*` attributes, and spans from known LLM instrumentation scopes instead of exporting all spans. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- A custom callback is a full override of the default span filter; compose with `isDefaultExportSpan` to extend the default behavior. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Trace updates are split among `propagateAttributes()`, `setActiveTraceIO()`, and `setActiveTraceAsPublic()`. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Observation wrapper trace updates are split into `propagateAttributes()`, `.setTraceIO()`, and `.setTraceAsPublic()`. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- The transitional `observationsV2`, `scoreV2`, and `metricsV2` aliases were removed; use the default resource names instead. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)

### Deprecations

- Deprecated for new code; set input and output on the root observation directly. It remains for backward compatibility with trace-level evaluators. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Deprecated for new code; set input and output on the root observation directly. It remains for backward compatibility with trace-level evaluators. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)

### New APIs and options

- Checks the default span-filter rules so custom `shouldExportSpan` logic can extend rather than replace them. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Provides the legacy v1 metrics resource, including for compatibility with self-hosted Langfuse v3. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Provides the legacy v1 observations resource, including for compatibility with self-hosted Langfuse v3. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Provides the legacy v1 score resource. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- The v2 score resource is now the default Public API resource under this name. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Wraps a callback and applies correlating attributes to child observations created within its scope. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Replaces setting the trace's `public` attribute through `updateActiveTrace()`. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Replaces setting the trace's `public` attribute through `.updateTrace()`. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)

### Behavior and default changes

- Non-string `traceMetadata` values are serialized with `JSON.stringify` before being passed to `propagateAttributes()`. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
- Correlating attributes propagate to every observation rather than living only on the trace, enabling single-table queries and improving query performance at scale. (5.0.0) — [upgrade guide](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
