cloudparts

MLflow

An open-source platform that records training runs, keeps a registry of versioned models with aliases, packages models for serving, and, since 2024, traces and evaluates LLM apps and agents.

Linux Foundation project
Type
Open source
Made by
Linux Foundation (created by Databricks)
Foundation
The Linux Foundation. A series of LF Projects, LLC, since June 2020
License
Apache 2.0
Facts checked
23 October 2026

What it is

MLflow started as a tracker for machine learning experiments, and that is still its core. Code wrapped in mlflow.start_run() logs parameters, metrics and files such as model weights, and mlflow.autolog() does it automatically for libraries such as scikit-learn, XGBoost, PyTorch, Keras and Spark. Runs are grouped into experiments and compared in a web UI. A tracking server sits in front of two stores: a backend store for metadata, which is a SQLite file, mlflow.db, unless you point it at PostgreSQL, MySQL or SQL Server, and an artifact store for large files, such as a local folder, Amazon S3 or Azure Blob Storage. The old file-based mlruns store is in maintenance mode.

A logged model is saved in MLflow’s own format, with “flavors” that say how to load it, for example as scikit-learn or as a generic Python function. The Model Registry, which needs a database-backed store, gives a model a name and numbered versions, plus tags and mutable aliases: code loads models:/churn@champion, and promoting a new version means moving the alias. mlflow models serve runs a model as a local REST server, mlflow models build-docker builds an image, and the same model can be deployed to Amazon SageMaker AI, Azure Machine Learning or Kubernetes.

Since version 2.14 (June 2024) and MLflow 3 (June 2025), much of the work has been for LLM apps and agents. Tracing records the inputs, outputs and metadata of every step, is OpenTelemetry-compatible, and is turned on with one line such as mlflow.openai.autolog(), with autologging for OpenAI, Anthropic, LangChain, LlamaIndex, DSPy, Pydantic AI and others. mlflow.genai.evaluate runs a dataset through your app and scores the answers with built-in or custom LLM judges. The Prompt Registry versions prompt templates with immutable versions and aliases, and the AI Gateway puts one OpenAI-compatible API in front of several model providers, with fallbacks, traffic splitting, budgets and guardrails. MLflow is a Linux Foundation project; Databricks, Amazon SageMaker AI and Azure Machine Learning offer it as a managed service. The latest release is 3.17.2, from October 2026.

Why teams pick it

  • Works with almost any library and runs anywhere, from a laptop with SQLite to a shared server on PostgreSQL and S3, and the same client code talks to managed MLflow on Databricks, SageMaker AI or Azure Machine Learning
  • A registry with aliases: clients load models:/name@champion, so promotion and rollback are a pointer change, not a code change
  • One tool for classic models and LLM apps: experiment tracking, a model registry, OpenTelemetry-compatible tracing, LLM-judge evaluation and prompt versioning
  • Apache 2.0 under the Linux Foundation, with a large contributor base and frequent releases

Watch out for

  • A self-hosted server is yours to secure and run: authentication and role-based permissions must be configured, and database schema upgrades need all writers stopped, since mixed-version rolling upgrades are not supported
  • It records and packages models but doesn’t scale them: mlflow models serve is a single server, and production serving is left to SageMaker AI, Azure Machine Learning, Kubernetes or a serving framework
  • The feature set has grown fast and moved toward GenAI, and some features first appear on Databricks: MLflow 3’s new evaluation suite was Databricks-only at launch
  • Older models saved as pickles can run code when loaded; recent releases add MLFLOW_ALLOW_PICKLE_DESERIALIZATION guards to more flavors, so load only models you trust

Alternatives

What all model serving and mlops have in common →Compare side by side →

How it fits with other technologies

Track a run, register a model, load it by alias, and trace LLM calls · python

import mlflow

mlflow.set_tracking_uri("http://localhost:5000")   # started with `uvx mlflow server`
mlflow.set_experiment("churn")

with mlflow.start_run():
    mlflow.log_param("max_depth", 6)
    mlflow.log_metric("val_auc", 0.91)
    mlflow.sklearn.log_model(sk_model=model, name="model",
                             registered_model_name="churn")   # -> version N

client = mlflow.MlflowClient()
client.set_registered_model_alias("churn", "champion", "3")
model = mlflow.pyfunc.load_model("models:/churn@champion")

mlflow.openai.autolog()   # every OpenAI call becomes a trace: inputs, outputs, tokens

See it in a real stack

No architecture uses MLflow yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2018–2026

Matei Zaharia and Cyrielle Simeone of Databricks announced MLflow on June 5, 2018. The post named four problems: there were countless ML tools, experiments were hard to track, results were hard to reproduce, and there was no standard way to deploy a model. The alpha had three parts: Tracking for parameters, metrics and files, Projects for packaging code with an MLproject file, and Models, a format with several “flavors” so different deployment tools could load the same model.

MLflow 1.4 added a Model Registry in beta in October 2019. On June 25, 2020 Databricks moved the project to the Linux Foundation, which counted more than 200 contributors and over 2 million downloads a month, to give it a vendor-neutral home. Cloud platforms adopted its API: Azure Machine Learning workspaces act as MLflow tracking servers, and SageMaker AI hosts managed MLflow.

With large language models the focus moved to apps and agents. MLflow 2.14 added tracing in June 2024. MLflow 3, on June 11, 2025, made the logged model a first-class object rather than a file attached to a run, and added GenAI evaluation, prompt optimization and more tracing integrations. By 2026 the project described itself as an “AI engineering platform for agents, LLMs, and ML models”, with an AI Gateway and an Agent Server next to the original tracking and registry.

Why it’s built this way

Open interfaces instead of a closed platform
Teams try many ML libraries and deploy to many places, so a platform tied to one set of tools doesn’t fit. MLflow was designed to work “with any ML library, algorithm, deployment tool or language”, through REST APIs and simple file formats.
Flavors: one model, several ways to load it
A model saved once should be usable by many tools. Each flavor records how to load it, and the generic Python function flavor lets any MLflow model be served the same way.
Aliases instead of fixed stages
Early registries moved versions through fixed stages such as Staging and Production. Named, mutable aliases such as champion let teams define their own steps and point clients at a role rather than a version number.
Tracing built on OpenTelemetry
LLM apps are chains of model calls, retrievals and tool calls, and teams already had tracing systems. Following OpenTelemetry and its GenAI conventions lets MLflow exchange traces with other observability tools.

Timeline

  1. 2018

    Databricks announces MLflow in alpha (June 5)

  2. 2019

    Model Registry in beta in MLflow 1.4 (October)

  3. 2020

    MLflow joins the Linux Foundation (June 25)

  4. 2022

    MLflow 2.0 (November)

  5. 2024

    MLflow Tracing in 2.14 (June)

  6. 2025

    MLflow 3: logged models, GenAI evaluation, prompt optimization (June 11)

  7. 2026

    MLflow 3.17 (October)

Sources15 · facts checked 23 October 2026

Improve this page on GitHub