Skip to content

v1.0.0-alpha.1

Pre-release
Pre-release

Choose a tag to compare

@killme2008 killme2008 released this 21 Jun 04:20
· 23 commits to main since this release
590acec

First public preview. Openfuse is a fork of Langfuse v3.184.1 that swaps the analytics store from ClickHouse to GreptimeDB. The Langfuse product, public APIs, and SDKs stay the same — GreptimeDB becomes the source of truth for traces, observations, scores, and the analytics behind dashboards.

LLM traces are observability data: timestamped wide events with high-cardinality context. That's exactly GreptimeDB's data model. Running Langfuse on it instead of a single-purpose columnar store buys two things today: start on a single container and scale to a cluster without losing data, and cheap long retention via object-storage-native tiered storage plus a plain-SQL TTL (LANGFUSE_GREPTIME_TTL) — where configurable retention is an Enterprise feature on ClickHouse-backed Langfuse.

What works

  • Ingestion — the public ingestion API and the OTel endpoint write to raw_events; the worker replays the full event history into merged projections.
  • Reads — traces, observations, scores, sessions, dashboards/metrics, datasets, experiments, daily metrics, exports, and the public GET endpoints all read from GreptimeDB.
  • Dashboards — the metrics query engine runs on GreptimeDB, including metadata, tag, and tool filters and breakdowns. Output is checked byte-for-byte against upstream Langfuse: 199 parity cases PASS, 0 FAIL (parity report).
  • Mutations, deletion, replay — UI edits and deletions append synthetic events to raw_events, so replay rebuilds the merged (or soft-deleted) state instead of resurrecting or losing it.
  • Automatic migrations — the web and standalone containers migrate both Postgres and the GreptimeDB schema on startup. No manual bootstrap.

Images

Published to Docker Hub, all tagged 1.0.0-alpha.1:

This is a pre-release, so latest does not move — pin the explicit tag.

Quickstart

git clone https://github.com/tma1-ai/openfuse.git
cd openfuse
git checkout v1.0.0-alpha.1
cp .env.quickstart.example .env
docker compose -f docker-compose.standalone.yml up -d

Open http://localhost:3000 and log in as demo@example.com / langfuse-dev, or point any Langfuse SDK at the bundled keys (pk-lf-1234567890 / sk-lf-1234567890). These are insecure dev defaults — for a real deployment start from .env.prod.example and set your own secrets, including GREPTIME_PASSWORD to enforce auth on the analytics store. Full guide: deployment.

Known limitations

This is an alpha — read Known limitations before depending on it. The short list:

  • Indexed full-text search is whole-term only — substring matching on indexed fields differs from upstream.
  • GreptimeDB migrations are idempotent DDL with no ledger — re-applied in full on every start, serialised by advisory lock, fail-closed.
  • Object storage is optional, not gone — media, the OTel carrier, and the eval blob store default to local filesystem; opt-in batch/blob exports still need an S3-compatible bucket.
  • dataset_run_items deletion is a projection hard-delete — the one source-of-truth exception to the replay model.

Compatibility

Based on upstream Langfuse v3.184.1. Existing Langfuse SDKs and the public ingestion/REST APIs work unchanged. Postgres migrations are upstream's and apply as-is; the GreptimeDB schema is fork-specific and migrates automatically on startup. The few intentional divergences are all cases where the fork is equal or more correct — see the parity ledger.

Openfuse is a community fork and is not affiliated with or endorsed by Langfuse.

What's next

Beta. And a direction a single-purpose store can't follow — PromQL-native metrics, logs ↔ traces correlation, OTLP-native ingestion, Flow continuous aggregation. Directional, not delivered; tracked in #8. Try it on real workloads and open issues — that's what gets it to beta.


