* fix: display proper tool name and description in tool mode output When a component runs as a tool (connected to an Agent), the output modal now shows the proper tool name, description, and tags instead of "Tool 1". This builds tool metadata from the component's output method name and description for proper display in the ToolOutputDisplay component. * test: add unit tests for tool mode event emission Add tests to verify that components running in tool mode properly emit events to the frontend for logs visibility and tool metadata display. * [autofix.ci] apply automated fixes * fix: use public accessor for component logs instead of private attribute Add get_logs() method to Component class and use it in component_tool.py to fix Ruff SLF001 (private-member-access) violation flagged by CodeRabbit. * fix: emit real-time log SSE events for components running in tool mode - Set _current_output = TOOL_OUTPUT_NAME in tool wrappers so self.log() fires and logs are attributed to the component_as_tool output - Register on_log event in EventManager with thread-safe queue enqueue via call_soon_threadsafe for sync tools running in thread executor - Register on_log in production event manager (JobQueueService) - Add appendLogToFlowPool Zustand action to incrementally add logs - Handle "log" SSE event in buildUtils to update flowPool in real-time - Fix displayOutputPreview to also check data.logs[outputName].length * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * [autofix.ci] apply automated fixes (attempt 3/3) * fix: address PR review issues for tool mode logs visibility - Fix TypeError: add output_name param to _build_output_function and _build_output_async_function (called with 4 args but only took 3) - Fix double-dispatch bug in event_manager.send_event: separate loop detection from queue dispatch to avoid misdiagnosing queue RuntimeErrors - Improve event_manager error handling: warn on QueueFull, error with traceback on unexpected failures, warn when loop is unavailable - Fix TypeScript type: VertexDataTypeAPI.logs uses LogsLogType[] (array) and remove the 3 as any casts in appendLogToFlowPool - Add input validation in buildUtils.ts log event handler to guard against undefined keys corrupting the flow pool - Add server-side logger.error on tool execution failure with exc_info - Fix tests: replace end_vertex assertions (never emitted by tool path) with build_end/log assertions; add LoggingCalculator subclass to test real-time log event emission Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * [autofix.ci] apply automated fixes * fix: store tool mode logs under component_as_tool output key - In get_tools(), pass TOOL_OUTPUT_NAME instead of output.name to _build_output_function/_build_output_async_function so self.log() events are stored under 'component_as_tool' key in flowPool, matching what the component_as_tool output's inspect modal reads - Fix emptyOutput in NodeOutputfield to return false when logs exist, preventing disabledInspectButton being vacuously true when outputs={} - Fix TypeScript undefined index type on internalOutputName in both displayOutputPreview and emptyOutput checks * fix: address ruff violations and test failures in tool mode logs - Fix ruff I001/SIM117/F401/TRY003/EM101 violations in test_component_toolkit.py - Replace private _event_manager/_current_output access with public setters in component_tool.py - Add set_current_output() public method to Component - Fix send_event() to call put_nowait directly in sync context (no event loop) - Fix _build_output_function/async to use getattr default fallback for non-component methods - Fix tests to use constructor-based _id to survive __deepcopy__ - Add TypeError guard in _get_method_return_type for mocked methods - Remove incorrect pytest.raises(ToolException) since handle_tool_error=True swallows it * fix: handle array logs in switchOutputView and guard build_end/log events - Export onEvent for testability - Guard build_end event against missing data.id to prevent state corruption - Type results as OutputLogType | LogsLogType[] in SwitchOutputView to handle tool mode logs arriving as an array - Guard resultType/resultMessage against array case to prevent crashes - Add tests for onEvent log/build_end paths and appendLogToFlowPool store method * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
LANGFLOW_CONFIG_DIR to absolute and update docker compose to use absolute path (#10106)
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.13 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.