Try describing what you need:

Langflow logo

Langflow

★ 156.4k
MIT LicenseOpen Source — No Paywall10 Containers — 10 containers — heavy hosting footprintPackage · Binary · Docker +1Needs Postgres28+ active committers (12mo)

About

Langflow is an open source platform for creating AI-powered agents and workflows. It is aimed at developers who want a visual way to assemble flows while still being able to customize components in...

Community Ratings

No ratings yet

Features

  • visual builder interface
  • source code access
  • interactive playground
  • multi-agent orchestration
  • deploy as an API
  • export as JSON
  • deploy as an MCP server
  • observability integrations
  • enterprise-ready security and scalability

Details

Last Updated
Nov 6, 2026
Created
Feb 8, 2023
Install Methods
package-managerbinarydockersource
Requirements
Python 3.10–3.14uv
Default Port
7860web UI
API
REST
Backup & Export
native-export
Privacy & Independence
Cloud: Optional
Deployment

Deployment: Docker Compose ✓10 Containers — heavy hosting footprintRuns as 10 containers

Run Langflow yourself

Pick how much you want to manage.

4 more ways to host

Some links earn us a commission. netcup pays us one and is our preferred VPS host.

Is this your project? Sponsor a listing

Run Langflow with Docker Compose

Compose file from the Langflow project repository.

10 services · database: postgres · infra: traefik, postgres, redis, rabbitmq · 4 unclassified (pgadmin4, langflow-frontend, prometheus, grafana)

no resource limits declared

needs persistent storage (8 volumes)

deploy/docker-compose.yml · @ 3ec070e · scanned Nov 3, 2026