What's Changed

  • feat(greptimedb): ingestion write path on GreptimeDB (design 02) by @killme2008 in #1
  • feat(greptimedb): 04 read-path foundation (SQL dialect + row contract + dataset_run_items projection) by @killme2008 in #2
  • feat(greptimedb): 04 P1 core entity reads on GreptimeDB by @killme2008 in #3
  • feat(greptimedb): P2 — UI rollup read path on GreptimeDB (traces/sessions/observations tables + dashboards) by @killme2008 in #4
  • feat(greptimedb): P3 — events *FromEvents collapse + dashboard executeQuery engine on GreptimeDB by @killme2008 in #5
  • feat(greptimedb): GAP-MUT write path for tRPC UI mutations + read-path fixes by @killme2008 in #6
  • feat(greptimedb): P4 — complete dataset/experiment read-path migration to GreptimeDB by @killme2008 in #9
  • feat(greptime): P5 — public API + streaming export + obs-from-events collapse by @killme2008 in #10
  • fix(greptime): dedupe relation measure in two-level dashboard query (home page 500) by @killme2008 in #11
  • P6 — worker cleaners, retention TTL, blob-file-log removal, export-to-sink → GreptimeDB by @killme2008 in #13
  • feat(media): add local file storage backend by @killme2008 in #12
  • feat(greptime): P7 — delete the ClickHouse client (GreptimeDB-only cutover) by @killme2008 in #14
  • feat(greptime): isolate batch write failures via group bisection by @killme2008 in #15
  • feat(greptime): score source-of-truth, project-delete guard, reconciliation by @killme2008 in #16
  • GreptimeDB query correctness: eval experiment join, obs filter pushdown, dashboard measures, experiment-LIST preagg by @killme2008 in #17
  • chore(greptime): P7 residual cleanup — remove dead ClickHouse code, drop @clickhouse/client, delete EE package, DB-neutral renames by @killme2008 in #19
  • GreptimeDB audit follow-up + index tier-1 (PR-A) by @killme2008 in #20
  • Remove v4-beta preview + events-backed v2 observations (PR-B) by @killme2008 in #21
  • GreptimeDB deployment track + CI/Docker fixes (PR-C) by @killme2008 in #22
  • feat: make MinIO/S3 optional — zero object storage by default by @killme2008 in #26
  • fix: self-hosted compose deploy fixes found in MinIO-optional smoke by @killme2008 in #27
  • Remove web/src/ee (Langfuse commercial Enterprise Edition) by @killme2008 in #29
  • GreptimeDB database-level retention (default 730d) by @killme2008 in #30
  • Drop orphaned v2-observations public-API readers by @killme2008 in #32
  • docs: GreptimeDB data-layer docs + CI speedups by @killme2008 in #31
  • F5: long-tail usage/cost key aggregation via an observation EAV table by @killme2008 in #34
  • perf(traces): COUNT(*) trace observations instead of fetching rows to size them by @killme2008 in #35
  • Post-merge cleanup: v2-obs types, retention env validation, dead UI + workflows by @killme2008 in #33
  • feat(greptime): fleet-wide reconciliation backfill orchestrator by @killme2008 in #38
  • perf(greptime): write only custom usage/cost keys to EAV table by @killme2008 in #36
  • feat(brand): rename user-visible UI from Langfuse to Openfuse by @killme2008 in #37
  • F5 perf: GreptimeDB SST metrics, by-type join skip, compaction runbook by @killme2008 in #40
  • feat(greptime): bulk Arrow Flight backfill for reconciliation by @killme2008 in #41
  • ci: Docker Hub image publishing + workflow cleanup by @killme2008 in #42
  • fix(greptime): metrics output parity with ClickHouse + Quality Gate C harness by @killme2008 in #44
  • feat(greptime): tool-name EAV tables for dashboard tool filters + breakdowns by @killme2008 in #45
  • docs: alpha-ready README, governance, and user-facing docs by @killme2008 in #46
  • feat(standalone): single-container image + automatic in-container GreptimeDB migration by @killme2008 in #47
  • docs: professionalize README + docs, ship 1.0.0-alpha.1 by @killme2008 in #49
  • feat(greptime): default standalone server config + opt-in enforced static auth by @killme2008 in #50
  • docs: project status + real-limitations cleanup (tone down alpha framing) by @killme2008 in #51
  • fix(greptime): pre-filter base tables in subqueries so JOINs don't defeat index pushdown by @killme2008 in #52

New Contributors

Full Changelog: https://github.com/tma1-ai/openfuse/commits/v1.0.0-alpha.1