* feat: add wxO agent name to api list items * feat: expose wxO agent metadata in deployment provider data Add a validated Watsonx Orchestrate deployment item provider_data contract that carries agent name, display name, description, tool IDs, environments, and detail-only LLM metadata. Use that shared contract in the adapter service and API mapper so list, get, sync, and snapshot binding paths parse provider metadata consistently and fail with structured internal errors when the adapter payload is invalid. Update unit coverage for list/get shaping, sync provider_data, optional LLM handling, empty tool IDs, and contract validation failures. * feat(deployments): rename deployment label to display name Rename deployment DB/local contracts from name to display_name so resource_key remains the provider identity and duplicate display labels are allowed. - Add Alembic migration to rename deployment.name, drop provider-scoped display-name uniqueness, preserve resource_key uniqueness, and restore downgraded names safely. - Update Deployment model, CRUD create/update/list/count paths, related attachment queries, validation, and conflict messages for display_name. - Remove deployment display-name conflict checks so duplicate labels can coexist under the same provider account. - Reject local DB names filters unless load_from_provider=true, keeping names as provider technical-name filtering only. - Update deployment API route handling and base/watsonx mapper response shaping to read display_name from local rows. - Update backend unit and integration tests across deployment CRUD, route handlers, mappers, sync, telemetry, flow/project responses, names filters, and attachment paths. * Update deployment API contract to use display_name Rename deployment REST request and response fields from name to display_name for Langflow-tracked deployments while preserving provider-only names filtering for load_from_provider=true. Map display_name through create, update, get, list, and status responses, and document that stored/displayed deployment names are synced from the provider. Update deployment mappers and route tests for the new contract, including rejection of DB-mode names filtering and integration coverage for local display_name responses versus provider name payloads. * feat: sync provider deployment display metadata - Rename deployment-facing name semantics toward display_name while preserving resource_key as the stable provider identity - Add provider metadata extraction contracts for list/get sync and wire routes through shared sync helpers - Sync provider-owned display_name and description into local deployment rows on list/get - Preserve updated_at during provider metadata sync so read reconciliation does not look like a local edit - Decouple wxO technical agent names from user-facing display labels by generating langflow_agent_<id> names - Stop changing wxO technical name when updating display_name or description - Remove duplicated display_name and description from wxO provider_data for Langflow-tracked responses - Require wxO provider display metadata instead of falling back to technical names - Wrap malformed wxO get metadata as deployment errors instead of leaking KeyError - Update deployment attachment listing/counting to ignore orphaned flow-version links - Normalize LFX deployment create/update names with non-empty string constraints - Add real SQLite CRUD coverage for metadata sync and orphaned attachment filtering - Add deployment integration coverage for get/list provider metadata sync into DB rows - Add wxO mapper, service, route, and schema tests for display metadata, generated technical names, and update behavior * feat: align deployment API with provider display names - Move tracked wxO deployment create/update labels out of top-level request fields and into `provider_data.display_name`. - Remove top-level `display_name` from tracked deployment list, get, create, and update responses so provider-owned labels are returned through `provider_data`. - Add wxO `provider_data.name` for the provider technical agent name and `provider_data.display_name` for the user-facing agent label in create/update/get/list response shaping. - Remove deployment-list `names` filtering from the REST route, mapper list params, synced list helper, DB list/count helpers, LFX list schema, and wxO service query params. - Change existing wxO agent onboarding to fetch the provider resource first and create only the local Langflow tracking row. - Reject create-time mutations when `provider_data.existing_agent_id` is used, including display/LLM/tool/flow changes and explicit description updates. - Seed local deployment `display_name` and `description` for existing-agent onboarding from provider metadata instead of request fields. - Add provider-specific mapper hooks to build local `Deployment` models and local update kwargs from validated provider payloads. - Add `create_deployment_from_model` so routes can persist mapper-built deployment rows without duplicating provider-specific field extraction. - Require `provider_data.display_name`, `provider_data.llm`, and at least one flow/tool operation for new wxO agent creation. - Preserve metadata-only update support while routing wxO display-name updates through `provider_data.display_name` and description updates through the public description field. - Include wxO technical deployment names in adapter create/update result payloads so API responses can expose provider technical names alongside display labels. - Truncate provider-synced deployment descriptions to the deployment description limit before storing local metadata. - Remove the tracked deployment status route/schema and mark wxO status lookup as not configured instead of inferring health from draft-agent metadata. - Tighten LFX update validation by rejecting explicit null technical names while still allowing explicit null descriptions. - Keep wxO config and snapshot list responses as validated provider payloads instead of collapsing empty payloads to null. - Update backend and LFX tests for provider-data display labels, removed top-level display names, removed deployment-name filters, existing-agent onboarding, status route removal, metadata sync truncation, and update validation. * add changes from mapper base * feat: generate managed wxO technical names - Generate Langflow-managed wxO agent technical names as `lf_<normalized_display_name>_<short_uuid>` - Reject display labels that cannot contribute a normalized name segment instead of falling back silently - Generate a fresh wxO technical name when an agent display label changes - Keep update payload branching explicit so description, LLM, and name updates only send intended fields - Use update retry semantics for wxO agent updates - Make wxO name validation errors use explicit field labels such as `Connection app id`, `Tool name`, and `Agent name` - Update wxO adapter and mapper tests for managed technical names and resource-specific validation messages * fix: separate wxO deployment technical names from labels - Keep adapter-level deployment name fields as provider technical names. - Move wxO user-facing labels to provider_data.display_name. - Let the wxO adapter generate Langflow-managed technical names when spec.name is omitted. - Use the langflow_ prefix with fresh UUID suffixes for generated wxO technical names. - Strictly validate explicit technical names without rewriting them. - Reject explicit null or blank values for technical name, display name, LLM, and description updates. - Allow symbol-only display names by falling back to the resource type for generated names. - Clarify fallback naming errors when both display name and resource cannot produce a valid segment. - Add display_name support to wxO create and update payload contracts. - Align mapper create and rollback behavior with adapter-owned technical name generation. - Preserve rollback behavior for blank descriptions by mapping them to null. - Update LFX deployment schemas for optional adapter name fields. - Fix the deployment rename migration dependency to keep Alembic on a single head. - Update deployment and wxO tests for the new name contract and validation behavior. * refactor: separate wxO tool display and technical names - Replace user-facing wxO tool label inputs with tool_display_name in create, update, and rename payload contracts. - Remove mapper-side wxO tool technical-name normalization and validation, so user labels are no longer treated as provider technical names. - Add wxO flow-artifact provider-data validation that requires tool_display_name and generates provider_data.tool_name when omitted. - Keep provider_data.tool_name as the adapter-owned wxO technical name and provider_data.tool_display_name as the user-facing label. - Use generated provider_data.tool_name as the raw tool correlation key for tools.raw_payloads and operations[*].tool.name_of_raw. - Keep top-level raw BaseFlowArtifact.name separate from wxO technical names instead of overloading it for provider correlation. - Add mapper-local grouped flow-tool payload data containing display_name, provider_data, and raw_name for each flow version. - Build wxO flow tool provider_data through the adapter payload slot instead of a mapper-owned artifact schema. - Add create/update adapter payload builder helpers that validate provider payloads through the configured adapter slots. - Convert adapter-bound payload validation failures during mapper construction into internal contract errors rather than client 422s. - Remove the generic base mapper create-flow-artifact provider-data helper because wxO now owns provider-specific tool metadata. - Update create flow mapping to derive default tool_display_name from the flow name and generate technical tool names internally. - Update update flow mapping to derive tool_display_name for raw flow payloads and emit rename_tool only for existing attached tools. - Preserve bind, unbind, attach, remove, and rename operation behavior while switching raw selectors to generated technical names. - Add flow-version provider-data shaping that exposes app_ids, technical tool_name, and user-facing tool_display_name. - Require snapshot/list item provider data to include both technical name and display name so corrupt provider data fails fast. - Update deployment flow-version schema documentation to tell clients to display provider_data.tool_display_name and treat provider_data.tool_name as technical metadata. - Update wxO create/update planning to key raw tools by provider_data.tool_name instead of BaseFlowArtifact.name. - Update wxO tool creation to set wxO name from provider_data.tool_name and wxO display_name from provider_data.tool_display_name. - Remove redundant downstream None checks for tool_name and tool_display_name after schema validation guarantees them. - Remove the raw-tool-name helper and direct None filtering now that tool_name is generated by the provider-data schema. - Rename provider rename operation payload from new_name to tool_display_name. - Generate technical names for rename updates from tool_display_name rather than using the display label as the provider name. - Load current agent tools once during update apply and reuse that tool map for connection deltas, renames, and connection pre-seeding. - Consolidate existing-tool connection deltas and renames into one helper with separate delta and rename loops and one provider update batch. - Ensure a tool with both connection changes and a display-name rename is updated once using a single merged writable payload. - Preserve rollback snapshots for existing tools before connection or rename mutations are applied. - Pre-seed resolved connection ids from loaded agent tool bindings while letting explicit operation resolution overwrite provider-seeded values. - Keep later provider binding values for duplicate app ids during pre-seeding, matching explicit update overwrite semantics. - Add snapshot provider-data extraction in the wxO service that carries technical name, display name, and Langflow connection bindings. - Update mapper tests for create raw tool payloads, display-name overrides, generated technical names, raw correlation, and rename operations. - Update adapter schema tests for raw tool pools keyed by generated provider technical names and required display-name provider data. - Update service/update tests for rename batching, loaded-tool reuse, connection delta preservation, rollback behavior, and ownership checks. - Update snapshot and flow-version response tests to assert both technical and display tool metadata. * feat(deployments): sync provider display metadata - BE `api/v1`, `mappers/deployments`: Source local deployment create and update metadata from provider adapter results so `display_name` and `description` stay aligned with authoritative provider state. - BE `mappers/deployments`, `database/models/deployment`: Replace the removed deployment metadata schema with mapper-owned CRUD kwargs for list/get/update sync while preserving flexible provider-specific metadata handling. - BE `mappers/deployments`, `database/models/deployment`: Add description truncation with structured callsite/provider logging and log actual DB metadata sync writes with changed fields and before/after lengths. - BE `database/models/deployment`: Keep DB metadata sync focused on real changes so provider descriptions truncated locally do not cause unnecessary writes when cached values already match. - BE `services/adapters/deployment/watsonx_orchestrate`: Update wxO create/update result contracts to include provider display metadata, technical `name`, descriptions, and snapshot/tool binding details consistently. - BE `services/adapters/deployment/watsonx_orchestrate`: Build wxO create agent payloads once before provider create, carry the resolved provider description into create results, and keep wxO description fallback behavior explicit. - Both BE `services/adapters/deployment/watsonx_orchestrate` and FE `deploymentsPage`: Separate wxO technical names from user-facing display labels across adapter results, UI payloads, and tests. - FE `controllers/API/queries/deployments`, `deploymentsPage`: Move deployment create/update payloads to `provider_data.display_name` and `tool_display_name`, removing stale top-level `name` and `tool_name` usage. - FE `deploymentsPage`, `deploy-choice-dialog`: Default tool display names to the flow name instead of generated technical suffixes, and use keyed selected flow versions to distinguish repeated flow attachments. - FE `deploymentsPage`, `deploy-choice-dialog`: Update deployment attachment and deploy-choice dialog flows to use selected-flow-version keys, provider tool display names, and current flow names consistently. - FE `controllers/API/queries/deployments`, `deploymentsPage`: Remove provider name-check hooks, wxO name-normalization helpers, and related validation tests now that display names are not technical identifiers. - FE `deploymentsPage`: Relax deployment display-name validation to require only non-empty input, allow edit-mode display-name changes, and send changed display labels through `provider_data.display_name`. - FE `deploymentsPage`: Make deployment display/technical-name helpers null-safe when provider data is missing, with resource-key fallbacks for table, details, delete, and test flows. - FE `deploymentsPage`: Update deployments page UI to render display names separately from technical names and avoid exposing descriptions in table rows. - FE `controllers/API/queries/deployments`: Align create, patch, list, and attachment query types with provider metadata and `tool_display_name` contracts. - LFX `services/adapters/deployment`: Align deployment create results with the provider metadata contract by carrying type, technical name, and description instead of stale config/snapshot result fields. - BE `database/models/deployment`: Add a TODO for DB-level length enforcement of provider-synced display metadata. - Tests `src/backend/tests`, `src/frontend/**/__tests__`, `src/lfx/tests`: Add/update coverage for provider metadata sync, truncation, update persistence, response shaping, display-name validation, keyed attachments, and nullable provider data. * fix: tighten watsonx deployment payload contracts - Remove snapshot-name filtering from deployment snapshot listing: - Drop the `names` query parameter from the API route. - Remove `snapshot_names` from `SnapshotListParams`. - Remove wxO snapshot-name normalization and service lookup paths. - Remove direct E2E scenarios and unit coverage for snapshot-name listing. - Make wxO deployment provider data match the provider API contract: - Require wxO agent list/detail payloads to include `tools` and `llm`. - Read `agent["tools"]` and `agent["llm"]` directly instead of defaulting or normalizing missing provider fields. - Include `llm` in deployment list/provider-data shaping. - Preserve provider-owned strings instead of silently stripping or dropping blanks in result payloads. - Tighten wxO API and adapter payload validation: - Replace ad hoc string validators with shared non-empty string annotations where appropriate. - Reject explicit `null` for update scalar fields such as `llm` and `display_name`. - Require non-empty provider ids, tool ids, app ids, model names, environments, and execution ids in wxO payload schemas. - Fix wxO update payload patch semantics: - Build provider update bodies using `model_fields_set` so omitted `llm` and `display_name` stay omitted. - Keep `exclude_unset=True` for validated update payload serialization. - Preserve LLM-only update behavior without emitting omitted scalar fields as explicit nulls. - Simplify wxO update planning and rollback: - Remove `extract_agent_tool_ids` and rely on the wxO agent `tools` field directly. - Fetch only existing tools that update operations mutate or rename. - Stop pre-seeding connection bindings from unrelated attached tools; operation app ids now resolve through explicit update operations. - Adjust wxO deployment listing behavior: - Treat singular `environment` as a strict local filter. - Leave plural provider parameters as provider passthrough. - Rename deployments table header from `Name` to `Display Name`. - Update tests for the new contracts: - Remove snapshot-name route, mapper, service, and E2E coverage. - Add/update coverage for required `llm`, required provider metadata, null update scalar rejection, stale snapshot handling, and provider-owned string preservation. - Update frontend table header expectations. * direct key access in tool logs * fix(deployments): preserve full deployment descriptions - Remove provider metadata sync logging that emitted deployment identifiers and field length changes. - Remove description truncation from deployment mapper contracts and Watsonx metadata mapping. - Remove the deployment description max-length cap from LFX schemas, Langflow API schemas, and database CRUD validation. - Pass provider descriptions through unchanged during create, update, list, and get metadata sync flows. - Update backend, integration, and LFX tests to assert long descriptions are accepted and preserved. * refactor(deployments): centralize mapper payload slot validation - Move shared API request and adapter slot parsing into BaseDeploymentMapper. - Add provider label enforcement so mapper subclasses fail fast when error text cannot identify the provider. - Add outer request validation support for provider_data slots and map validation failures to 422 responses. - Move wxO existing-agent description conflict validation into the wxO create payload contract. - Update wxO mapper call sites to use the shared base parsing helpers. - Add focused tests for provider label enforcement, slot error mapping, outer request validation, and existing-agent description conflicts. * fix downgrade migration to actually recover unique constraint for the name column * fix(deployments): clarify wxo deployment name labels - Rename user-facing wxO deployment display-name labels from "Display Name" to "Name" across the deployment form, review step, table, loading state, and details modal. - Label the provider-backed technical identifier as "Technical Name" in deployment details so it is distinct from the editable display name. - Restore deployment descriptions under the deployment name in the deployments table. - Align validation copy and frontend tests with the updated label behavior. * fix(deployments): validate snapshot patch project scope - Reuse the existing deployment project-scope validator in the snapshot patch route before resolving provider credentials or mutating wxO artifacts. - Enforce that replacement flow versions belong to the tracked deployment project while keeping different-flow snapshot updates allowed. - Add route coverage proving project validation uses the deployment row's project_id and short-circuits before provider adapter work. - Update stale wxO mapper and sync test expectations for the current provider-data contract and mapper error messages. - Verified backend deployment tests and isolated lfx deployment tests are green. * test(deployments): align list integration tests with current API Update deployment list integration tests after removal of the names query parameter and list items without a top-level display_name. Assert synced display names via refreshed DB rows and provider entries instead of response fields that no longer exist. * rename test file * rename test file * fix(deployments): tighten wxo provider metadata contract Trust required wxO API fields directly, remove duplicate deployment names from provider_data, and keep mapper output sourcing names from top-level deployment metadata. * fix(deployments): preserve provider display names in db Keep deployment display names exactly as received while still rejecting blank values, and continue normalizing resource keys for DB lookups. * fix(deployments): align patch payload and display_name schema Send provider_data.llm only when changed in deployment PATCH payloads, preserving granular update behavior and no-op fallback semantics. Keep deployment.display_name nullable across migration/model paths and align wxO snapshot tests with the required display_name provider contract. * fix test * chore: remove updates to e2e adapter tests, defer to a follow up PR * refactor(deployments): simplify wxO provider list shaping Flatten provider list entries directly from adapter provider_data and validate once via parse_adapter_slot on deployment_list_result. Remove redundant per-item schema validation, id strip filtering, and description guesswork; require provider_data to be a dict and let canonical item fields override provider payload. * simplify downgrade migration to always append deploymend id to the name * fix(wxo): keep mapper imports free of IBM SDK via payloads Move Watsonx naming and field validation helpers into payloads.py so mapper -> payloads no longer imports utils.py and its IBM client deps. Point core modules and tests at the shared payload helpers and leave utils.py for runtime error/utility helpers only. * fix(watsonx): lazy adapter package imports and explicit registration Move adapter registration into register.py so importing payloads or the mapper does not load optional IBM SDK modules via package __init__.py. Use lazy package exports for service and types, dedupe update result IDs in WatsonxDeploymentUpdateResultData, and use direct BaseFlowArtifact field access in flow tool creation. * fix(test): align Watsonx guards with lazy package imports Skip SDK-backed service tests via importorskip on IBM packages instead of importing the lightweight watsonx_orchestrate package. Run schema and mapper tests against payloads directly and remove obsolete module-level skips so Py 3.10 CI can collect SDK-free Watsonx tests. * fix(test): skip explicit Watsonx modules without IBM SDK Guard Watsonx-named schema and mapper test modules by importing WatsonxOrchestrateDeploymentService, which exercises the lazy package export and fails when optional IBM SDK dependencies are unavailable. * fix(test): align deployment E2E mocks and review-step expectations Add provider_data.display_name to deployment mocks so delete and edit tests match getDeploymentDisplayName. Update review-step Playwright tests for display-name behavior that no longer blocks deploy on duplicates or numeric flow names. * fix ff test * fix(deployments): hide technical name in details and fix migration chain Show only the display name in the deployment info grid. Point the display_name rename migration at f6b3ce6845d4 so Alembic ordering is correct. * fix down revision * fix ruff * fix playwright test * fix(deployments): send only changed PATCH fields and trust API display names Stop re-sending unchanged description on update and skip the PATCH when there are no changes. Resolve UI labels from provider_data.display_name only, without resource_key or technical name fallbacks. * fix(deployments): restore i18n labels and polish edit-save UX Restore deployments.labelName/columnName and related keys instead of hardcoded English. Show an em dash when display_name is missing, remove dead toolNameErrors code, and toast when edit save has no changes. * fix(deployments): scope snapshot list and patch to deployment owner Remove the actor-owned provider lookup before deployment resolution so collaborators with READ on a shared deployment can list snapshots. Validate replacement flow versions under owner_id on snapshot PATCH, not the actor. * fix(test): deployment edit E2E and Biome import order Edit stepper skips PATCH when there are no changes, so the E2E test updates the deployment name before submit. Organize imports in select-gpt-model.ts for Biome. * fix(deployments): align provider metadata sync with RBAC owner scope Match metadata batch updates on (deployment id, owner user_id) so shared deployment list/get sync writes in the owner's namespace. Stop rolling back the outer session when attachment sync fails on GET so provider display_name/description sync is preserved. Group list attachment reconcile by deployment owner and use row.user_id for stale deletes. * fix(test): align deployment sync mocks with row owner scope Add user_id to deployment row mocks so list_deployments_synced tests match per-owner delete and metadata batch behavior. Remove unused imports in the deployment step-type component. * [autofix.ci] apply automated fixes * revert(deployments): restore rollback, direct metadata keys, single-owner list sync Per PR review: bring back outer session rollback on GET attachment-sync failure, fail fast on provider metadata dict access, and use a single user_id for list attachment reconcile (N+1 per-owner grouping deferred). Owner-scoped metadata batch updates in CRUD are unchanged. * update down revision * fix(frontend): remove unused i18n import in step-review utils Drop leftover import after refactor so Biome check passes. --------- Co-authored-by: himavarshagoutham <himavarshajan17@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Langflow is a powerful platform for building and deploying AI-powered agents and workflows. It provides developers with both a visual authoring experience and built-in API and MCP servers that turn every workflow into a tool that can be integrated into applications built on any framework or stack. Langflow comes with batteries included and supports all major LLMs, vector databases and a growing library of AI tools.
✨ Highlight features
- Visual builder interface to quickly get started and iterate.
- Source code access lets you customize any component using Python.
- Interactive playground to immediately test and refine your flows with step-by-step control.
- Multi-agent orchestration with conversation management and retrieval.
- Deploy as an API or export as JSON for Python apps.
- Deploy as an MCP server and turn your flows into tools for MCP clients.
- Observability with LangSmith, LangFuse and other integrations.
- Enterprise-ready security and scalability.
🖥️ Langflow Desktop
Langflow Desktop is the easiest way to get started with Langflow. All dependencies are included, so you don't need to manage Python environments or install packages manually. Available for Windows and macOS.
⚡️ Quickstart
Install locally (recommended)
Requires Python 3.10–3.14 and uv (recommended package manager).
Install
From a fresh directory, run:
uv pip install langflow -U
The latest Langflow package is installed. For more information, see Install and run the Langflow OSS Python package.
Run
To start Langflow, run:
uv run langflow run
Langflow starts at http://127.0.0.1:7860.
That's it! You're ready to build with Langflow! 🎉
📦 Other install options
Run from source
If you've cloned this repository and want to contribute, run this command from the repository root:
make run_cli
For more information, see DEVELOPMENT.md.
Docker
Start a Langflow container with default settings:
docker run -p 7860:7860 langflowai/langflow:latest
Langflow is available at http://localhost:7860/. For configuration options, see the Docker deployment guide.
🛡️ Security
For security information, see our Security Policy.
🚀 Deployment
Langflow is completely open source and you can deploy it to all major deployment clouds. To learn how to deploy Langflow, see our Langflow deployment guides.
⭐ Stay up-to-date
Star Langflow on GitHub to be instantly notified of new releases.
👋 Contribute
We welcome contributions from developers of all levels. If you'd like to contribute, please check our contributing guidelines and help make Langflow more accessible.