Build AI applications with visual workflows and Python components.
On this page
Overview
Langflow maps its Python backend, frontend, and component system. It explains dependency direction, distinguishes an authorization interface from the plugin that enforces it, and protects class names stored in saved flows. Each package has its own environment and tests.
Documents
├── ├── · imports AGENTS.md, .claude/CLAUDE.md (unavailable)└── .claude └── CLAUDE.md · unavailable at this commit
The package chain gives an agent a way to judge where new imports and provider integrations belong. Architecture is described as a dependency constraint, beyond a directory listing.
Source excerpt starting at line 93.
93The public dependency direction is `langflow → langflow-core → langflow-base → lfx`.
02 / Architecture as narrative
Distinguish a switch from enforcement
The authorization notes explain that enabling the interface alone does not introduce a deny policy. An agent changing permission-sensitive behavior must account for the registered implementation.
Source excerpt starting at line 112.
112Default is **off**: `LANGFLOW_AUTHZ_ENABLED=false`. When enabled with only the OSS stub registered, every check returns allow — the stub is a no-op so routes stay wired and audit rows still flow. Real allow/deny requires a registered authorization plugin.
03 / Hard prohibitions
Protect identifiers stored in user data
Class names are part of saved-flow compatibility. A rename that looks local in Python can break existing documents, so the instruction calls it out as a persistent contract.
Source excerpt starting at line 147.
147**IMPORTANT:** Changing a component's class name is a breaking change and should never be done. The class name serves as an identifier used to match components in saved flows and to flag them for updates in the UI. Renaming it will break existing flows that use that component.
04 / Verification by change type
Include the subpackage development environment
The test setup names the package whose development dependencies must be synchronized. A root install is not evidence that component test dependencies are present.
Source excerpt starting at line 198.
198- When running tests inside a sub-package (e.g. `langflow-base`, `lfx`), sync that package's dev group first: `uv sync --group dev --package langflow-base`. The default `uv sync` only resolves the top-level workspace and may leave dev-only test deps (e.g. `fakeredis`) uninstalled.
Ideas for your repo
01Write the allowed dependency direction as an explicit chain.
02Document when a feature flag enables an interface without enforcing a policy.
03Identify code names that are serialized into user data.
04Include package-specific dependency setup beside test commands.
Sponsored by
Give your agents the whole story.
These instructions explain how to work in Langflow. Modem shows your agents what customers said, who is affected, and what changed.