mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-24 06:42:21 +08:00
# Conflicts: # .secrets.baseline # pyproject.toml # src/backend/base/langflow/initial_setup/starter_projects/Pokédex Agent.json # src/backend/base/langflow/initial_setup/starter_projects/Structured Data Analysis Agent.json # src/backend/base/langflow/services/auth/service.py # src/backend/base/langflow/services/job_queue/service.py # src/backend/base/pyproject.toml # src/backend/tests/unit/components/models_and_agents/test_cuga_agent.py # src/backend/tests/unit/test_redis_job_queue_service.py # src/bundles/lfx-bundles/src/lfx_bundles/deepseek/deepseek.py # src/bundles/lfx-bundles/src/lfx_bundles/glean/glean_search_api.py # src/bundles/lfx-bundles/src/lfx_bundles/homeassistant/home_assistant_control.py # src/bundles/lfx-bundles/src/lfx_bundles/homeassistant/list_home_assistant_states.py # src/bundles/lfx-bundles/src/lfx_bundles/huggingface/huggingface_inference_api.py # src/bundles/lfx-bundles/src/lfx_bundles/lmstudio/lmstudioembeddings.py # src/bundles/lfx-bundles/src/lfx_bundles/xai/xai.py # src/frontend/package-lock.json # src/frontend/package.json # src/lfx/pyproject.toml # src/lfx/src/lfx/_assets/component_index.json # src/lfx/src/lfx/components/files_and_knowledge/filesystem.py # src/lfx/tests/unit/components/tools/test_filesystem_deny_list.py # uv.lock
116 lines
6.5 KiB
Plaintext
116 lines
6.5 KiB
Plaintext
---
|
|
title: Langflow Extensions overview
|
|
slug: /extensions-overview
|
|
---
|
|
|
|
import Icon from "@site/src/components/icon";
|
|
|
|
Langflow ships component bundles that are maintained and released separately from the core Langflow server as Extensions.
|
|
Instead of every integration being built into `langflow`, bundles ship as pip-installable packages.
|
|
|
|
There are two install stories:
|
|
|
|
* **`uv pip install langflow`** — everything, same as today. The `langflow` metapackage pins the component packages below as regular pip dependencies, so a flat install is functionally identical to earlier releases.
|
|
* **`uv pip install lfx`** — the engine only, with no component bundles. Bring your own bundles: install `lfx-bundles`, individual `lfx-<provider>` packages, or your own extensions alongside it.
|
|
|
|
A component's identity is its **bundle name**, never the package it ships in.
|
|
The canonical ID `ext:<bundle>:<Class>@official`, the palette grouping, and saved flows are identical whether a provider ships in the `lfx-bundles` metapackage or in its own standalone package, so providers can move between packages without affecting your flows.
|
|
|
|
## Current Extension bundles
|
|
|
|
The following component packages are included with `uv pip install langflow`:
|
|
|
|
| Package | Contents |
|
|
|---------|----------|
|
|
| `lfx-bundles` | The long tail of provider bundles (vector stores, model providers, search and tool integrations) as a single package. Each provider is one bundle, for example `tavily`, `qdrant`, or `ollama`. Per-provider pip extras carry the third-party SDKs, and the generated `lfx-bundles[all]` extra pulls all of them. |
|
|
| `lfx-openai`, `lfx-anthropic`, `lfx-amazon`, `lfx-datastax`, `lfx-cohere` | Partner providers as standalone packages, each on its own release cadence. |
|
|
| `lfx-arxiv` | [arXiv](/bundles-arxiv) search |
|
|
| `lfx-docling` | [Docling](/bundles-docling) document parsing and chunking |
|
|
| `lfx-duckduckgo` | [DuckDuckGo](/bundles-duckduckgo) web search |
|
|
| `lfx-ibm` | [IBM](/bundles-ibm) watsonx.ai LLM and embeddings, IBM Db2 Vector Store |
|
|
|
|
The internal identifier for each component changes.
|
|
For example, a DuckDuckGo component previously referenced as a `DuckDuckGoSearchComponent` class is now `ext:duckduckgo:DuckDuckGoSearchComponent@official`.
|
|
Langflow rewrites these references automatically when you open a saved flow, so in most cases the migration is invisible.
|
|
|
|
## If a component is missing after an upgrade
|
|
|
|
If you open a flow and a node shows an error like `component-not-found`, it means the automatic migration couldn't resolve the component reference.
|
|
This can happen when:
|
|
|
|
* The bundle the component came from was not installed in the upgraded environment.
|
|
* The component was referenced by a name that appears in more than one bundle (`component-name-ambiguous`).
|
|
|
|
In both cases the error message includes a hint that names the expected canonical ID. For example:
|
|
|
|
```text
|
|
component-not-found-with-hint: DuckDuckGoSearchComponent not found.
|
|
Hint: try ext:duckduckgo:DuckDuckGoSearchComponent@official
|
|
```
|
|
|
|
Use the bundle name from the hint, such as `duckduckgo` in this example, to find and install the correct extension package, and then reload the flow.
|
|
|
|
## Install a bundle extension
|
|
|
|
If a bundle you need is not included in your Langflow environment, install it with pip:
|
|
|
|
```bash
|
|
uv pip install lfx-duckduckgo
|
|
uv run langflow run
|
|
```
|
|
|
|
Langflow discovers the package at server startup and loads the components into the palette automatically.
|
|
No additional configuration is required.
|
|
|
|
To see what extensions are currently loaded, run:
|
|
|
|
```bash
|
|
lfx extension list
|
|
```
|
|
|
|
:::note
|
|
`lfx extension list` shows manifest-shipping extensions only.
|
|
Manifest-less packages such as `lfx-bundles` are discovered and loaded at server startup but are not listed by this command.
|
|
:::
|
|
|
|
## Legacy import paths and the shim error
|
|
|
|
Code that imports components by their old in-tree path, such as `from lfx.components.qdrant import QdrantVectorStoreComponent`, keeps working as long as the bundle that now ships the provider is installed — which `pip install langflow` always guarantees.
|
|
A small import shim at the old location forwards to the bundle package.
|
|
|
|
On an engine-only install with no bundles, the same import raises an actionable error that names exactly what to install:
|
|
|
|
```text
|
|
ModuleNotFoundError: The 'qdrant' components moved to the 'lfx-bundles' distribution.
|
|
Install it with: pip install lfx-bundles (or 'pip install langflow', which bundles it).
|
|
```
|
|
|
|
If you `pip install lfx` directly and your code depends on components, either switch to `lfx[bundles]` (see [LFX and Langflow version compatibility](/lfx-compatibility)) or pin the specific `lfx-<provider>` packages you use.
|
|
The shims are a compatibility bridge and will be removed in a future major milestone; prefer the bundle packages' own import paths for new code.
|
|
|
|
## Override a bundled component
|
|
|
|
Want to replace a provider that ships in `lfx-bundles` with your own implementation? **Ship a manifest. A manifest always wins.**
|
|
|
|
Discovery resolves bundle-name collisions by source precedence: installed manifest-shipping extensions beat seed-directory extensions, which beat manifest-less bundle packages, which beat local development paths.
|
|
Package your override as an extension with an `extension.json` that declares the same bundle name, and your copy shadows the bundled one — the server logs a typed `bundle-shadowed` warning naming both sources so the shadowing is visible.
|
|
This works the same for first-party and third-party packages, and it is also why a provider can graduate from `lfx-bundles` to its own standalone package with no coordinated release.
|
|
|
|
## Version compatibility
|
|
|
|
`bundle_api_version` is the single compatibility number between bundles and the engine.
|
|
Manifest-shipping extensions declare the contract versions they support with `lfx.compat: ["1"]`; the engine refuses to load an extension that does not list its current version.
|
|
Manifest-less packages such as `lfx-bundles` carry no manifest, so their compatibility is enforced at install time by their `lfx>=X,<Y` dependency pin instead.
|
|
|
|
There is no version arithmetic across the `lfx`, `lfx-bundles`, and `lfx-<provider>` lines: each package releases on its own cadence, and the pip dependency ranges plus `lfx.compat` do the coordination.
|
|
|
|
## Build your own extension
|
|
|
|
If you have custom components that you want to distribute and version independently of your Langflow install, you can package them as an extension.
|
|
|
|
For more information, see [Build your first Langflow Extension](./extensions-quickstart.mdx).
|
|
|
|
## See also
|
|
|
|
- [Build your first extension](./extensions-quickstart)
|
|
- [Manifest reference](./extensions-manifest) |