Langflow's source run binds 0.0.0.0 while the packaged run binds 127.0.0.1
Langflow is a powerful tool for building and deploying AI-powered agents and workflows.
At a glance
- What is it?
- langflow-ai/langflow is an MIT licensed Python platform for building AI agents and workflows visually and exposing them as an API or an MCP server. Its quickstart is short, but the Makefile defaults, the SQLite path default, and a dozen pre-1.0 bundle dependencies are where a self-hosted deployment actually gets decided.
- Who is it for?
- Langflow suits someone who wants to draw a flow, test it in the playground, and expose it as an API or an MCP tool without hand-writing integration code, and who can live with a dependency set that is mostly pre-1.0. Before you deploy it, set LANGFLOW_HOST explicitly, because the packaged run starts on 127.0.0.1:7860 while the Makefile path defaults host to 0.0.0.0 with log_level at debug, so the two routes are not the same exposure.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The packaged run starts on localhost, the source run starts on 0.0.0.0
The quickstart says Langflow starts at http://127.0.0.1:7860 after `uv run langflow run`. The Makefile, which is what `make run_cli` uses when you run from a clone, defaults differently:
log_level ?= debug
host ?= 0.0.0.0
port ?= 7860
env ?= .env
open_browser ?= trueSo the same application binds loopback when installed as a package and every interface when started from source, and the source path also defaults its log level to debug. The .env.example agrees that the host is unset by default, since LANGFLOW_HOST= carries an example value of localhost rather than a real one. Consequence for a reader: a contributor running make run_cli on a laptop, a shared box, or a cloud dev instance is serving a visual authoring tool with a database on all interfaces, with no authentication described anywhere in the readme. Anyone following the pip quickstart instead gets a loopback-only listener and never sees the difference. The Makefile also reads its settings from a .env file by default through env ?= .env, and it carries a set of load_test targets covering setup, listing flows, running, a quick path, a stress path, an example path, cleanup, and remote variants, so the load test harness and the bind address are configured in one file the readme never mentions.
The default database is a SQLite file in whichever directory you are in
.env.example shows the shipped default:
LANGFLOW_CONFIG_DIR=
LANGFLOW_SAVE_DB_IN_CONFIG_DIR=
LANGFLOW_DATABASE_URL=sqlite:///./langflow.dbThe relative path is the problem, and the comment above the second variable spells out the consequence: if it is false, the database is saved in Langflow's root directory, which means the database will be deleted when Langflow is uninstalled and will not be shared between different virtual environments. The quickstart compounds this by telling you to install from a fresh directory and then to run uv run langflow run, so the location of langflow.db depends on the directory you launched from rather than the install prefix. A Postgres example is given as a commented alternative, and LANGFLOW_DATABASE_CONNECTION_RETRY=false means a failed connection is not retried. Consequence: back up or relocate that file deliberately, because an uninstall is a data loss event and a second virtualenv starts with an empty flow list. The same file shows LANGFLOW_ALEMBIC_LOG_TO_STDOUT=False, so schema migration output stays off your console unless you ask for it, and LANGFLOW_LANGCHAIN_CACHE is already set to SQLiteCache, which means the first run creates cache state in the same place as the database you just learned is disposable.
About ten lfx bundles resolve together, all below 1.0.0
The dependency block pairs langflow-base~=1.12.0 with a wall of partner bundles, each bounded above at 1.0.0: lfx-ibm>=0.2.5, lfx-docling>=0.1.7, lfx-datastax>=0.1.9, lfx-toolguard>=0.1.2, lfx-openai>=0.1.5, lfx-anthropic>=0.1.7, lfx-azure>=0.1.0, lfx-ollama>=0.1.1, lfx-amazon>=0.1.7, and lfx-cohere>=0.1.4. The comment above them explains the policy and its reason: Langflow declares bounded ranges for every curated lfx package and never exact pins, because exact pins in reusable library metadata create resolver conflicts for downstreams that depend on a different version, and exact pins for reproducibility live in uv.lock and the release-build manifests instead. It also notes that partner bundles follow their own 0.1.x cadence and that the lfx-bundles metapackage stays opt-in. Consequence: `uv pip install langflow -U` is a coordinated resolve of a dozen pre-1.0 packages, so the lockfile is the only real boundary, and no floor in the manifest tells you what you will actually get.
The root package.json is a stub with a single devDependency
The root package.json contains nothing but a devDependencies block:
{
"devDependencies": {
"@types/node": "^25.5.0"
}
}The rest of the project is Python. There is a src/ tree, a Makefile, a second Makefile.frontend, and the Makefile itself points at the compiled frontend through path = src/backend/base/langflow/frontend. Consequence for a contributor: package.json is not an entry point for the JavaScript toolchain, and running npm install at the root gives you a Node type definition and nothing else, so anyone expecting to build or run the UI from the root manifest will conclude the frontend is missing when it is simply driven by make. The rest of the toolchain is spread across configuration files instead, with .pre-commit-config.yaml, .secrets.baseline, codecov.yml, .coderabbit.yaml, and a .whitesource entry, plus a .composio.lock that pins a third-party integration separately from the Python lock. Documentation and process live in their own top-level files instead, with DEVELOPMENT.md for the source route the readme points at, DESIGN.md, RELEASE.md, CONTRIBUTING.md, SECURITY.md, BUNDLE_API.md, a ci-skip-analysis.md, and both AGENTS.md and AGENTS-example.md alongside CLAUDE.md, so a repository of this size splits its guidance by audience and by file type rather than into one document.
There is no Linux desktop build
Langflow Desktop is presented as the easiest way to get started, on the grounds that all dependencies are included so you do not need to manage Python environments or install packages manually. It is available for Windows and macOS, and the download link goes to langflow.org/desktop. Linux is not in that list. Consequence for a reader on Linux: the one route that removes environment management does not exist for you, so you fall back to uv pip install langflow -U inside a virtual environment you own, or to `docker run -p 7860:7860 langflowai/langflow:latest`, and the dependency resolution the desktop build was meant to hide is exactly the work you inherit. The same gap applies to the version story, since the desktop build is a separate download with its own update cadence rather than a channel of the Python package. The Linux gap also changes what you have to read, because the desktop route is the one the readme calls easiest and the one that hides the install, while every Linux path starts with the environment and the dependency ranges described above.
The Makefile drives podman while the readme documents docker
The build configuration names its container tool explicitly:
DOCKER=podman
DOCKERFILE=docker/build_and_push.Dockerfile
DOCKERFILE_BACKEND=docker/build_and_push_backend.Dockerfile
DOCKERFILE_FRONTEND=docker/frontend/build_and_push_frontend.Dockerfile
DOCKER_COMPOSE=docker_example/docker-compose.ymlThree separate Dockerfiles exist for the combined image, the backend, and the frontend, so the build can be done per component. The readme's own Docker route is a different tool and an unpinned tag:
docker run -p 7860:7860 langflowai/langflow:latestConsequence for a reader: the make targets and the documented command are not the same path, podman versus docker, so a script that assumes one may not run on a machine that only has the other. And the :latest tag means the image behind a working deployment changes without your command changing, so pin a version before you treat a container as reproducible. The compose file the Makefile points at lives under docker_example/, not docker/, which is a hint that it is illustrative. The readme calls the local install recommended, which quietly makes podman and podman-specific flags a build-time dependency for anyone who just wants to contribute.
The build greps pyproject.toml for its version and its Python floor
Two values the build depends on are extracted with text tools rather than read as TOML:
VERSION=$(shell grep "^version" pyproject.toml | sed 's/.*\"\(.*\)\"$$/\1/')
PYTHON_REQUIRED=$(shell grep '^requires-python[[:space:]]*=' pyproject.toml | sed -n 's/.*\"\([^\"]*\)\".*/\1/p')Neither pattern is a parser. The version pattern requires a line beginning with version, and the Python requirement pattern requires the key at the start of a line with optional spacing, so both break on a reformat of the file. The floor and ceiling also live in two places: pyproject.toml carries requires-python = ">=3.10,<3.15", while the readme states Requires Python 3.10 through 3.14 in prose. Consequence for a maintainer: a reformatted pyproject.toml can leave make deriving an empty version while the package still builds correctly, and any change to the supported range has to be made in both the manifest and the readme or the two will disagree. The version derived this way is also the only place the 1.12.4 in pyproject surfaces to the build.
Editorial conclusion
Langflow suits someone who wants to draw a flow, test it in the playground, and expose it as an API or an MCP tool without hand-writing integration code, and who can live with a dependency set that is mostly pre-1.0. Before you deploy it, set LANGFLOW_HOST explicitly, because the packaged run starts on 127.0.0.1:7860 while the Makefile path defaults host to 0.0.0.0 with log_level at debug, so the two routes are not the same exposure. Set LANGFLOW_SAVE_DB_IN_CONFIG_DIR or accept a langflow.db file in your working directory that is deleted when Langflow is uninstalled and is not shared between virtual environments. Treat uv.lock as the only reproducibility boundary, since the project deliberately ships bounded ranges for its lfx bundles rather than exact pins. Remember there is no Linux desktop build, that the Makefile drives podman while the readme documents docker, and that the container command uses the latest tag with no version pin.
Frequently asked questions
What is Langflow used for?
For building and deploying AI-powered agents and workflows. The readme describes a visual authoring experience plus built-in API and MCP servers that turn every workflow into a tool, with a playground for step-by-step testing and export as JSON for Python apps.
Is Langflow free to use?
The license is MIT in both the repository and pyproject.toml, and the readme states Langflow is completely open source and can be deployed to all major deployment clouds. It names no paid tier of its own and points to the deployment guides instead.
how to install langflow
From a fresh directory run `uv pip install langflow -U` with Python 3.10 to 3.14 and uv available, then start it with `uv run langflow run`. There is also a desktop build for Windows and macOS, `docker run -p 7860:7860 langflowai/langflow:latest`, and `make run_cli` from a clone.
how to use langflow in production
The readme says Langflow is completely open source and points to the Langflow deployment guides. The repository carries render.yaml, a deploy/ directory, and docker_example/, but the readme does not describe authentication, scaling, or a production configuration file.
how to use mcp in langflow
Deploying as an MCP server is one of the listed highlight features, turning flows into tools for MCP clients, and the intro describes built-in API and MCP servers alongside the visual builder.
Is Langflow owned by IBM?
The readme names no owner or parent company. pyproject.toml lists seven individual maintainers, and the dependency list includes lfx-ibm>=0.2.5,<1.0.0 among the partner bundles described in the release coordination comment.
Official sources
Where this project is recommended
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/langflow-ai-langflow)