Self-hosted deployments get full-text search, monitors, faster APIs
v4.0.0
New Langfuse v4 Release
We're excited to finally share the new Langfuse v4 major release. It unlocks a set of new features for self-hosted deployments: full-text search across inputs, outputs, and metadata, the filter search bar, monitors and alerts, and the significantly faster Observations API v2 and Metrics API v2.
Please follow our upgrade guide to move from existing deployments to Langfuse v4 or our Helm v4 guide to start a net-new Langfuse v4 deployment.
What's Changed
Features
- feat(v4-upgrade): improve eval-upgrade flow by @marliessophie in https://github.com/langfuse/langfuse/pull/15470
- feat(in-app-agent): Append-only agent run events by @LysanderKie in https://github.com/langfuse/langfuse/pull/15405
- feat(v4-migration): enhance upgrade assistant prompts and logic by @marliessophie in https://github.com/langfuse/langfuse/pull/15490
- feat(agent): Move 'in-app-agent' out of EE (still in public beta) by @LysanderKie in https://github.com/langfuse/langfuse/pull/15492
- feat(filters): refine event facet counts from the row query's filter state (LFE-14489) by @nkabardin in https://github.com/langfuse/langfuse/pull/15466
- feat(experiments): auth headers on remote experiment run by @marliessophie in https://github.com/langfuse/langfuse/pull/15382
- feat(events): outlier chart strip above the trace table (LFE-14451) by @nkabardin in https://github.com/langfuse/langfuse/pull/15486
- feat(storybook): design system docs: color, typography, layout, charts by @nmtrang29 in https://github.com/langfuse/langfuse/pull/15500
- feat(v4): hand off coding-agent upgrades to the canonical skill by @hassiebp in https://github.com/langfuse/langfuse/pull/15527
- feat(worker): add opt-in queue-consumption liveness health check (LFE-13685) by @Steffen911 in https://github.com/langfuse/langfuse/pull/15512
- feat(analytics): attribute cloud signups to Google Ads clicks (gclid) by @jannikmaierhoefer in https://github.com/langfuse/langfuse/pull/15048
- feat(web): explain v4 migration in upgrade panel, banner, and preview toggle UX by @nmtrang29 in https://github.com/langfuse/langfuse/pull/15543
- feat(batch-exports): mint fresh download URLs on the exports page (LFE-14552) by @Steffen911 in https://github.com/langfuse/langfuse/pull/15536
- feat(api): promote score creation from legacy by @hassiebp in https://github.com/langfuse/langfuse/pull/15528
- feat(blob-storage): skip observation export dedup for FINAL-skip projects by @Steffen911 in https://github.com/langfuse/langfuse/pull/15576
- feat(agent): Worker path for background in-app-agent runs by @LysanderKie in https://github.com/langfuse/langfuse/pull/15525
- feat(tracing): filter for ingested api key by @nimarb in https://github.com/langfuse/langfuse/pull/15515
- feat(traces): show approximate row count in the traces table (LFE-11057) by @nkabardin in https://github.com/langfuse/langfuse/pull/15517
- feat(events): Follow-up UX adjustments to the Pulse outlier strip by @nmtrang29 in https://github.com/langfuse/langfuse/pull/15540
Fixes
- fix: reduce batch cleaner query concurrency and stagger worker startup by @sumerman in https://github.com/langfuse/langfuse/pull/15430
- fix(trace): Improve
MarkdownViewerstyling by @bezbac in https://github.com/langfuse/langfuse/pull/15129 - fix(llm): honor NO_PROXY for outbound LLM requests when HTTPS_PROXY is set by @Steffen911 in https://github.com/langfuse/langfuse/pull/15467
- fix(prompts): reject invalid table columns as bad requests by @hassiebp in https://github.com/langfuse/langfuse/pull/15481
- fix(seeder): make prompt upserts idempotent by @bezbac in https://github.com/langfuse/langfuse/pull/15488
- fix(share trace): create correct shareable trace link by @annabellscha in https://github.com/langfuse/langfuse/pull/15465
- fix(slack): return 400 for invalid OAuth callback parameters by @Steffen911 in https://github.com/langfuse/langfuse/pull/15489
- fix(prisma): restore applied migration checksum by @marliessophie in https://github.com/langfuse/langfuse/pull/15501
- fix(mobile): assistant no-autofocus + useIsMobile correct on first render (LFE-11067) by @nkabardin in https://github.com/langfuse/langfuse/pull/15429
- fix(version-update): delay the update refresh prompt (1 min post-load, 3 min after new version) (LFE-14537) by @nkabardin in https://github.com/langfuse/langfuse/pull/15508
- fix(evals): isolate preview table state by @marliessophie in https://github.com/langfuse/langfuse/pull/15504
- fix: coalesce batch cleaner count queries across workers by @sumerman in https://github.com/langfuse/langfuse/pull/15495
- fix(evals): normalize Python score aliases in plain dictionaries by @wochinge in https://github.com/langfuse/langfuse/pull/15514
- fix(events): Pulse tap clears a leftover drag-selection band (LFE-14451) by @nkabardin in https://github.com/langfuse/langfuse/pull/15521
- fix(otel): normalize environment on the direct events_full write path by @Steffen911 in https://github.com/langfuse/langfuse/pull/15499
- fix(events): keep Pulse touch tooltip on-screen at viewport edges (LFE-14451) by @nkabardin in https://github.com/langfuse/langfuse/pull/15524
- fix(otel): map foreign observation levels onto the Langfuse enum by @Steffen911 in https://github.com/langfuse/langfuse/pull/15513
- fix: prevent blob storage log queries from timing out by @sumerman in https://github.com/langfuse/langfuse/pull/15554
- fix(api): expose logical root observations by @sumerman in https://github.com/langfuse/langfuse/pull/15567
- fix(ci): make SDK generation reruns safe by @hassiebp in https://github.com/langfuse/langfuse/pull/15574
- fix(api): add annotation queue rate limit by @marliessophie in https://github.com/langfuse/langfuse/pull/15233
- fix(experiments): remove baseline enforcement from experiment ID collection by @marliessophie in https://github.com/langfuse/langfuse/pull/15573
- fix(events): add missing y axis to the Pulse outlier strip by @nmtrang29 in https://github.com/langfuse/langfuse/pull/15572
- fix(web): gate v4-migration claims on readiness; sync V4 Preview label by @nmtrang29 in https://github.com/langfuse/langfuse/pull/15570
- fix(pricing): add missing output_reasoning price keys to gpt-5.3-codex by @Steffen911 in https://github.com/langfuse/langfuse/pull/15571
- fix(mcp): Allow disabling Host header validation by @bezbac in https://github.com/langfuse/langfuse/pull/15584
- fix(traces): Make outlier bar show count by default by @bezbac in https://github.com/langfuse/langfuse/pull/15578
- fix(v4): keep the migration modal close button clear of the status link by @nmtrang29 in https://github.com/langfuse/langfuse/pull/15582
- fix(evals): restore observation evaluator status toggle by @marliessophie in https://github.com/langfuse/langfuse/pull/15581
- fix(mcp): support logical root observation filters by @sumerman in https://github.com/langfuse/langfuse/pull/15568
- fix(worker): retry ClickHouse client request timeouts in ClickhouseWriter by @Steffen911 in https://github.com/langfuse/langfuse/pull/15559
- fix(events): show Pulse loading skeleton on time-window changes (LFE-14575) by @nkabardin in https://github.com/langfuse/langfuse/pull/15544
- fix(pricing): match Bedrock JP and AU model prefixes by @hassiebp in https://github.com/langfuse/langfuse/pull/15539
- fix(web): stop trace/observations tables crashing on unknown level values by @nkabardin in https://github.com/langfuse/langfuse/pull/15538
Chores
- build: run snyk on v3 branch by @Steffen911 in https://github.com/langfuse/langfuse/pull/15479
- build: add v3 branch to github action security check by @Steffen911 in https://github.com/langfuse/langfuse/pull/15485
- chore(agent): Refresh skills by @bezbac in https://github.com/langfuse/langfuse/pull/15496
- refactor(web): Cleanup navigation sidebar by @bezbac in https://github.com/langfuse/langfuse/pull/15493
- ci(preview): share one GitHub environment for PR preview deployments by @wochinge in https://github.com/langfuse/langfuse/pull/15494
- chore(pricing): add gpt-5.3-codex default pricing and selectable model entry by @langfuse-bot in https://github.com/langfuse/langfuse/pull/15442
- refactor(web): Cleanup
Dropzonecomponent by @bezbac in https://github.com/langfuse/langfuse/pull/15498 - chore(shared): Move web utils needed by in-app-agent runtime to shared by @LysanderKie in https://github.com/langfuse/langfuse/pull/15428
- refactor(agent): Move in-app-agent runtime into shared package by @LysanderKie in https://github.com/langfuse/langfuse/pull/15421
- refactor(web): Cleanup
StatusBadgeby @claude[bot] in https://github.com/langfuse/langfuse/pull/15497 - chore(deps): bump Snyk-flagged path-to-regexp and @ai-sdk/provider-utils by @LysanderKie in https://github.com/langfuse/langfuse/pull/15518
- refactor(widgets): move WidgetForm to react-hook-form and fix histogram silent-revert (LFE-10699) by @nkabardin in https://github.com/langfuse/langfuse/pull/15403
- chore(deps): bump brace-expansion to 5.0.8 by @bezbac in https://github.com/langfuse/langfuse/pull/15520
- chore: clean up legacy queue metrics after migration by @sumerman in https://github.com/langfuse/langfuse/pull/15516
- chore(seeder): use current models in demo seed data (LFMKT-2190) by @nkabardin in https://github.com/langfuse/langfuse/pull/15523
- docs(agent): Add guidelines for React component composition by @bezbac in https://github.com/langfuse/langfuse/pull/15537
- feat(events): PostHog instrumentation for the Pulse outlier strip (LFE-14451) by @nkabardin in https://github.com/langfuse/langfuse/pull/15535
- test(events): approx-count behavioral test + documented tuple constant (LFE-11057 follow-up) by @nkabardin in https://github.com/langfuse/langfuse/pull/15542
- docs(previews): seed data into a preview via port-forward + seed CLI by @maxdeichmann in https://github.com/langfuse/langfuse/pull/15547
- docs(agent): tighten skill descriptions by @wochinge in https://github.com/langfuse/langfuse/pull/15550
- chore: clarify additive API change and test guidance by @sumerman in https://github.com/langfuse/langfuse/pull/15530
- refactor(annotation-queues): remove custom cell rendering for description in AnnotationQueuesTable by @marliessophie in https://github.com/langfuse/langfuse/pull/15552
- chore: Upgrade to ESLint 10 by @bezbac in https://github.com/langfuse/langfuse/pull/15519
- refactor(web): Clean up
DatasetActionButtonby @bezbac in https://github.com/langfuse/langfuse/pull/15531
Full Changelog: https://github.com/langfuse/langfuse/compare/v4.0.0-rc.3...v4.0.0
Fetched July 29, 2026