services:
  proxy:
    image: traefik:v3.0
    env_file:
      - .env
    networks:
      - ${TRAEFIK_PUBLIC_NETWORK?Variable not set}
      - default
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command:
      # Enable Docker in Traefik, so that it reads labels from Docker services
      - --providers.docker
      # Add a constraint to only use services with the label for this stack
      # from the env var TRAEFIK_TAG
      - --providers.docker.constraints=Label(`traefik.constraint-label-stack`, `${TRAEFIK_TAG?Variable not set}`)
      # Do not expose all Docker services, only the ones explicitly exposed
      - --providers.docker.exposedbydefault=false
      # Enable the access log, with HTTP requests
      - --accesslog
      # Enable the Traefik log, for configurations and errors
      - --log
      # Enable the Dashboard and API
      - --api
    deploy:
      placement:
        constraints:
          - node.role == manager
      labels:
        # Enable Traefik for this service, to make it available in the public network
        - traefik.enable=true
        # Use the traefik-public network (declared below)
        - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set}
        # Use the custom label "traefik.constraint-label=traefik-public"
        # This public Traefik will only use services with this label
        - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set}
        # traefik-http set up only to use the middleware to redirect to https
        - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.scheme=https
        - traefik.http.middlewares.${STACK_NAME?Variable not set}-https-redirect.redirectscheme.permanent=true
        # Handle host with and without "www" to redirect to only one of them
        # Uses environment variable DOMAIN
        # To disable www redirection remove the Host() you want to discard, here and
        # below for HTTPS
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`)
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.entrypoints=http
        # traefik-https the actual router using HTTPS
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.rule=Host(`${DOMAIN?Variable not set}`) || Host(`www.${DOMAIN?Variable not set}`)
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.entrypoints=https
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls=true
        # Use the "le" (Let's Encrypt) resolver created below
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.tls.certresolver=le
        # Define the port inside of the Docker service to use
        - traefik.http.services.${STACK_NAME?Variable not set}-proxy.loadbalancer.server.port=80
        # Handle domain with and without "www" to redirect to only one
        # To disable www redirection remove the next line
        - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.regex=^https?://(www.)?(${DOMAIN?Variable not set})/(.*)
        # Redirect a domain with www to non-www
        # To disable it remove the next line
        - traefik.http.middlewares.${STACK_NAME?Variable not set}-www-redirect.redirectregex.replacement=https://${DOMAIN?Variable not set}/$${3}
        # Redirect a domain without www to www
        # To enable it remove the previous line and uncomment the next
        # - traefik.http.middlewares.${STACK_NAME}-www-redirect.redirectregex.replacement=https://www.${DOMAIN}/$${3}
        # Middleware to redirect www, to disable it remove the next line
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-https.middlewares=${STACK_NAME?Variable not set}-www-redirect
        # Middleware to redirect www, and redirect HTTP to HTTPS
        # to disable www redirection remove the section: ${STACK_NAME?Variable not set}-www-redirect,
        - traefik.http.routers.${STACK_NAME?Variable not set}-proxy-http.middlewares=${STACK_NAME?Variable not set}-www-redirect,${STACK_NAME?Variable not set}-https-redirect

  backend: &backend
    image: "langflowai/langflow-backend:latest"
    depends_on:
      - db
      - broker
      - result_backend
    env_file:
      - .env
    healthcheck:
      test: "exit 0"
    deploy:
      labels:
        - traefik.enable=true
        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
        - traefik.http.routers.${STACK_NAME?Variable not set}-backend-http.rule=PathPrefix(`/api/v1`) || PathPrefix(`/api/v2`) || PathPrefix(`/docs`) || PathPrefix(`/health`)
        - traefik.http.services.${STACK_NAME?Variable not set}-backend.loadbalancer.server.port=7860

  db:
    image: postgres:15.4
    volumes:
      - app-db-data:/var/lib/postgresql/data/pgdata
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
    deploy:
      placement:
        constraints:
          - node.labels.app-db-data == true
    healthcheck:
      test: "exit 0"
    env_file:
      - .env

  pgadmin:
    image: dpage/pgadmin4
    networks:
      - ${TRAEFIK_PUBLIC_NETWORK?Variable not set}
      - default
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    env_file:
      - .env
    deploy:
      labels:
        - traefik.enable=true
        - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set}
        - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set}
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-http.rule=Host(`pgadmin.${DOMAIN?Variable not set}`)
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-http.entrypoints=http
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-http.middlewares=${STACK_NAME?Variable not set}-https-redirect
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.rule=Host(`pgadmin.${DOMAIN?Variable not set}`)
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.entrypoints=https
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.tls=true
        - traefik.http.routers.${STACK_NAME?Variable not set}-pgadmin-https.tls.certresolver=le
        - traefik.http.services.${STACK_NAME?Variable not set}-pgadmin.loadbalancer.server.port=5050

  result_backend:
    image: redis:6.2.5
    env_file:
      - .env
    ports:
      - 6379:6379
    healthcheck:
      test: "exit 0"

  celeryworker:
    <<: *backend
    env_file:
      - .env
    command: /bin/sh -c "python -m celery -A langflow.worker.celery_app worker --loglevel=INFO --concurrency=1 -n lf-worker@%h -P eventlet"
    healthcheck:
      test: "exit 0"
    deploy:
      replicas: 1

  flower:
    <<: *backend
    env_file:
      - .env
    networks:
      - default
    environment:
      - FLOWER_PORT=5555

    command: /bin/sh -c "python -m celery -A langflow.worker.celery_app --broker=${BROKER_URL?Variable not set} flower --port=5555"
    deploy:
      labels:
        - traefik.enable=true
        - traefik.docker.network=${TRAEFIK_PUBLIC_NETWORK?Variable not set}
        - traefik.constraint-label=${TRAEFIK_PUBLIC_TAG?Variable not set}
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-http.rule=Host(`flower.${DOMAIN?Variable not set}`)
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-http.entrypoints=http
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-http.middlewares=${STACK_NAME?Variable not set}-https-redirect
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.rule=Host(`flower.${DOMAIN?Variable not set}`)
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.entrypoints=https
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.tls=true
        - traefik.http.routers.${STACK_NAME?Variable not set}-flower-https.tls.certresolver=le
        - traefik.http.services.${STACK_NAME?Variable not set}-flower.loadbalancer.server.port=5555

  frontend:
    image: "langflowai/langflow-frontend:latest"
    env_file:
      - .env
    restart: on-failure
    deploy:
      labels:
        - traefik.enable=true
        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
        - traefik.http.routers.${STACK_NAME?Variable not set}-frontend-http.rule=PathPrefix(`/`)
        - traefik.http.services.${STACK_NAME?Variable not set}-frontend.loadbalancer.server.port=80

  broker:
    # RabbitMQ management console
    image: rabbitmq:3-management
    environment:
      - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER:-admin}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS:-admin}
    volumes:
      - rabbitmq_data:/etc/rabbitmq/
      - rabbitmq_data:/var/lib/rabbitmq/
      - rabbitmq_log:/var/log/rabbitmq/
    ports:
      - 5672:5672
      - 15672:15672

  prometheus:
    image: prom/prometheus:v2.37.9
    env_file:
      - .env
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
    # ports:
    #   - 9090:9090
    healthcheck:
      test: "exit 0"
    deploy:
      labels:
        - traefik.enable=true
        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
        - traefik.http.routers.${STACK_NAME?Variable not set}-prometheus-http.rule=PathPrefix(`/metrics`)
        - traefik.http.services.${STACK_NAME?Variable not set}-prometheus.loadbalancer.server.port=9090

  grafana:
    image: grafana/grafana:8.2.6
    env_file:
      - .env
    # ports:
    #   - 3000:3000
    volumes:
      - grafana_data:/var/lib/grafana
    deploy:
      labels:
        - traefik.enable=true
        - traefik.constraint-label-stack=${TRAEFIK_TAG?Variable not set}
        - traefik.http.routers.${STACK_NAME?Variable not set}-grafana-http.rule=PathPrefix(`/grafana`)
        - traefik.http.services.${STACK_NAME?Variable not set}-grafana.loadbalancer.server.port=3000

volumes:
  grafana_data:
  app-db-data:
  rabbitmq_data:
  rabbitmq_log:
  pgadmin-data:

networks:
  traefik-public:
    # Allow setting it to false for testing
    external: false # ${TRAEFIK_PUBLIC_NETWORK_IS_EXTERNAL-true}

This file may be out of date. Check the Langflow documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Aug 7, 2026

Alternatives to Langflow

Dify.ai logo

Dify.ai

160.5k
An open-source platform for building, testing, and operating LLM-powered applications with workflows, RAG, agents, and observability.
Low Code DevelopmentArtificial IntelligencePermissive License+6
36 ContainersOpen CoreFOSS with Issues
Details
Flowise logo

Flowise

55.6k
Flowise is a visual tool for building AI agents.
Self Hosting SolutionsAI AgentsAI RAG Systems+3
Single Container
Details
Sim Studio logo

Sim Studio

30.0k
An open-source platform for building AI agents and orchestrating agentic workflows with integrations, LLMs, and vector databases.
Automation ToolsArtificial IntelligenceAI Tooling+4
Details
n8n logo

n8n

209.6k
n8n is a fair-code platform for building and deploying AI agents and workflow automations, with a visual editor, custom code, and 1500+ integrations.
Automation ToolsPermissive LicenseLow Code Development+5
Single ContainerSource AvailableNot FOSS
Details
AutoGPT logo

AutoGPT

187.9k
AutoGPT is a platform for creating, deploying, and managing continuous AI agents that automate complex workflows.
Artificial IntelligenceAutomation ToolsPermissive License+2
13 ContainersOpen Core
Details
Trigger.dev logo

Trigger.dev

16.7k
An open-source platform for building and deploying AI workflows and agents in TypeScript.
Task RunnersArtificial IntelligenceAutomation Tools+4
Details

Related Software

Langfuse logo

Langfuse

37.1k
Langfuse is an open source LLM engineering platform for teams to develop, monitor, evaluate, and debug AI applications.
IDE ToolsArtificial IntelligencePermissive License+5
6 ContainersFOSS with Issues
Details
mastra logo

mastra

29.4k
Mastra is a TypeScript framework for building AI-powered applications, agents, workflows, and MCP servers.
Artificial IntelligenceAI AgentsAI Tooling+4
2 ContainersOpen CoreNot FOSS
Details
Agenta logo

Agenta

4.9k
Agenta is an open-source LLMOps platform for building production-grade LLM applications with prompt management, evaluation, and observability.
Artificial IntelligenceGenerative AIPermissive License+4
Details
OpenHands logo

OpenHands

92.8k
An AI-driven development platform with a software agent SDK, CLI, local GUI, and hosted cloud offering.
Artificial IntelligenceAI Coding AssistantAI Agents+2
Single ContainerOpen Core
Details
Activepieces logo

Activepieces

25.4k
Activepieces is an open source, AI-first automation platform positioned as a replacement for Zapier.
Automation ToolsArtificial IntelligencePermissive License+4
Open Core
Details
omnara logo

omnara

3.4k
Omnara is an open-source managed agent platform for running AI agents on any model and any machine, with built-in tools, secrets, permissions, and streaming.
AI AgentsAI ToolingPlatform as a Service+3
10 ContainersFully FOSS
Details
Composio logo

Composio

30.9k
Composio SDK provides TypeScript and Python libraries for integrating AI agents with external apps and services.
API ManagementAI AgentsAutomation Tools+2
Cloud Required
Details
bolt.diy logo

bolt.diy

20.0k
An open source AI coding assistant that lets users build full-stack Node.js apps in the browser or desktop app while choosing from many LLM providers.
Artificial IntelligenceAI Coding AssistantPermissive License+1
3 Containers
Details
flue logo

flue

8.6k
Flue is a TypeScript framework for building autonomous agents with a programmable harness, tools, skills, sandboxes, and deployment options.
AI AgentsAutomation ToolsAI Tooling+1
Details
openrig logo

openrig

8.7k
OpenRig is a CLI tool for defining, launching, and managing a team of AI coding agents in a persistent shared rig.
AI AgentsAI Coding AssistantAI Harness+1
Details
big-AGI logo

big-AGI

7.2k
Big-AGI is a multi-model AI workspace for experts, focused on chat, model comparison, and local-first self-hosting.
Artificial IntelligenceAI InterfacesAI Media Generation+2
Open Core
Details