Skip to main content
Three of these draw boxes and arrows. Two are Python libraries. Knowing which is which is most of the decision.
The homelab runs a self-hosted layer for building LLM workflows and agents on top of its private model serving. Five tools cover the range from “connect an LLM to 400 other apps” to “write a multi-agent crew in Python.” They overlap on purpose at the edges; the trick is not deploying all five and using none of them.

The five, at a glance

ToolWhat it isShapeReach for it when
n8nGeneral workflow automation, 400+ integrationsVisual builder (service)You need to wire an LLM into other systems — email, calendars, webhooks, databases, SaaS APIs
DifyFull LLMOps platform — RAG, prompts, evals, agents, model routingVisual builder (service)You want a production AI app with retrieval, prompt versioning, and evaluation, low-code
LangFlowVisual node editor for LangChain graphsVisual builder (service)You want to prototype a chain by dragging nodes, then export it to Python
LangChainLibrary of composable LLM building blocksPython libraryYou’re writing code and want chains, tools, memory, and retrievers as primitives
CrewAIFramework for role-playing multi-agent “crews”Python libraryYou’re writing code and want agents with roles collaborating on a task

Services vs libraries

The single most useful distinction:
  • n8n, Dify, and LangFlow are services. They run as containers, expose a web UI, and you build inside them. They are deployed and have an HTTPS front door.
  • LangChain and CrewAI are libraries. You do not “deploy” them — you pip install them into application code. In this homelab they live together in one Python execution box that runs the agent code people write against them.
A common misread is treating LangChain/CrewAI as servers to stand up, or treating the three visual builders as interchangeable. They are not.

How they fit together

Solid edges are model calls; coral dashed edges are telemetry. Every tool is configured to its own model provider per its standard install — the local OpenAI-compatible endpoint, an external API, or both — never forced onto a shared backend that belongs to another stack. Each tool’s call is instrumented, and the traces fan out to the LLM observability pipeline.

Picking one — the blunt version

  • One tool only, and it has to be one → Dify. It covers RAG, prompts, evals, and agents without a separate automation tool.
  • Already automating with workflows → keep n8n and add Dify as the AI layer beside it.
  • Want to sketch a chain visually and walk away with Python → LangFlow.
  • Writing application code → LangChain for primitives, CrewAI for role-based agent teams. Both are imports, not installs-as-a-service.
LangFlow overlaps Dify’s visual builder; it earns its place only for lightweight, Python-export prototyping. If that workflow isn’t yours, you can run the other four and never miss it.

Where to go next

Local LLM

The private GPU model serving these tools call.

LLM observability

How every LLM call gets traced, costed, and evaluated.

LXC vs Docker

Why the compose-based tools run as Docker-in-LXC.

ansible-proxmox-apps

The configuration tier that deploys these app payloads.