{"id":50548594,"url":"https://github.com/gorevds/litemlflow","last_synced_at":"2026-06-04T01:01:32.400Z","repository":{"id":356516851,"uuid":"1232867278","full_name":"gorevds/litemlflow","owner":"gorevds","description":"Single-binary, MLflow-API-compatible experiment tracker with first-class LLM trace support. 143× faster cold start than MLflow.","archived":false,"fork":false,"pushed_at":"2026-05-08T13:19:58.000Z","size":21452,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-08T13:21:30.318Z","etag":null,"topics":["apache-2","experiment-tracking","golang","helm","kubernetes","langchain","llamaindex","llm-tracing","mlflow","mlflow-alternative","mlops","opentelemetry","prometheus","single-binary","sqlite","terraform"],"latest_commit_sha":null,"homepage":"https://lmf.gorev.space","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gorevds.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":"docs/governance.md","roadmap":"docs/roadmap-y1.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["dolonet"],"custom":["https://polar.sh/litemlflow"]}},"created_at":"2026-05-08T11:01:23.000Z","updated_at":"2026-05-08T13:20:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gorevds/litemlflow","commit_stats":null,"previous_names":["gorevds/litemlflow"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/gorevds/litemlflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gorevds%2Flitemlflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gorevds%2Flitemlflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gorevds%2Flitemlflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gorevds%2Flitemlflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gorevds","download_url":"https://codeload.github.com/gorevds/litemlflow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gorevds%2Flitemlflow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33886153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache-2","experiment-tracking","golang","helm","kubernetes","langchain","llamaindex","llm-tracing","mlflow","mlflow-alternative","mlops","opentelemetry","prometheus","single-binary","sqlite","terraform"],"created_at":"2026-06-04T01:01:27.380Z","updated_at":"2026-06-04T01:01:32.378Z","avatar_url":"https://github.com/gorevds.png","language":"Go","funding_links":["https://github.com/sponsors/dolonet","https://polar.sh/litemlflow"],"categories":[],"sub_categories":[],"readme":"# LiteMLflow\n\n[![CI](https://img.shields.io/github/actions/workflow/status/gorevds/litemlflow/ci.yml?branch=main\u0026logo=github\u0026label=CI)](https://github.com/gorevds/litemlflow/actions)\n[![Coverage](https://img.shields.io/badge/coverage-TBD-lightgrey?logo=go)](https://github.com/gorevds/litemlflow/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gorevds/litemlflow)](https://goreportcard.com/report/github.com/gorevds/litemlflow)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n[![Release](https://img.shields.io/github/v/release/gorevds/litemlflow?include_prereleases)](https://github.com/gorevds/litemlflow/releases)\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg)](#acknowledgements)\n\n\u003e **Your experiments, in one file.**\n\u003e A single Go binary. MLflow-API-compatible. First-class LLM trace support.\n\u003e Zero databases. Zero config. `litemlflow up` and you're tracking.\n\n\u003c!-- TODO: record demo.gif — 90 s, 1280×720, show: curl install → litemlflow up → mlflow.log_metric → UI \u003c300ms → trace waterfall → /metrics --\u003e\n\u003c!-- ![Demo](docs/demo.gif) --\u003e\n\n---\n\n## Why LiteMLflow\n\n- **143× faster cold start than MLflow** — 53 ms vs 7.5 s. No Python interpreter, no ORM, no migration dance in CI.\n- **One env variable to migrate** — `MLFLOW_TRACKING_URI=http://localhost:5000`. Your existing MLflow code keeps running.\n- **LLM-native from day one** — traces, prompts (versioned + aliased), evals, and OpenTelemetry OTLP live beside classic ML metrics in the same UI.\n\n---\n\n## Quick install\n\n```bash\n# Raw binary (Linux / macOS amd64+arm64) — recommended\ncurl -fsSL -o /usr/local/bin/litemlflow \\\n  https://github.com/gorevds/litemlflow/releases/latest/download/litemlflow-linux-amd64\nchmod +x /usr/local/bin/litemlflow\nlitemlflow up --data ~/lmf\n\n# Docker\ndocker run -p 5000:5000 -v $(pwd)/data:/data ghcr.io/gorevds/litemlflow:latest up\n\n# Kubernetes (Helm)\nhelm install lmf oci://ghcr.io/litemlflow/charts/litemlflow --version 0.1.0\n\n# Build from source (Go 1.26+)\ngit clone https://github.com/gorevds/litemlflow \u0026\u0026 cd litemlflow \u0026\u0026 make build\n```\n\n\u003e Snap, Homebrew, Debian, RPM, and the Terraform provider were sunset in v1.2.\n\u003e See `dist/_sunset/README.md` for the rationale and supported channels.\n\n---\n\n## 30-second start\n\n```bash\nlitemlflow up --data ./data          # server on :5000 in ~53 ms\n```\n\n```python\nimport mlflow\nmlflow.set_tracking_uri(\"http://localhost:5000\")\nmlflow.set_experiment(\"my-project\")\n\nwith mlflow.start_run():\n    mlflow.log_param(\"lr\", 0.01)\n    mlflow.log_metric(\"loss\", 0.42)\n```\n\nOpen http://localhost:5000 — you're done. No Postgres. No S3. No reverse proxy.\n\n---\n\n## How it compares\n\n| | **LiteMLflow** | MLflow | Weights \u0026 Biases | Aim | Langfuse |\n|---|---|---|---|---|---|\n| Cold start | **53 ms** | 7 500 ms | SaaS | ~2 s | SaaS / heavy |\n| `log_metric` p50 | **1.4 ms** | 21.6 ms | ~network | ~3 ms | ~network |\n| Runtime deps | **none** | Python + optional Postgres + optional S3 | account | Python | Postgres + ClickHouse |\n| Install steps | **1** | 4+ | 3 (sign up) | 2 | 5+ (docker-compose) |\n| MLflow client compat | **✅ 80%+** | ✅ native | ❌ | ❌ | ❌ |\n| First-class LLM traces | **✅** | bolt-on | ✅ | ❌ | ✅ |\n| Single-file backup | **✅ `cp dir`** | dump DB + sync S3 | export | partial | dump 2 DBs |\n| Self-hostable | **✅** | ✅ | ❌ (OSS version limited) | ✅ | ✅ |\n| Auth out-of-the-box | **basic + OIDC** | none | account | basic | basic |\n| License | **Apache 2.0** | Apache 2.0 | proprietary | Apache 2.0 | MIT |\n\n*Benchmark details: [docs/bench-v04.md](docs/bench-v04.md). All numbers measured on the same loopback machine.*\n\n---\n\n## Stability\n\nLiteMLflow follows semver starting at v1.0. **v2.0 is the LTS stream.**\n\n- The HTTP wire shape of `/api/v1/...` and `/api/v2/...` is frozen for v2.x. Additive changes only (new optional fields/endpoints) — see [ADR 0003](docs/adr/0003-v2-lts-charter.md).\n- v1-flagged legacy MLflow-compat aliases ship with `Sunset: Tue, 11 May 2027 00:00:00 GMT` headers — 12 months of advance notice.\n- Pin to `/api/v2/...` paths in new code if you want the explicit LTS namespace stamp; existing v1 clients keep working unchanged.\n\n**Federation caveat (`/api/v1/federate/...`)**: in-tree independent reviews caught and fixed RBAC bypass (C1), unbounded-response OOM (C2), peer-name enumeration (H2), and cache-correctness (H1) issues. An external pen test on the federation protocol has NOT been performed. Deploy federation only across servers you control (single trust domain). Cross-organization federation should wait for the pen-test pass tracked in [docs/upgrade-to-v2.md](docs/upgrade-to-v2.md).\n\n---\n\n## What works today (v1.0)\n\n- **MLflow REST API** — experiments, runs, metrics, params, tags, artifacts (upload/download/delete), metric history, search with full filter grammar (`=`/`!=`/`\u003c`/`\u003e`/`LIKE`/`IN`/`BETWEEN`), `log_batch`, `log_inputs`, pagination, Model Registry\n- **Native API** — traces (manual + OTLP HTTP/gRPC), prompts (versioned, content-addressed, aliased), evals\n- **Embedded UI** — experiments → runs → run detail; metrics charts, trace waterfall, prompt diff, bulk compare/export/tag; run notes (markdown), starring, inline rename, artifact preview; **side-by-side run comparison** (params diff, metrics overlay, tags, run summary); **custom column picker** (per-experiment, persisted); **share button** (copies current URL); keyboard shortcuts; **global search** (⌘K palette finds runs/experiments/prompts cross-experiment); dark/light theme; embed mode\n- **Auth** — anonymous, basic, OIDC (PKCE + RS256 + JWKS), session cookies, RBAC (viewer/editor/admin)\n- **Storage backends** — filesystem (default, zero config) and S3-compatible (MinIO/AWS, pure-Go SigV4, multipart)\n- **Observability** — Prometheus `/metrics` endpoint (12 metric families), server-side LTTB downsampling\n- **CLI** — `up`, `migrate`, `rollback`, `backup`, `restore`, `import-mlflow`, `version`\n- **Distribution** — Docker image, Helm chart, Kubernetes operator, raw binary (Snap / Homebrew / Debian / RPM / Terraform sunset in v1.2 — see `dist/_sunset/`)\n- **Python SDK** — `litemlflow[langchain]` (auto-instrument LangChain), `litemlflow[llamaindex]` (auto-instrument LlamaIndex)\n- **Tested against real MLflow Python client 3.x** — 31/31 compat checks pass live at https://lmf.gorev.space\n\n---\n\n## Migrate from MLflow\n\n```python\n# Before\nmlflow.set_tracking_uri(\"http://mlflow-server:5000\")\n\n# After\nmlflow.set_tracking_uri(\"http://litemlflow-server:5000\")\n# Everything else stays the same.\n```\n\nTo import existing data from a running MLflow instance:\n\n```bash\nlitemlflow import-mlflow \\\n  --src http://mlflow-server:5000 \\\n  --data ./data\n```\n\n---\n\n## Project layout\n\n```\ncmd/litemlflow/      CLI entry point\ninternal/\n  api/mlflow/        MLflow REST compat layer\n  api/native/        LiteMLflow native API (traces, prompts, evals, OTLP)\n  artifact/          Filesystem + S3 artifact storage\n  store/             SQLite store (WAL mode, LTTB downsampling)\n  server/            HTTP/2 server, middleware, auth, RBAC, metrics\n  migrations/        Embedded SQL migrations + runner\npython/litemlflow/   Python SDK + LangChain + LlamaIndex handlers\noperator/            Kubernetes operator (separate Go module)\ndist/                Helm chart (active); _sunset/ holds Snap/Brew/RPM/Deb/Terraform (unmaintained, see README inside)\ndocs/                Human-facing documentation\ntests/integration/   End-to-end tests (real MLflow client + bench harness)\n```\n\n---\n\n## Build \u0026 test\n\n```bash\nmake build          # → bin/litemlflow (requires Go 1.22+)\nmake test           # Go + Python tests\nmake compat-test    # real MLflow Python client against local binary\nmake lint           # static analysis\nmake fuzz-short     # fuzz targets (parsers, JWT, OTLP)\n```\n\n---\n\n## Documentation\n\n| | |\n|---|---|\n| [Quickstart](docs/quickstart.md) | Install, run, first metric |\n| [Quickstart notebook](examples/quickstart.ipynb) | One Jupyter tour of every feature end-to-end |\n| [Cookbook](docs/cookbook.md) | sklearn, PyTorch, LangChain, LlamaIndex, OTLP, deployment |\n| [Architecture](docs/architecture.md) | System design, concurrency model, perf budgets |\n| [Benchmarks](docs/bench-v04.md) | 143× cold start and honest trade-offs |\n| [Roadmap Y1](docs/roadmap-y1.md) | Delivered: foundation → hardening → ergonomics → distribution |\n| [Roadmap Y2](docs/roadmap-y2.md) | Analytics (DuckDB), dataset versioning, federation, time-travel |\n| [Vision](docs/vision.md) | Hero user, anti-personas, why this will work |\n| [Governance](docs/governance.md) | Maintainership, release cadence, DCO policy |\n\n---\n\n## Star history\n\n[![Star History Chart](https://api.star-history.com/svg?repos=gorevds/litemlflow\u0026type=Date)](https://star-history.com/#gorevds/litemlflow\u0026Date)\n\n---\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003evs MLflow — why not just run MLflow?\u003c/strong\u003e\u003c/summary\u003e\n\nMLflow is great but operationally expensive: Python environment, SQLAlchemy, optional Postgres, optional S3, optional Nginx. LiteMLflow replaces all of that with a single binary. If you have an existing MLflow setup with a team of 50, stick with it — LiteMLflow targets solo engineers and small teams who want real tracking without DevOps.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003evs Weights \u0026 Biases — what's the difference?\u003c/strong\u003e\u003c/summary\u003e\n\nW\u0026B is a closed SaaS product. LiteMLflow is Apache 2.0, self-hosted, and your data stays in a directory you own. W\u0026B wins on collaborative features and polish at large scale. LiteMLflow wins on privacy, cost, and zero operational complexity.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003evs Langfuse — what about LLM observability?\u003c/strong\u003e\u003c/summary\u003e\n\nLangfuse is excellent for LLM-only workflows. LiteMLflow unifies classic ML experiment tracking (the MLflow compat surface) with LLM traces and prompts in one binary. If you run both traditional training jobs and LLM pipelines, you no longer need two tools.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003evs Aim — what's different?\u003c/strong\u003e\u003c/summary\u003e\n\nAim has no MLflow compatibility, no built-in auth, and is Python-based (heavier startup). LiteMLflow adds MLflow compat, OIDC, RBAC, LLM traces, a pure-Go storage layer (143× faster cold start), and distribution as a single static binary.\n\n\u003c/details\u003e\n\n---\n\n## Sponsor\n\nLiteMLflow is free and Apache 2.0. If it saves you time, consider sponsoring development:\n\n- [GitHub Sponsors](https://github.com/sponsors/dolonet) *(TODO: activate before launch)*\n- [Polar.sh](https://polar.sh/litemlflow) *(TODO: activate before launch)*\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). DCO sign-off required (`git commit -s`); no CLA — your copyright stays yours.\n\n## Acknowledgements\n\nApache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg)](https://github.com/gorevds/litemlflow/graphs/contributors)\n\nLiteMLflow is independent of and not affiliated with Databricks, Inc. References to \"MLflow\" describe API compatibility only.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgorevds%2Flitemlflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgorevds%2Flitemlflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgorevds%2Flitemlflow/lists"}