From 8a24c717bdccb5a570d980663a6150e52aad41a1 Mon Sep 17 00:00:00 2001
From: mendonk
Date: Thu, 2 Apr 2026 14:55:15 +0000
Subject: [PATCH] deploy: 65c313909c640d8e112fecf2fbbc749befcaad4a
---
404.html | 2 +-
agent-tutorial.html | 2 +-
agents-tools.html | 2 +-
agents.html | 2 +-
api-build.html | 2 +-
api-files.html | 2 +-
api-flows-run.html | 2 +-
api-flows.html | 2 +-
api-keys-and-authentication.html | 2 +-
api-logs.html | 2 +-
api-monitor.html | 2 +-
api-openai-responses.html | 2 +-
api-projects.html | 2 +-
api-reference-api-examples.html | 2 +-
api-request.html | 2 +-
api-users.html | 2 +-
api.html | 2 +-
api/openapi.json.html | 2 +-
api/workflow.html | 2 +-
assets/js/8bee5443.a07813c0.js | 1 -
assets/js/8bee5443.ca2cd91a.js | 1 +
...fda8b.6897bd64.js => acefda8b.ea7dafdc.js} | 2 +-
assets/js/c2ea283c.2541a8c1.js | 1 -
assets/js/c2ea283c.d1929c67.js | 1 +
assets/js/d5ec984b.64627d58.js | 1 -
assets/js/d5ec984b.a44842cb.js | 1 +
...n.a1651604.js => runtime~main.23b610af.js} | 2 +-
batch-run.html | 2 +-
bundles-agentics.html | 2 +-
bundles-aiml.html | 2 +-
bundles-altk.html | 2 +-
bundles-amazon.html | 2 +-
bundles-anthropic.html | 2 +-
bundles-apify.html | 2 +-
bundles-arxiv.html | 2 +-
bundles-assemblyai.html | 2 +-
bundles-azure.html | 2 +-
bundles-baidu.html | 2 +-
bundles-bing.html | 2 +-
bundles-cassandra.html | 2 +-
bundles-chroma.html | 2 +-
bundles-cleanlab.html | 2 +-
bundles-clickhouse.html | 2 +-
bundles-cloudflare.html | 2 +-
bundles-cohere.html | 2 +-
bundles-cometapi.html | 2 +-
bundles-composio.html | 2 +-
bundles-couchbase.html | 2 +-
bundles-cuga.html | 2 +-
bundles-datastax.html | 2 +-
bundles-deepseek.html | 2 +-
bundles-docling.html | 21 ++++--
bundles-duckduckgo.html | 2 +-
bundles-elastic.html | 2 +-
bundles-exa.html | 2 +-
bundles-faiss.html | 2 +-
bundles-glean.html | 2 +-
bundles-google.html | 2 +-
bundles-groq.html | 2 +-
bundles-huggingface.html | 2 +-
bundles-ibm.html | 2 +-
bundles-icosacomputing.html | 2 +-
bundles-langchain.html | 2 +-
bundles-lite-llm.html | 2 +-
bundles-lmstudio.html | 2 +-
bundles-maritalk.html | 2 +-
bundles-mem0.html | 2 +-
bundles-milvus.html | 2 +-
bundles-mistralai.html | 2 +-
bundles-mongodb.html | 2 +-
bundles-notion.html | 2 +-
bundles-novita.html | 2 +-
bundles-nvidia.html | 2 +-
bundles-ollama.html | 2 +-
bundles-openai.html | 2 +-
bundles-openrouter.html | 2 +-
bundles-perplexity.html | 2 +-
bundles-pgvector.html | 2 +-
bundles-pinecone.html | 2 +-
bundles-qdrant.html | 2 +-
bundles-redis.html | 2 +-
bundles-sambanova.html | 2 +-
bundles-searchapi.html | 2 +-
bundles-serper.html | 2 +-
bundles-supabase.html | 2 +-
bundles-upstash.html | 2 +-
bundles-vectara.html | 2 +-
bundles-vertexai.html | 2 +-
bundles-vllm.html | 2 +-
bundles-weaviate.html | 2 +-
bundles-wikipedia.html | 2 +-
bundles-xai.html | 2 +-
calculator.html | 2 +-
chat-input-and-output.html | 2 +-
chat-with-files.html | 2 +-
chat-with-rag.html | 2 +-
component-webhook.html | 2 +-
components-agents.html | 2 +-
components-bundle-components.html | 2 +-
components-custom-components.html | 2 +-
components-embedding-models.html | 2 +-
components-models.html | 2 +-
components-prompts.html | 2 +-
concepts-components.html | 2 +-
concepts-file-management.html | 2 +-
concepts-flows-import.html | 2 +-
concepts-flows.html | 2 +-
concepts-overview.html | 2 +-
concepts-playground.html | 2 +-
concepts-publish.html | 2 +-
concepts-voice-mode.html | 2 +-
configuration-cli.html | 2 +-
configuration-custom-database.html | 2 +-
configuration-global-variables.html | 2 +-
contributing-bundles.html | 2 +-
contributing-community.html | 2 +-
contributing-component-tests.html | 2 +-
contributing-components.html | 2 +-
contributing-github-issues.html | 2 +-
contributing-how-to-contribute.html | 13 +++-
contributing-telemetry.html | 2 +-
contributing-templates.html | 2 +-
current-date.html | 2 +-
data-operations.html | 2 +-
data-types.html | 2 +-
dataframe-operations.html | 2 +-
deployment-architecture.html | 2 +-
deployment-caddyfile.html | 2 +-
deployment-docker.html | 2 +-
deployment-gcp.html | 2 +-
deployment-hugging-face-spaces.html | 2 +-
deployment-kubernetes-dev.html | 2 +-
deployment-kubernetes-prod.html | 2 +-
deployment-nginx-ssl.html | 2 +-
deployment-overview.html | 2 +-
deployment-prod-best-practices.html | 2 +-
deployment-public-server.html | 2 +-
deployment-railway.html | 2 +-
deployment-render.html | 2 +-
develop-application.html | 2 +-
directory.html | 2 +-
dynamic-create-data.html | 2 +-
enterprise-database-guide.html | 2 +-
environment-variables.html | 64 +++++++------------
get-started-installation.html | 2 +-
get-started-quickstart.html | 2 +-
guardrails.html | 2 +-
if-else.html | 2 +-
img/langflow-logo-color-black-solid.svg | 21 ++++++
img/langflow-logo-color-blue-bg.svg | 21 ++++++
index.html | 2 +-
install-custom-dependencies.html | 2 +-
integrations-arize.html | 2 +-
integrations-instana-traceloop.html | 2 +-
integrations-langfuse.html | 2 +-
integrations-langsmith.html | 2 +-
integrations-langwatch.html | 2 +-
integrations-openlayer.html | 2 +-
integrations-opik.html | 2 +-
jwt-authentication.html | 2 +-
knowledge-base.html | 2 +-
knowledge.html | 2 +-
legacy-core-components.html | 2 +-
llm-selector.html | 2 +-
logging.html | 2 +-
loop.html | 2 +-
luna-for-langflow.html | 2 +-
mcp-client.html | 2 +-
mcp-component-astra.html | 2 +-
mcp-server.html | 2 +-
mcp-tools.html | 2 +-
mcp-tutorial.html | 2 +-
memory.html | 2 +-
message-history.html | 2 +-
mock-data.html | 2 +-
notify-and-listen.html | 2 +-
parser.html | 2 +-
python-interpreter.html | 2 +-
read-file.html | 2 +-
release-notes.html | 16 ++++-
run-flow.html | 2 +-
search.html | 2 +-
security.html | 2 +-
session-id.html | 2 +-
sitemap.xml | 2 +-
smart-router.html | 2 +-
smart-transform.html | 2 +-
split-text.html | 2 +-
sql-database.html | 2 +-
structured-output.html | 2 +-
text-input-and-output.html | 2 +-
traces.html | 2 +-
troubleshoot.html | 2 +-
type-convert.html | 2 +-
typescript-client.html | 2 +-
url.html | 2 +-
web-search.html | 2 +-
webhook.html | 2 +-
workflow-api.html | 2 +-
write-file.html | 2 +-
200 files changed, 293 insertions(+), 245 deletions(-)
delete mode 100644 assets/js/8bee5443.a07813c0.js
create mode 100644 assets/js/8bee5443.ca2cd91a.js
rename assets/js/{acefda8b.6897bd64.js => acefda8b.ea7dafdc.js} (92%)
delete mode 100644 assets/js/c2ea283c.2541a8c1.js
create mode 100644 assets/js/c2ea283c.d1929c67.js
delete mode 100644 assets/js/d5ec984b.64627d58.js
create mode 100644 assets/js/d5ec984b.a44842cb.js
rename assets/js/{runtime~main.a1651604.js => runtime~main.23b610af.js} (98%)
create mode 100644 img/langflow-logo-color-black-solid.svg
create mode 100644 img/langflow-logo-color-blue-bg.svg
diff --git a/404.html b/404.html
index 151ac5f401..4c4dcb6e0a 100644
--- a/404.html
+++ b/404.html
@@ -25,7 +25,7 @@
-
+
diff --git a/agent-tutorial.html b/agent-tutorial.html
index 00f78453f6..0329590681 100644
--- a/agent-tutorial.html
+++ b/agent-tutorial.html
@@ -25,7 +25,7 @@
-
+
diff --git a/agents-tools.html b/agents-tools.html
index a0d78550ec..ff3b718aab 100644
--- a/agents-tools.html
+++ b/agents-tools.html
@@ -25,7 +25,7 @@
-
+
diff --git a/agents.html b/agents.html
index 5988ab76d9..d240889693 100644
--- a/agents.html
+++ b/agents.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-build.html b/api-build.html
index 76aa09ec07..78812a5907 100644
--- a/api-build.html
+++ b/api-build.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-files.html b/api-files.html
index 1872fd4522..50b3a5e245 100644
--- a/api-files.html
+++ b/api-files.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-flows-run.html b/api-flows-run.html
index 2aef77a31a..6f95b01cf5 100644
--- a/api-flows-run.html
+++ b/api-flows-run.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-flows.html b/api-flows.html
index 793b3e59e1..cf04207cb3 100644
--- a/api-flows.html
+++ b/api-flows.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-keys-and-authentication.html b/api-keys-and-authentication.html
index 32f4faac1d..c77c54a230 100644
--- a/api-keys-and-authentication.html
+++ b/api-keys-and-authentication.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-logs.html b/api-logs.html
index bc87771bba..2d68e4d165 100644
--- a/api-logs.html
+++ b/api-logs.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-monitor.html b/api-monitor.html
index ae6cea7db3..cada4c92f6 100644
--- a/api-monitor.html
+++ b/api-monitor.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-openai-responses.html b/api-openai-responses.html
index 1edf0770c8..1039db4948 100644
--- a/api-openai-responses.html
+++ b/api-openai-responses.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-projects.html b/api-projects.html
index 07bbd1ff0b..cf2d80e22d 100644
--- a/api-projects.html
+++ b/api-projects.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-reference-api-examples.html b/api-reference-api-examples.html
index 68f3d57551..cac1f9144f 100644
--- a/api-reference-api-examples.html
+++ b/api-reference-api-examples.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-request.html b/api-request.html
index ccd42b33be..19f7b6d2b2 100644
--- a/api-request.html
+++ b/api-request.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api-users.html b/api-users.html
index bf586e66fa..f9475f220c 100644
--- a/api-users.html
+++ b/api-users.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api.html b/api.html
index 1af063af64..ca0b78417c 100644
--- a/api.html
+++ b/api.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api/openapi.json.html b/api/openapi.json.html
index cee28518f4..29051e0421 100644
--- a/api/openapi.json.html
+++ b/api/openapi.json.html
@@ -25,7 +25,7 @@
-
+
diff --git a/api/workflow.html b/api/workflow.html
index 80ee1ab89d..674af3f058 100644
--- a/api/workflow.html
+++ b/api/workflow.html
@@ -25,7 +25,7 @@
-
+
diff --git a/assets/js/8bee5443.a07813c0.js b/assets/js/8bee5443.a07813c0.js
deleted file mode 100644
index 15d8b5e1c8..0000000000
--- a/assets/js/8bee5443.a07813c0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[879],{45783:(e,n,s)=>{s.d(n,{A:()=>a});var o,r,i=s(96540);function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;ni.createElement("svg",t({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},s),e?i.createElement("title",{id:n},e):null,o||(o=i.createElement("g",{fill:"currentColor",clipPath:"url(#a)"},i.createElement("path",{d:"M10.352 1.675a1.655 1.655 0 0 0-2.341 0L1.769 7.917a.552.552 0 1 1-.78-.78L7.23.893a2.759 2.759 0 0 1 4.682 2.341 2.75 2.75 0 0 1 2.34.78l.033.033a2.76 2.76 0 0 1 0 3.901L8.64 13.595a.184.184 0 0 0 0 .26l1.16 1.159a.552.552 0 0 1-.78.78l-1.16-1.16a1.287 1.287 0 0 1 0-1.82l5.645-5.645a1.655 1.655 0 0 0 0-2.34l-.032-.033a1.655 1.655 0 0 0-2.34-.002l-4.65 4.65-.002.003-.063.063a.552.552 0 1 1-.78-.78l4.715-4.716a1.655 1.655 0 0 0-.001-2.34"}),i.createElement("path",{d:"M9.572 3.235a.552.552 0 1 0-.78-.78L4.174 7.07a2.759 2.759 0 0 0 3.901 3.902l4.617-4.617a.552.552 0 0 0-.78-.78l-4.617 4.617a1.655 1.655 0 0 1-2.341-2.341z"}))),r||(r=i.createElement("defs",null,i.createElement("clipPath",{id:"a"},i.createElement("path",{fill:"#fff",d:"M0 0h16v16H0z"})))))},84739:(e,n,s)=>{s.r(n),s.d(n,{CH:()=>p,assets:()=>h,chCodeConfig:()=>u,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>g});const o=JSON.parse('{"id":"Support/release-notes","title":"Langflow release notes","description":"This page summarizes significant changes to Langflow in each release.","source":"@site/docs/Support/release-notes.mdx","sourceDirName":"Support","slug":"/release-notes","permalink":"/release-notes","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Langflow release notes","slug":"/release-notes"},"sidebar":"docs","previous":{"title":"IBM Elite Support for Langflow","permalink":"/luna-for-langflow"}}');var r=s(74848),i=s(28453),t=s(24754),a=s(40619),l=s(45783);const c={title:"Langflow release notes",slug:"/release-notes"},d=void 0,h={},p={annotations:t.hk,Code:t.Cy},u={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},g=[{value:"Prepare to upgrade",id:"prepare-to-upgrade",level:2},{value:"1.8.x",id:"18x",level:2},{value:"Breaking changes",id:"breaking-changes",level:3},{value:"New features and enhancements",id:"new-features-and-enhancements",level:3},{value:"1.7.x",id:"17x",level:2},{value:"Known issue: Data not accessible when upgrading to version 1.7.0",id:"v170-data-path",level:3},{value:"New features and enhancements",id:"new-features-and-enhancements-1",level:3},{value:"1.6.0",id:"160",level:2},{value:"Known issue, potential security vulnerability: .env file not loaded in versions 1.6.0 through 1.6.3",id:"env-file-bug",level:3},{value:"Known issue: Don't auto-upgrade Windows Desktop",id:"windows-desktop-update-issue",level:3},{value:"Breaking changes",id:"breaking-changes-1",level:3},{value:"New features and enhancements",id:"new-features-and-enhancements-2",level:3},{value:"Deprecations",id:"deprecations",level:3},{value:"1.5.0",id:"150",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-3",level:3},{value:"1.4.2",id:"142",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-4",level:3},{value:"Deprecations",id:"deprecations-1",level:3},{value:"1.4.1",id:"141",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-5",level:3},{value:"1.4.0",id:"140",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-6",level:3},{value:"Deprecations",id:"deprecations-2",level:3},{value:"Earlier releases",id:"earlier-releases",level:2}];function f(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return p||j("CH",!1),p.Code||j("CH.Code",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,r.jsxs)(n.p,{children:["This page summarizes significant changes to Langflow in each release.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases/latest",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Due to strict SemVer requirements, Langflow Desktop can have different patch versions than the core Langflow OSS Python package, but the major and minor versions are aligned."}),"\n",(0,r.jsx)(n.h2,{id:"prepare-to-upgrade",children:"Prepare to upgrade"}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Whenever possible, the Langflow team recommends installing new Langflow versions in a new virtual environment or VM before upgrading your primary installation.\nThis allows you to ",(0,r.jsx)(n.a,{href:"/concepts-flows-import#import-a-flow",children:"import flows"})," from your existing installation and test them in the new version without disrupting your existing installation.\nIn the event of breaking changes or bugs, your existing installation is preserved in a stable state.\nIf you are upgrading Windows Desktop to 1.6.0, don't auto-upgrade with the in-app ",(0,r.jsx)(n.strong,{children:"Update"})," button. Instead, follow the instructions in ",(0,r.jsx)(n.a,{href:"#windows-desktop-update-issue",children:"Known issue: Don't auto-upgrade Windows Desktop"}),"."]})}),"\n",(0,r.jsx)(n.p,{children:"To avoid the impact of potential breaking changes and test new versions, the Langflow team recommends the following upgrade process:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Recommended: ",(0,r.jsx)(n.a,{href:"/api-projects#export-a-project",children:"Export your projects"})," to create backups of your flows:"]}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"GET ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_SERVER_URL",props:{style:{color:"#C9D1D9"}}},{content:"/api/v1/projects/download/",props:{style:{color:"#A5D6FF"}}},{content:"$PROJECT_ID",props:{style:{color:"#C9D1D9"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:'"accept: application/json" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:'"x-api-key: ',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_API_KEY",props:{style:{color:"#C9D1D9"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,r.jsxs)(n.p,{children:["To export flows from the visual editor, see ",(0,r.jsx)(n.a,{href:"/concepts-flows-import",children:"Import and export flows"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Install the new version:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Langflow OSS Python package"}),": Install the new version in a new virtual environment. For instructions, see ",(0,r.jsx)(n.a,{href:"/get-started-installation#install-and-run-the-langflow-oss-python-package",children:"Install and run the Langflow OSS Python package"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Langflow Docker image"}),": Run the new image in a separate container."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Langflow Desktop"}),": To upgrade in place, open Langflow Desktop, and then click ",(0,r.jsx)(n.strong,{children:"Upgrade Available"})," in the Langflow header. If you want to isolate the new version, you must install Langflow Desktop on a separate physical or virtual machine, and then ",(0,r.jsx)(n.a,{href:"/concepts-flows-import",children:"import your flows"})," to the new installation."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/concepts-flows-import",children:"Import your flows"})," to test them in the new version, ",(0,r.jsx)(n.a,{href:"/concepts-components#component-versions",children:"upgrading components"})," as needed."]}),"\n",(0,r.jsxs)(n.p,{children:["When upgrading components, you can use the ",(0,r.jsx)(n.strong,{children:"Create backup flow before updating"})," option if you didn't previously export your flows."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"If you installed the new version in isolation, upgrade your primary installation after testing the new version."}),"\n",(0,r.jsx)(n.p,{children:"If you made changes to your flows in the isolated installation, you might want to export and import those flows back to your upgraded primary installation so you don't have to repeat the component upgrade process."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"18x",children:"1.8.x"}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"langflow-base"})," dependency structure refactored"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"langflow-base"})," package now uses granular optional dependency groups. As a result, many dependencies that were previously included in the ",(0,r.jsx)(n.code,{children:"langflow-base"})," installation were moved to optional extras."]}),"\n",(0,r.jsxs)(n.p,{children:["If you installed Langflow with ",(0,r.jsx)(n.code,{children:"uv pip install langflow"}),", this isn't a breaking change. Installing ",(0,r.jsx)(n.code,{children:"langflow"})," automatically installs ",(0,r.jsx)(n.code,{children:"langflow-base[complete]"}),", which includes all optional dependencies and maintains the same functionality as before."]}),"\n",(0,r.jsxs)(n.p,{children:["However, if you installed Langflow with ",(0,r.jsx)(n.code,{children:"uv pip install langflow-base"})," without specifying extra dependencies, this ",(0,r.jsx)(n.em,{children:"is"})," a breaking change.\nSome dependencies that were previously included by default are now available only through optional extras.\nTherefore, installing ",(0,r.jsx)(n.code,{children:"langflow-base"})," directly only installs the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/blob/main/src/backend/base/pyproject.toml",children:"core base dependencies"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you installed ",(0,r.jsx)(n.code,{children:"langflow-base"}),", there are two ways to resolve dependency errors that result from this breaking change:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["If you need the full set of dependencies, you must install ",(0,r.jsx)(n.code,{children:"langflow-base"})," with the ",(0,r.jsx)(n.code,{children:"complete"})," extra:"]}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:'pip install "langflow-base[complete]"',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["If you need specific dependencies, you must install ",(0,r.jsx)(n.code,{children:"langflow-base"})," with those optional dependency groups. For example:"]}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:'pip install "langflow-base[postgresql,openai,chroma]"',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For more information about available optional dependency groups, see ",(0,r.jsxs)(n.a,{href:"/install-custom-dependencies#install-optional-dependency-groups-for-langflow-base",children:["Install optional dependency groups for ",(0,r.jsx)(n.code,{children:"langflow-base"})]}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Docker image does not include ",(0,r.jsx)(n.code,{children:"uv"})," or ",(0,r.jsx)(n.code,{children:"uvx"})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["Starting with Langflow 1.8.1, the official Docker images include ",(0,r.jsx)(n.code,{children:"uv"})," and ",(0,r.jsx)(n.code,{children:"uvx"})," again.\nIf you're using Langflow 1.8.0, follow the steps in this release note to add ",(0,r.jsx)(n.code,{children:"uv"})," and ",(0,r.jsx)(n.code,{children:"uvx"})," in a derived image."]})}),"\n",(0,r.jsxs)(n.p,{children:["In Langflow 1.8.0, the Langflow Docker image does not include ",(0,r.jsx)(n.code,{children:"uv"})," or ",(0,r.jsx)(n.code,{children:"uvx"})," in the runtime image.\nThis means that MCP server configurations, including the default Langflow MCP server, that rely on commands like ",(0,r.jsx)(n.code,{children:"uvx mcp-proxy"})," will fail inside the container with a ",(0,r.jsx)(n.code,{children:"command not found"})," error."]}),"\n",(0,r.jsxs)(n.p,{children:["If you use MCP from within a Langflow 1.8.0 Docker image, you must install ",(0,r.jsx)(n.code,{children:"uv"})," in an image derived from the official ",(0,r.jsx)(n.code,{children:"langflowai/langflow"})," image."]}),"\n",(0,r.jsxs)(n.p,{children:["To install ",(0,r.jsx)(n.code,{children:"uv"})," and ",(0,r.jsx)(n.code,{children:"uvx"})," in a derived image based on the official ",(0,r.jsx)(n.code,{children:"langflowai/langflow"})," image, do the following:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Create a ",(0,r.jsx)(n.code,{children:"Dockerfile"})," in your project."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Use the official Langflow image as the base and install ",(0,r.jsx)(n.code,{children:"uv"})," into the existing virtual environment:"]}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:1.8.0",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"USER",props:{style:{color:"#FF7B72"}}},{content:" root",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" /app/.venv/bin/pip install uv",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"USER",props:{style:{color:"#FF7B72"}}},{content:" user",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Build the image."}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"YOUR_IMAGE_NAME .",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:"YOUR_IMAGE_NAME"})," with your Docker image name."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Run the new image:"}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"YOUR_IMAGE_NAME",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"/deployment-docker#upgrade-the-langflow-docker-image",children:"Upgrade the Langflow Docker image"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Global model provider configuration"}),"\n",(0,r.jsxs)(n.p,{children:["Model providers for language models, embedding models, and agents are now configured globally in the ",(0,r.jsx)(n.strong,{children:"Model providers"})," pane, instead of within individual components.\nFor more information, see the ",(0,r.jsx)(n.a,{href:"/components-models",children:"Language Model component"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Component inspection panel"}),"\n",(0,r.jsxs)(n.p,{children:["The component inspection panel replaces the component header menu for managing component parameters and settings.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/concepts-components#component-inspection-panel",children:"Component inspection panel"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Developer API: ",(0,r.jsx)(n.code,{children:"/workflow"})," synchronous endpoints (Beta)"]}),"\n",(0,r.jsxs)(n.p,{children:["The Developer API is part of a larger effort to improve Langflow's APIs with enhanced capabilities and better developer experience.\nThe Developer API now includes ",(0,r.jsx)(n.code,{children:"/v2/workflow"})," endpoints for executing flows with enhanced error handling, timeout protection, and structured responses.\nThe synchronous execution endpoint is available at ",(0,r.jsx)(n.code,{children:"POST /api/v2/workflows"}),".\nFor more information, see ",(0,r.jsx)(n.a,{href:"/workflow-api",children:"Workflow API (Beta)"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Traces and trace view"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow now records execution traces for flows and components.\nView your traces in the ",(0,r.jsx)(n.strong,{children:"Trace Details"})," pane, and inspect span trees, latencies, and errors.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/traces",children:"Traces"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Knowledge bases"}),"\n",(0,r.jsxs)(n.p,{children:["Knowledge bases let you organize documents and other reference data into reusable vector databases that can be attached to multiple flows.\nThis makes it easier to centralize domain knowledge and reuse the same data across agents and retrieval workflows.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/knowledge",children:"Manage vector data"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Mustache templating support for Prompt Template component"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Prompt Template"})," component now supports Mustache templating syntax.\nMustache templating eliminates the need to escape curly braces when including JSON structures in your prompts. For more information, see ",(0,r.jsx)(n.a,{href:"/components-prompts#use-mustache-templating-in-prompt-templates",children:"Prompt Template"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"More configuration options for JWT-based session authentication"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow 1.8 offers additional configuration options for JWT algorithms, including support for RS256/RS512 algorithms, configurable keys, and token lifetimes. For more information, see ",(0,r.jsx)(n.a,{href:"/jwt-authentication",children:"JWT authentication"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Global variables in MCP server headers"}),"\n",(0,r.jsxs)(n.p,{children:["You can now use ",(0,r.jsx)(n.a,{href:"/configuration-global-variables",children:"global variables"})," in MCP server header values to securely store and reference sensitive values. For more information, see ",(0,r.jsx)(n.a,{href:"/mcp-client#use-global-variables-in-mcp-server-headers",children:"Use global variables in MCP server headers"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Pass environment variables to flows in API headers and CLI"}),"\n",(0,r.jsxs)(n.p,{children:["The ability to pass environment variables in HTTP headers (previously available for the ",(0,r.jsxs)(n.a,{href:"/api-openai-responses#global-var",children:[(0,r.jsx)(n.code,{children:"/responses"})," endpoint"]}),") is now also available for the ",(0,r.jsxs)(n.a,{href:"/api-flows-run#pass-global-variables-in-headers",children:[(0,r.jsx)(n.code,{children:"/run"})," endpoint"]}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Guardrails component"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Guardrails"})," component validates input text against security and safety guardrails by using a connected language model to check for content such as PII, tokens/passwords, or offensive content. For more information, see ",(0,r.jsx)(n.a,{href:"/guardrails",children:"Guardrails"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Token usage tracking for OpenAI Responses API"}),"\n",(0,r.jsxs)(n.p,{children:["The OpenAI Responses API endpoint now tracks and returns token usage statistics when your flow uses language model APIs that provide token usage information.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/api-openai-responses#token-usage-tracking",children:"Token usage tracking"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Docker AMD vs ARM image sizes"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow 1.8.0 addresses the AMD vs ARM Docker image size gap.\nWe reconfigured our Python dependencies to use CPU-only PyTorch wheels through ",(0,r.jsx)(n.code,{children:"uv"})," sources, which removes large CUDA-related dependencies from the AMD64 images.\nWith this change, both AMD64 and ARM64 images are now smaller than 2 GB."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/bundles-agentics",children:[(0,r.jsx)(n.strong,{children:"Agentics"})," bundle"]})]}),"\n",(0,r.jsx)(n.p,{children:"Uses LLMs to transform tabular data, including mapping, reducing, and generating DataFrame rows based on a defined schema."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/bundles-lite-llm",children:[(0,r.jsx)(n.strong,{children:"LiteLLM"})," bundle"]})]}),"\n",(0,r.jsx)(n.p,{children:"Connects to models through a LiteLLM proxy so you can route requests to multiple LLM providers and switch providers without changing flow credentials."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/integrations-openlayer",children:[(0,r.jsx)(n.strong,{children:"Openlayer"})," observability integration"]})]}),"\n",(0,r.jsx)(n.p,{children:"Configures Langflow to send tracing data to Openlayer for analysis, monitoring, and evaluation of your flow executions."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"17x",children:"1.7.x"}),"\n",(0,r.jsx)(n.admonition,{title:"Version yanked",type:"warning",children:(0,r.jsx)(n.p,{children:"Version 1.7.0 was yanked due to a critical bug. Version 1.7.0 has been replaced with version 1.7.1, which includes a fix for this issue."})}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"v170-data-path",children:"Known issue: Data not accessible when upgrading to version 1.7.0"}),"\n",(0,r.jsx)(n.p,{children:"A critical issue was identified during the upgrade process to version 1.7.0."}),"\n",(0,r.jsxs)(n.p,{children:["Flows, projects, and global variables are ",(0,r.jsx)(n.strong,{children:"not"})," deleted or corrupted. The data still exists, but version 1.7.0 cannot find it due to a path change in how flows are located.\nAll Langflow versions upgrading to 1.7.0 are affected."]}),"\n",(0,r.jsx)(n.p,{children:"Don't upgrade to Langflow version 1.7.0.\nInstead, upgrade directly to version 1.7.1, which includes a fix for this bug."}),"\n",(0,r.jsx)(n.p,{children:"If you installed version 1.7.0 before the fix was released, follow these steps to recover your flows:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Revert Langflow to version 1.6.9:"}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"pip install langflow==",props:{style:{color:"#A5D6FF"}}},{content:"1.6.9",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Verify that your flows, projects, and global variables are accessible."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Upgrade directly to version 1.7.1, which includes the fix for this issue:"}),"\n",(0,r.jsx)(p.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"pip install langflow==",props:{style:{color:"#A5D6FF"}}},{content:"1.7.1",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements-1",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Support for streamable HTTP transport for MCP clients and servers"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow now supports ",(0,r.jsx)(n.a,{href:"https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http",children:"streamable HTTP transport"})," for both MCP clients and servers.\nWhen using Langflow as an ",(0,r.jsx)(n.a,{href:"/mcp-client",children:"MCP client"}),", you can connect to MCP servers with streamable HTTP transport.\nWhen using Langflow as an ",(0,r.jsx)(n.a,{href:"/mcp-server",children:"MCP server"}),", clients can connect using streamable HTTP transport.\nSSE transport is still supported as a fallback for backwards compatibility."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Webhook authentication"}),"\n",(0,r.jsxs)(n.p,{children:["Added the ",(0,r.jsx)(n.code,{children:"LANGFLOW_WEBHOOK_AUTH_ENABLE"})," environment variable for authenticating requests to the ",(0,r.jsxs)(n.a,{href:"/api-flows-run#webhook-run-flow",children:[(0,r.jsx)(n.code,{children:"/webhook"})," endpoint"]}),". When ",(0,r.jsx)(n.code,{children:"LANGFLOW_WEBHOOK_AUTH_ENABLE=TRUE"}),", webhook endpoints require API key authentication and validate that the authenticated user owns the flow being executed. When ",(0,r.jsx)(n.code,{children:"FALSE"}),", no Langflow API key is required and all requests to the webhook endpoint are treated as being sent by the flow owner. For more information, see ",(0,r.jsx)(n.a,{href:"/webhook",children:"Trigger flows with webhooks"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Configurable API key validation"}),"\n",(0,r.jsxs)(n.p,{children:["Added the ",(0,r.jsx)(n.code,{children:"LANGFLOW_API_KEY_SOURCE"})," environment variable to control how Langflow validates API keys. When set to ",(0,r.jsx)(n.code,{children:"db"}),", Langflow validates API keys against keys stored in the database. When set to ",(0,r.jsx)(n.code,{children:"env"}),", Langflow validates API keys against the ",(0,r.jsx)(n.code,{children:"LANGFLOW_API_KEY"})," environment variable. For more information, see ",(0,r.jsx)(n.a,{href:"/api-keys-and-authentication#langflow-api-key-source",children:"API keys and authentication"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"SSRF protection"}),"\n",(0,r.jsxs)(n.p,{children:["Added SSRF (Server-Side Request Forgery) protection to the ",(0,r.jsxs)(n.a,{href:"/api-request",children:[(0,r.jsx)(n.strong,{children:"API Request"})," component"]}),". HTTP redirects are disabled by default to prevent SSRF bypass attacks. To enable SSRF protection, set ",(0,r.jsx)(n.code,{children:"LANGFLOW_SSRF_PROTECTION_ENABLED=TRUE"}),". Configure allowed hosts with ",(0,r.jsx)(n.code,{children:"LANGFLOW_SSRF_ALLOWED_HOSTS"}),". Flows that relied on automatic redirects will need to enable it manually."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Email registration in Langflow Desktop"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow Desktop now includes an email registration screen at startup. The registered email address helps track user registrations and understand the user base. For more information, see ",(0,r.jsx)(n.a,{href:"/contributing-telemetry#email",children:"Telemetry"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Changes to read/write file components"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Save File"})," component was renamed to ",(0,r.jsx)(n.strong,{children:"Write File"}),", and it can now save to S3 and Google Drive.\nThe ",(0,r.jsx)(n.strong,{children:"File"})," component was renamed to ",(0,r.jsx)(n.strong,{children:"Read File"}),", and it can now read from AWS S3 and Google Drive.\nBoth components support ",(0,r.jsx)(n.strong,{children:"Tool Mode"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"New integrations, bundles, and components:"}),"\n",(0,r.jsxs)(n.p,{children:["New filter operator for ",(0,r.jsx)(n.strong,{children:"DataFrame Operations"})," component"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"/dataframe-operations",children:[(0,r.jsx)(n.strong,{children:"DataFrame Operations"})," component"]})," now includes a ",(0,r.jsx)(n.code,{children:"not contains"})," filter operator.\nUse it to clean data by extracting only records that ",(0,r.jsx)(n.em,{children:"don't"})," contain specific values.\nFor example, you can filter out invalid email addresses that don't contain ",(0,r.jsx)(n.code,{children:"@"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["New JSON operations for ",(0,r.jsx)(n.strong,{children:"Data Operations"})," component"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"/data-operations",children:[(0,r.jsx)(n.strong,{children:"Data Operations"})," component"]})," now includes two operations for advanced JSON data manipulation.\nThe ",(0,r.jsx)(n.strong,{children:"Path Selection"})," operation extracts values from nested JSON structures, and the ",(0,r.jsx)(n.strong,{children:"JQ Expression"})," operation uses the ",(0,r.jsx)(n.a,{href:"https://jqlang.org/",children:(0,r.jsx)(n.code,{children:"jq"})})," query language to perform advanced JSON filtering, projections, and transformations."]}),"\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/smart-router",children:[(0,r.jsx)(n.strong,{children:"Smart Router"})," component"]})]}),"\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/mock-data",children:[(0,r.jsx)(n.strong,{children:"Mock Data"})," component"]})]}),"\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/dynamic-create-data",children:[(0,r.jsx)(n.strong,{children:"Dynamic Create Data"})," component"]})]}),"\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/bundles-altk",children:[(0,r.jsx)(n.strong,{children:"ALTK"})," bundle"]})]}),"\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/bundles-cometapi",children:[(0,r.jsx)(n.strong,{children:"CometAPI"})," bundle"]})]}),"\n",(0,r.jsxs)(n.p,{children:["New ",(0,r.jsxs)(n.a,{href:"/bundles-cuga",children:[(0,r.jsx)(n.strong,{children:"CUGA"})," bundle"]})]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"LLM Router"})," component is now called the ",(0,r.jsxs)(n.a,{href:"/llm-selector",children:[(0,r.jsx)(n.strong,{children:"LLM Selector"})," component"]}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"/web-search",children:[(0,r.jsx)(n.strong,{children:"Web Search"})," component"]})," now consolidates Web Search, News Search, and RSS Reader into a single component with tabs for different search modes. You can search the web using DuckDuckGo, search Google News, or read RSS feeds\u2014all from one component. The separate ",(0,r.jsx)(n.strong,{children:"News Search"})," and ",(0,r.jsx)(n.strong,{children:"RSS Reader"})," components have been removed."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"160",children:"1.6.0"}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"env-file-bug",children:"Known issue, potential security vulnerability: .env file not loaded in versions 1.6.0 through 1.6.3"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow versions 1.6.0 through 1.6.3 have a critical bug where environment variables from ",(0,r.jsx)(n.code,{children:".env"})," files aren't read.\nThis affects all deployments using environment variables for configuration, including security settings."]}),"\n",(0,r.jsxs)(n.admonition,{title:"Potential security vulnerability",type:"warning",children:[(0,r.jsxs)(n.p,{children:["If your ",(0,r.jsx)(n.code,{children:".env"})," file includes ",(0,r.jsx)(n.code,{children:"AUTO_LOGIN=false"}),", upgrading to the impacted versions causes Langflow to fall back to default settings, potentially giving all users superuser access immediately upon upgrade.\nAdditionally, database credentials, API keys, and other sensitive configurations can't be loaded from ",(0,r.jsx)(n.code,{children:".env"})," files."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Don't"})," upgrade to any Langflow version from 1.6.0 through 1.6.3 if you use ",(0,r.jsx)(n.code,{children:".env"})," files for configuration.\nInstead, upgrade to 1.6.4, which includes a fix for this bug."]})]}),"\n",(0,r.jsx)(n.h3,{id:"windows-desktop-update-issue",children:"Known issue: Don't auto-upgrade Windows Desktop"}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Windows users of Langflow Desktop should ",(0,r.jsx)(n.strong,{children:"not"})," use the in-app update feature to upgrade to Langflow version 1.6.0.\nOnly Windows Desktop users upgrading to Langflow version 1.6.0 are affected."]})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Update"})," button in Langflow Desktop will not work for Windows users, and may result in data loss."]}),"\n",(0,r.jsxs)(n.p,{children:["Instead, download a fresh installation from the ",(0,r.jsx)(n.a,{href:"https://langflow.org",children:"Langflow website"})," when a new version is available."]}),"\n",(0,r.jsx)(n.p,{children:"Follow the instructions below to minimize the risk of losing flows."}),"\n",(0,r.jsxs)(n.p,{children:["These instructions assume the default path for the Langflow database of ",(0,r.jsx)(n.code,{children:"C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\com.langflow\\data\\database.db"})," or ",(0,r.jsx)(n.code,{children:"C:\\Users\\%YOUR_USERNAME%\\AppData\\Roaming\\com.langflow\\data\\database.db"}),". Replace ",(0,r.jsx)(n.code,{children:"YOUR_USERNAME"})," with your Windows username."]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Ensure you have Administrator privileges."}),"\n",(0,r.jsx)(n.li,{children:"Ensure you have enough disk space for a second installation of Langflow."}),"\n",(0,r.jsx)(n.li,{children:"Close Langflow, and ensure no Langflow process is running in Task Manager."}),"\n",(0,r.jsxs)(n.li,{children:["The Langflow 1.6.0 installer automatically performs a database backup in a later step, but an additional manual backup provides additional redundancy and is recommended.\nTo manually back up your Langflow database file, do the following:","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["In Windows Explorer, navigate to ",(0,r.jsx)(n.code,{children:"C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\com.langflow\\data\\"}),". Replace ",(0,r.jsx)(n.code,{children:"YOUR_USERNAME"})," with your Windows username."]}),"\n",(0,r.jsxs)(n.li,{children:["Copy the ",(0,r.jsx)(n.code,{children:"database.db"})," at this location, and paste it to a safe location."]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["Download the Windows installer from the ",(0,r.jsx)(n.a,{href:"https://langflow.org",children:"Langflow website"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Run the Windows installer as an Administrator. To run the installer as an Administrator, right-click the executable and select ",(0,r.jsx)(n.strong,{children:"Run as administrator"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Follow the Windows installer's guided steps.\nThe Langflow 1.6.0 installer automatically performs a database backup.\nThese steps install Langflow from scratch, and result in two Langflow installations: the previously installed version, and version 1.6.0.\nThis is expected behavior."}),"\n",(0,r.jsx)(n.li,{children:"Start version 1.6.0 of Langflow, and confirm your flows behave as expected."}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"If flows are missing"}),", restore your flows from your manual backup by doing the following:","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Close Langflow."}),"\n",(0,r.jsxs)(n.li,{children:["Navigate to your backup location, and copy the ",(0,r.jsx)(n.code,{children:"database.db"})," file."]}),"\n",(0,r.jsxs)(n.li,{children:["Replace the database file in the new installation's ",(0,r.jsx)(n.code,{children:"data"})," directory."]}),"\n",(0,r.jsx)(n.li,{children:"Start Langflow, and confirm your flows behave as expected."}),"\n",(0,r.jsx)(n.li,{children:"After confirmation, uninstall the previous version of Langflow, and keep version 1.6.0."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"breaking-changes-1",children:"Breaking changes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Authentication enforced for Langflow API requests by default"}),"\n",(0,r.jsxs)(n.p,{children:["In Langflow version 1.6, ",(0,r.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=True"})," and ",(0,r.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN=False"})," by default.\nThis enforces authentication for Langflow API requests while still automatically authenticating all users as superusers in the visual editor."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsxs)(n.strong,{children:["This is a breaking change from 1.5 where both of these environment variables were ",(0,r.jsx)(n.code,{children:"true"})," by default, bypassing all authentication."]})}),"\n",(0,r.jsxs)(n.p,{children:["For temporary backwards compatibility, you can revert to the earlier unauthenticated behavior by setting both variables to ",(0,r.jsx)(n.code,{children:"true"}),".\nHowever, a future release will set ",(0,r.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=False"})," and remove ",(0,r.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN"}),".\nAt that point, Langflow will strictly enforce API key authentication for API requests, and you can manually disable authentication for some features, like the visual editor, by setting ",(0,r.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see the documentation for ",(0,r.jsx)(n.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,r.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements-2",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"OpenAI Responses API compatibility"}),"\n",(0,r.jsxs)(n.p,{children:["Langflow now includes an endpoint that is compatible with the ",(0,r.jsx)(n.a,{href:"https://platform.openai.com/docs/api-reference/responses",children:"OpenAI Responses API"})," at ",(0,r.jsx)(n.code,{children:"POST /api/v1/responses"}),".\nThis allows you to use existing OpenAI client libraries with minimal code changes by replacing the ",(0,r.jsx)(n.code,{children:"model"})," name with your ",(0,r.jsx)(n.code,{children:"flow_id"}),".\nThe endpoint supports streaming responses, conversation continuity, tool call results, and global variable passing through headers.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/api-openai-responses",children:"OpenAI Responses API"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Advanced document parsing with built-in Docling support"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Read File"})," component supports advanced parsing with the Docling library."]}),"\n",(0,r.jsxs)(n.p,{children:["To make it easier to use the ",(0,r.jsxs)(n.a,{href:"/bundles-docling",children:[(0,r.jsx)(n.strong,{children:"Docling"})," components"]})," and the ",(0,r.jsx)(n.strong,{children:"Read File"})," component's new advanced parsing feature, the Docling dependency is now included with Langflow for all operating systems except macOS Intel (x86_64)."]}),"\n",(0,r.jsxs)(n.p,{children:["For more information, see ",(0,r.jsx)(n.a,{href:"/read-file#advanced-parsing",children:"Advanced parsing"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Reorganized component menus and visual editor controls"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.a,{href:"/concepts-overview#workspace",children:"workspace"})," sidebar is divided into separate sections for ",(0,r.jsx)(a.A,{name:"Search","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Search"}),", ",(0,r.jsx)(a.A,{name:"Component","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Core components"}),", ",(0,r.jsx)(l.A,{})," ",(0,r.jsx)(n.a,{href:"/mcp-server",children:(0,r.jsx)(n.strong,{children:"MCP servers"})}),", ",(0,r.jsx)(a.A,{name:"Blocks","aria-hidden":"true"})," ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:(0,r.jsx)(n.strong,{children:"Bundles"})}),", and ",(0,r.jsx)(a.A,{name:"StickyNote","aria-hidden":"true"})," ",(0,r.jsx)(n.strong,{children:"Add Note"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Lock/unlock controls moved to flow details in ",(0,r.jsx)(n.a,{href:"/concepts-flows#projects",children:(0,r.jsx)(n.strong,{children:"Projects"})}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Zoom and help controls moved to the lower-right corner of the workspace."}),"\n",(0,r.jsxs)(n.li,{children:["Vector store components moved to provider-specific ",(0,r.jsx)(a.A,{name:"Blocks","aria-hidden":"true"})," ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:(0,r.jsx)(n.strong,{children:"Bundles"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Serper Google Search API"})," component moved to the ",(0,r.jsx)(n.strong,{children:"Serper"})," bundle"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Increased the default maximum file upload size from ",(0,r.jsx)(n.code,{children:"100 MB"})," to ",(0,r.jsx)(n.code,{children:"1024 MB"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"New integrations and bundles:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/integrations-instana-traceloop",children:"Traceloop"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/bundles-cohere",children:"Cohere Rerank"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/bundles-amazon",children:"S3 Bucket Uploader"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/bundles-composio",children:"Composio single-service components"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"deprecations",children:"Deprecations"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.strong,{children:"Local DB"})," component is now in legacy status.\nReplace this component with the ",(0,r.jsxs)(n.a,{href:"/bundles-chroma",children:[(0,r.jsx)(n.strong,{children:"Chroma DB"})," component"]}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"150",children:"1.5.0"}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements-3",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Langflow API requests can require authentication"}),"\n",(0,r.jsxs)(n.p,{children:["To enhance security and ensure proper authentication for automatic login features, Langflow API endpoints now require authentication with a Langflow API key, even when ",(0,r.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),".\nThis change will be enforced in a future release.\nFor temporary backwards compatibility, this release adds the ",(0,r.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN"})," environment variable.\nThe default value is ",(0,r.jsx)(n.code,{children:"true"}),", which disables API authentication enforcement.\nTo enforce API authentication, set ",(0,r.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN=False"}),".\nFor more information, see the documentation for ",(0,r.jsx)(n.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,r.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Centralized ",(0,r.jsx)(n.strong,{children:"Language Model"})," and ",(0,r.jsx)(n.strong,{children:"Embedding Model"})," components"]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"/components-models",children:[(0,r.jsx)(n.strong,{children:"Language Model"})," component"]})," and ",(0,r.jsxs)(n.a,{href:"/components-embedding-models",children:[(0,r.jsx)(n.strong,{children:"Embedding Model"})," component"]})," are now core components for your LLM and embeddings flows. They support multiple models and model providers, and allow you to experiment with different models without swapping out single-provider components.\nFind them in the visual editor in the ",(0,r.jsx)(n.strong,{children:"Models"})," category."]}),"\n",(0,r.jsxs)(n.p,{children:["The single-provider components moved to the ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:(0,r.jsx)(n.strong,{children:"Bundles"})})," section.\nYou can use them to replace the ",(0,r.jsx)(n.strong,{children:"Language Model"})," and ",(0,r.jsx)(n.strong,{children:"Embedding Model"})," core components, or connect them to the ",(0,r.jsx)(n.strong,{children:"Agent"})," component with the ",(0,r.jsx)(n.strong,{children:"Connect other models"})," provider option."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"MCP server one-click installation"}),"\n",(0,r.jsxs)(n.p,{children:["On your Langflow project's ",(0,r.jsx)(n.strong,{children:"MCP server"})," page, click ",(0,r.jsx)(n.strong,{children:"Auto install"})," to install your Langflow MCP server to MCP clients with just one click.\nThe option to install with a JSON configuration file is available for macOS, Windows, and WSL.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"MCP server management"}),"\n",(0,r.jsxs)(n.p,{children:["You can now add, remove, and edit your MCP servers in the ",(0,r.jsx)(n.strong,{children:"MCP Tools"})," components and through your Langflow ",(0,r.jsx)(n.strong,{children:"Settings"})," page.\nFor more information, see ",(0,r.jsx)(n.a,{href:"/mcp-client",children:"Use Langflow as an MCP client"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Input schema replaces temporary overrides"}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Input schema"})," pane replaces the need to manage tweak values in the ",(0,r.jsx)(n.strong,{children:"API access"})," pane. When you enable a parameter in the ",(0,r.jsx)(n.strong,{children:"Input schema"})," pane, the parameter is automatically added to your flow's code snippets, providing ready-to-use templates for making requests in your preferred programming language."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Tools components are redistributed"}),"\n",(0,r.jsxs)(n.p,{children:["All components in the ",(0,r.jsx)(n.strong,{children:"Tools"})," category were moved to other component categories, such as ",(0,r.jsx)(n.strong,{children:"Helpers"})," and ",(0,r.jsx)(n.a,{href:"/components-bundle-components",children:(0,r.jsx)(n.strong,{children:"Bundles"})}),", or marked as legacy."]}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsxs)(n.a,{href:"/mcp-client",children:[(0,r.jsx)(n.strong,{children:"MCP Tools"})," component"]})," is now under the ",(0,r.jsx)(n.strong,{children:"Agents"})," category."]}),"\n",(0,r.jsxs)(n.p,{children:["Tools that performed the same function were combined into single components that support multiple providers, such as the ",(0,r.jsxs)(n.a,{href:"/web-search",children:[(0,r.jsx)(n.strong,{children:"Web Search"})," component"]})," and the ",(0,r.jsx)(n.strong,{children:"News Search"})," component."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Stability improvements"}),"\n",(0,r.jsxs)(n.p,{children:["General stability improvements and bug fixes for enhanced reliability.\nSee an issue? ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/issues",children:"Raise it on GitHub"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"New integrations and bundles"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsxs)(n.a,{href:"/bundles-cleanlab",children:[(0,r.jsx)(n.strong,{children:"Cleanlab"})," bundle"]})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"142",children:"1.4.2"}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements-4",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Enhanced file and flow management system with improved bulk capabilities."}),"\n",(0,r.jsxs)(n.li,{children:["Added the ",(0,r.jsx)(n.strong,{children:"BigQuery"})," component"]}),"\n",(0,r.jsxs)(n.li,{children:["Added the ",(0,r.jsx)(n.strong,{children:"Twelve Labs"})," bundle"]}),"\n",(0,r.jsxs)(n.li,{children:["Added the ",(0,r.jsx)(n.strong,{children:"NVIDIA System-Assist"})," component"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"deprecations-1",children:"Deprecations"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Deprecated the ",(0,r.jsx)(n.strong,{children:"Combine Text"})," component."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"141",children:"1.4.1"}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements-5",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Added an enhanced ",(0,r.jsx)(n.strong,{children:"Breaking Changes"})," feature to help update components without breaking flows after updating Langflow."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"140",children:"1.4.0"}),"\n",(0,r.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"new-features-and-enhancements-6",children:"New features and enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced MCP server functionality to serve Langflow tools to MCP-compatible clients."}),"\n",(0,r.jsxs)(n.li,{children:["Renamed ",(0,r.jsx)(n.strong,{children:"Folders"})," to ",(0,r.jsx)(n.strong,{children:"Projects"})," in the visual editor."]}),"\n",(0,r.jsxs)(n.li,{children:["The ",(0,r.jsx)(n.code,{children:"/folders"})," endpoints now redirect to ",(0,r.jsx)(n.code,{children:"/projects"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"deprecations-2",children:"Deprecations"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Deprecated the ",(0,r.jsx)(n.strong,{children:"Gmail"}),", ",(0,r.jsx)(n.strong,{children:"Google Drive"}),", and ",(0,r.jsx)(n.strong,{children:"Google Search"})," components.\nFor alternatives, see the ",(0,r.jsxs)(n.a,{href:"/bundles-google",children:[(0,r.jsx)(n.strong,{children:"Google"})," bundle"]}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"earlier-releases",children:"Earlier releases"}),"\n",(0,r.jsxs)(n.p,{children:["See the ",(0,r.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]})]})}function x(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}function j(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/8bee5443.ca2cd91a.js b/assets/js/8bee5443.ca2cd91a.js
new file mode 100644
index 0000000000..f7d66fbb72
--- /dev/null
+++ b/assets/js/8bee5443.ca2cd91a.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[879],{45783:(e,n,s)=>{s.d(n,{A:()=>l});var o,i,r=s(96540);function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;nr.createElement("svg",t({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":n},s),e?r.createElement("title",{id:n},e):null,o||(o=r.createElement("g",{fill:"currentColor",clipPath:"url(#a)"},r.createElement("path",{d:"M10.352 1.675a1.655 1.655 0 0 0-2.341 0L1.769 7.917a.552.552 0 1 1-.78-.78L7.23.893a2.759 2.759 0 0 1 4.682 2.341 2.75 2.75 0 0 1 2.34.78l.033.033a2.76 2.76 0 0 1 0 3.901L8.64 13.595a.184.184 0 0 0 0 .26l1.16 1.159a.552.552 0 0 1-.78.78l-1.16-1.16a1.287 1.287 0 0 1 0-1.82l5.645-5.645a1.655 1.655 0 0 0 0-2.34l-.032-.033a1.655 1.655 0 0 0-2.34-.002l-4.65 4.65-.002.003-.063.063a.552.552 0 1 1-.78-.78l4.715-4.716a1.655 1.655 0 0 0-.001-2.34"}),r.createElement("path",{d:"M9.572 3.235a.552.552 0 1 0-.78-.78L4.174 7.07a2.759 2.759 0 0 0 3.901 3.902l4.617-4.617a.552.552 0 0 0-.78-.78l-4.617 4.617a1.655 1.655 0 0 1-2.341-2.341z"}))),i||(i=r.createElement("defs",null,r.createElement("clipPath",{id:"a"},r.createElement("path",{fill:"#fff",d:"M0 0h16v16H0z"})))))},84739:(e,n,s)=>{s.r(n),s.d(n,{CH:()=>p,assets:()=>h,chCodeConfig:()=>g,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>o,toc:()=>u});const o=JSON.parse('{"id":"Support/release-notes","title":"Langflow release notes","description":"This page summarizes significant changes to Langflow in each release.","source":"@site/docs/Support/release-notes.mdx","sourceDirName":"Support","slug":"/release-notes","permalink":"/release-notes","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Langflow release notes","slug":"/release-notes"},"sidebar":"docs","previous":{"title":"IBM Elite Support for Langflow","permalink":"/luna-for-langflow"}}');var i=s(74848),r=s(28453),t=s(24754),l=s(40619),a=s(45783);const c={title:"Langflow release notes",slug:"/release-notes"},d=void 0,h={},p={annotations:t.hk,Code:t.Cy},g={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},u=[{value:"Prepare to upgrade",id:"prepare-to-upgrade",level:2},{value:"1.8.x",id:"18x",level:2},{value:"Breaking changes",id:"breaking-changes",level:3},{value:"New features and enhancements",id:"new-features-and-enhancements",level:3},{value:"1.7.x",id:"17x",level:2},{value:"Known issue: Data not accessible when upgrading to version 1.7.0",id:"v170-data-path",level:3},{value:"New features and enhancements",id:"new-features-and-enhancements-1",level:3},{value:"1.6.0",id:"160",level:2},{value:"Known issue, potential security vulnerability: .env file not loaded in versions 1.6.0 through 1.6.3",id:"env-file-bug",level:3},{value:"Known issue: Don't auto-upgrade Windows Desktop",id:"windows-desktop-update-issue",level:3},{value:"Breaking changes",id:"breaking-changes-1",level:3},{value:"New features and enhancements",id:"new-features-and-enhancements-2",level:3},{value:"Deprecations",id:"deprecations",level:3},{value:"1.5.0",id:"150",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-3",level:3},{value:"1.4.2",id:"142",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-4",level:3},{value:"Deprecations",id:"deprecations-1",level:3},{value:"1.4.1",id:"141",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-5",level:3},{value:"1.4.0",id:"140",level:2},{value:"New features and enhancements",id:"new-features-and-enhancements-6",level:3},{value:"Deprecations",id:"deprecations-2",level:3},{value:"Earlier releases",id:"earlier-releases",level:2}];function f(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return p||j("CH",!1),p.Code||j("CH.Code",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,i.jsxs)(n.p,{children:["This page summarizes significant changes to Langflow in each release.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases/latest",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Due to strict SemVer requirements, Langflow Desktop can have different patch versions than the core Langflow OSS Python package, but the major and minor versions are aligned."}),"\n",(0,i.jsx)(n.h2,{id:"prepare-to-upgrade",children:"Prepare to upgrade"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Whenever possible, the Langflow team recommends installing new Langflow versions in a new virtual environment or VM before upgrading your primary installation.\nThis allows you to ",(0,i.jsx)(n.a,{href:"/concepts-flows-import#import-a-flow",children:"import flows"})," from your existing installation and test them in the new version without disrupting your existing installation.\nIn the event of breaking changes or bugs, your existing installation is preserved in a stable state.\nIf you are upgrading Windows Desktop to 1.6.0, don't auto-upgrade with the in-app ",(0,i.jsx)(n.strong,{children:"Update"})," button. Instead, follow the instructions in ",(0,i.jsx)(n.a,{href:"#windows-desktop-update-issue",children:"Known issue: Don't auto-upgrade Windows Desktop"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"To avoid the impact of potential breaking changes and test new versions, the Langflow team recommends the following upgrade process:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Recommended: ",(0,i.jsx)(n.a,{href:"/api-projects#export-a-project",children:"Export your projects"})," to create backups of your flows:"]}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"curl ",props:{style:{color:"#FFA657"}}},{content:"-X ",props:{style:{color:"#79C0FF"}}},{content:"GET ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:'"',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_SERVER_URL",props:{style:{color:"#C9D1D9"}}},{content:"/api/v1/projects/download/",props:{style:{color:"#A5D6FF"}}},{content:"$PROJECT_ID",props:{style:{color:"#C9D1D9"}}},{content:'" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:'"accept: application/json" ',props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -H ",props:{style:{color:"#79C0FF"}}},{content:'"x-api-key: ',props:{style:{color:"#A5D6FF"}}},{content:"$LANGFLOW_API_KEY",props:{style:{color:"#C9D1D9"}}},{content:'"',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,i.jsxs)(n.p,{children:["To export flows from the visual editor, see ",(0,i.jsx)(n.a,{href:"/concepts-flows-import",children:"Import and export flows"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Install the new version:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Langflow OSS Python package"}),": Install the new version in a new virtual environment. For instructions, see ",(0,i.jsx)(n.a,{href:"/get-started-installation#install-and-run-the-langflow-oss-python-package",children:"Install and run the Langflow OSS Python package"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Langflow Docker image"}),": Run the new image in a separate container."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Langflow Desktop"}),": To upgrade in place, open Langflow Desktop, and then click ",(0,i.jsx)(n.strong,{children:"Upgrade Available"})," in the Langflow header. If you want to isolate the new version, you must install Langflow Desktop on a separate physical or virtual machine, and then ",(0,i.jsx)(n.a,{href:"/concepts-flows-import",children:"import your flows"})," to the new installation."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/concepts-flows-import",children:"Import your flows"})," to test them in the new version, ",(0,i.jsx)(n.a,{href:"/concepts-components#component-versions",children:"upgrading components"})," as needed."]}),"\n",(0,i.jsxs)(n.p,{children:["When upgrading components, you can use the ",(0,i.jsx)(n.strong,{children:"Create backup flow before updating"})," option if you didn't previously export your flows."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"If you installed the new version in isolation, upgrade your primary installation after testing the new version."}),"\n",(0,i.jsx)(n.p,{children:"If you made changes to your flows in the isolated installation, you might want to export and import those flows back to your upgraded primary installation so you don't have to repeat the component upgrade process."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"18x",children:"1.8.x"}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"langflow-base"})," dependency structure refactored"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"langflow-base"})," package now uses granular optional dependency groups. As a result, many dependencies that were previously included in the ",(0,i.jsx)(n.code,{children:"langflow-base"})," installation were moved to optional extras."]}),"\n",(0,i.jsxs)(n.p,{children:["If you installed Langflow with ",(0,i.jsx)(n.code,{children:"uv pip install langflow"}),", this isn't a breaking change. Installing ",(0,i.jsx)(n.code,{children:"langflow"})," automatically installs ",(0,i.jsx)(n.code,{children:"langflow-base[complete]"}),", which includes all optional dependencies and maintains the same functionality as before."]}),"\n",(0,i.jsxs)(n.p,{children:["However, if you installed Langflow with ",(0,i.jsx)(n.code,{children:"uv pip install langflow-base"})," without specifying extra dependencies, this ",(0,i.jsx)(n.em,{children:"is"})," a breaking change.\nSome dependencies that were previously included by default are now available only through optional extras.\nTherefore, installing ",(0,i.jsx)(n.code,{children:"langflow-base"})," directly only installs the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/blob/main/src/backend/base/pyproject.toml",children:"core base dependencies"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["If you installed ",(0,i.jsx)(n.code,{children:"langflow-base"}),", there are two ways to resolve dependency errors that result from this breaking change:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you need the full set of dependencies, you must install ",(0,i.jsx)(n.code,{children:"langflow-base"})," with the ",(0,i.jsx)(n.code,{children:"complete"})," extra:"]}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:'pip install "langflow-base[complete]"',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you need specific dependencies, you must install ",(0,i.jsx)(n.code,{children:"langflow-base"})," with those optional dependency groups. For example:"]}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:'pip install "langflow-base[postgresql,openai,chroma]"',props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about available optional dependency groups, see ",(0,i.jsxs)(n.a,{href:"/install-custom-dependencies#install-optional-dependency-groups-for-langflow-base",children:["Install optional dependency groups for ",(0,i.jsx)(n.code,{children:"langflow-base"})]}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Docker image does not include ",(0,i.jsx)(n.code,{children:"uv"})," or ",(0,i.jsx)(n.code,{children:"uvx"})]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Starting with Langflow 1.8.1, the official Docker images include ",(0,i.jsx)(n.code,{children:"uv"})," and ",(0,i.jsx)(n.code,{children:"uvx"})," again.\nIf you're using Langflow 1.8.0, follow the steps in this release note to add ",(0,i.jsx)(n.code,{children:"uv"})," and ",(0,i.jsx)(n.code,{children:"uvx"})," in a derived image."]})}),"\n",(0,i.jsxs)(n.p,{children:["In Langflow 1.8.0, the Langflow Docker image does not include ",(0,i.jsx)(n.code,{children:"uv"})," or ",(0,i.jsx)(n.code,{children:"uvx"})," in the runtime image.\nThis means that MCP server configurations, including the default Langflow MCP server, that rely on commands like ",(0,i.jsx)(n.code,{children:"uvx mcp-proxy"})," will fail inside the container with a ",(0,i.jsx)(n.code,{children:"command not found"})," error."]}),"\n",(0,i.jsxs)(n.p,{children:["If you use MCP from within a Langflow 1.8.0 Docker image, you must install ",(0,i.jsx)(n.code,{children:"uv"})," in an image derived from the official ",(0,i.jsx)(n.code,{children:"langflowai/langflow"})," image."]}),"\n",(0,i.jsxs)(n.p,{children:["To install ",(0,i.jsx)(n.code,{children:"uv"})," and ",(0,i.jsx)(n.code,{children:"uvx"})," in a derived image based on the official ",(0,i.jsx)(n.code,{children:"langflowai/langflow"})," image, do the following:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Create a ",(0,i.jsx)(n.code,{children:"Dockerfile"})," in your project."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Use the official Langflow image as the base and install ",(0,i.jsx)(n.code,{children:"uv"})," into the existing virtual environment:"]}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"FROM",props:{style:{color:"#FF7B72"}}},{content:" langflowai/langflow:1.8.0",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"USER",props:{style:{color:"#FF7B72"}}},{content:" root",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"RUN",props:{style:{color:"#FF7B72"}}},{content:" /app/.venv/bin/pip install uv",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"USER",props:{style:{color:"#FF7B72"}}},{content:" user",props:{style:{color:"#C9D1D9"}}}]}],lang:"dockerfile"},annotations:[]}]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Build the image."}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"build ",props:{style:{color:"#A5D6FF"}}},{content:"-t ",props:{style:{color:"#79C0FF"}}},{content:"YOUR_IMAGE_NAME .",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,i.jsxs)(n.p,{children:["Replace ",(0,i.jsx)(n.code,{children:"YOUR_IMAGE_NAME"})," with your Docker image name."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Run the new image:"}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 ",props:{style:{color:"#79C0FF"}}},{content:"YOUR_IMAGE_NAME",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more information, see ",(0,i.jsx)(n.a,{href:"/deployment-docker#upgrade-the-langflow-docker-image",children:"Upgrade the Langflow Docker image"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Disabled tool calling for Gemini 3 preview models"}),"\n",(0,i.jsxs)(n.p,{children:["Tool calling is temporarily disabled for the following Google Gemini 3 preview models:\n",(0,i.jsx)(n.code,{children:"gemini-3.1-pro-preview"}),", ",(0,i.jsx)(n.code,{children:"gemini-3-pro-preview"}),", ",(0,i.jsx)(n.code,{children:"gemini-3-flash-preview"}),", and ",(0,i.jsx)(n.code,{children:"gemini-3-pro-image-preview"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Docling installation behavior differs between Desktop and OSS"}),"\n",(0,i.jsx)(n.p,{children:"In Langflow 1.8.0, Docling behavior depends on how Langflow is installed."}),"\n",(0,i.jsxs)(n.p,{children:["For Langflow Desktop installations, you need to set ",(0,i.jsx)(n.code,{children:"LANGFLOW_DOCLING=True"})," in your ",(0,i.jsx)(n.code,{children:".env"})," file to enable Docling dependency installation. For more information, see ",(0,i.jsx)(n.a,{href:"/environment-variables#set-environment-variables-for-langflow-desktop",children:"Set environment variables for Langflow Desktop"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["For Langflow OSS installations with ",(0,i.jsx)(n.code,{children:"uv pip install langflow"}),", Docling is included with the Langflow package."]}),"\n",(0,i.jsxs)(n.p,{children:["For Langflow OSS installations with ",(0,i.jsx)(n.code,{children:"uv pip install langflow-base"}),", install Docling explicitly as an extra with ",(0,i.jsx)(n.code,{children:'uv pip install "langflow-base[docling]"'}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Global model provider configuration"}),"\n",(0,i.jsxs)(n.p,{children:["Model providers for language models, embedding models, and agents are now configured globally in the ",(0,i.jsx)(n.strong,{children:"Model providers"})," pane, instead of within individual components.\nFor more information, see the ",(0,i.jsx)(n.a,{href:"/components-models",children:"Language Model component"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Component inspection panel"}),"\n",(0,i.jsxs)(n.p,{children:["The component inspection panel replaces the component header menu for managing component parameters and settings.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/concepts-components#component-inspection-panel",children:"Component inspection panel"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Developer API: ",(0,i.jsx)(n.code,{children:"/workflow"})," synchronous endpoints (Beta)"]}),"\n",(0,i.jsxs)(n.p,{children:["The Developer API is part of a larger effort to improve Langflow's APIs with enhanced capabilities and better developer experience.\nThe Developer API now includes ",(0,i.jsx)(n.code,{children:"/v2/workflow"})," endpoints for executing flows with enhanced error handling, timeout protection, and structured responses.\nThe synchronous execution endpoint is available at ",(0,i.jsx)(n.code,{children:"POST /api/v2/workflows"}),".\nFor more information, see ",(0,i.jsx)(n.a,{href:"/workflow-api",children:"Workflow API (Beta)"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Traces and trace view"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow now records execution traces for flows and components.\nView your traces in the ",(0,i.jsx)(n.strong,{children:"Trace Details"})," pane, and inspect span trees, latencies, and errors.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/traces",children:"Traces"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Knowledge bases"}),"\n",(0,i.jsxs)(n.p,{children:["Knowledge bases let you organize documents and other reference data into reusable vector databases that can be attached to multiple flows.\nThis makes it easier to centralize domain knowledge and reuse the same data across agents and retrieval workflows.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/knowledge",children:"Manage vector data"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Mustache templating support for Prompt Template component"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Prompt Template"})," component now supports Mustache templating syntax.\nMustache templating eliminates the need to escape curly braces when including JSON structures in your prompts. For more information, see ",(0,i.jsx)(n.a,{href:"/components-prompts#use-mustache-templating-in-prompt-templates",children:"Prompt Template"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"More configuration options for JWT-based session authentication"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow 1.8 offers additional configuration options for JWT algorithms, including support for RS256/RS512 algorithms, configurable keys, and token lifetimes. For more information, see ",(0,i.jsx)(n.a,{href:"/jwt-authentication",children:"JWT authentication"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Global variables in MCP server headers"}),"\n",(0,i.jsxs)(n.p,{children:["You can now use ",(0,i.jsx)(n.a,{href:"/configuration-global-variables",children:"global variables"})," in MCP server header values to securely store and reference sensitive values. For more information, see ",(0,i.jsx)(n.a,{href:"/mcp-client#use-global-variables-in-mcp-server-headers",children:"Use global variables in MCP server headers"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pass environment variables to flows in API headers and CLI"}),"\n",(0,i.jsxs)(n.p,{children:["The ability to pass environment variables in HTTP headers (previously available for the ",(0,i.jsxs)(n.a,{href:"/api-openai-responses#global-var",children:[(0,i.jsx)(n.code,{children:"/responses"})," endpoint"]}),") is now also available for the ",(0,i.jsxs)(n.a,{href:"/api-flows-run#pass-global-variables-in-headers",children:[(0,i.jsx)(n.code,{children:"/run"})," endpoint"]}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Guardrails component"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Guardrails"})," component validates input text against security and safety guardrails by using a connected language model to check for content such as PII, tokens/passwords, or offensive content. For more information, see ",(0,i.jsx)(n.a,{href:"/guardrails",children:"Guardrails"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Token usage tracking for OpenAI Responses API"}),"\n",(0,i.jsxs)(n.p,{children:["The OpenAI Responses API endpoint now tracks and returns token usage statistics when your flow uses language model APIs that provide token usage information.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/api-openai-responses#token-usage-tracking",children:"Token usage tracking"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Docker AMD vs ARM image sizes"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow 1.8.0 addresses the AMD vs ARM Docker image size gap.\nWe reconfigured our Python dependencies to use CPU-only PyTorch wheels through ",(0,i.jsx)(n.code,{children:"uv"})," sources, which removes large CUDA-related dependencies from the AMD64 images.\nWith this change, both AMD64 and ARM64 images are now smaller than 2 GB."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/bundles-agentics",children:[(0,i.jsx)(n.strong,{children:"Agentics"})," bundle"]})]}),"\n",(0,i.jsx)(n.p,{children:"Uses LLMs to transform tabular data, including mapping, reducing, and generating DataFrame rows based on a defined schema."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/bundles-lite-llm",children:[(0,i.jsx)(n.strong,{children:"LiteLLM"})," bundle"]})]}),"\n",(0,i.jsx)(n.p,{children:"Connects to models through a LiteLLM proxy so you can route requests to multiple LLM providers and switch providers without changing flow credentials."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/integrations-openlayer",children:[(0,i.jsx)(n.strong,{children:"Openlayer"})," observability integration"]})]}),"\n",(0,i.jsx)(n.p,{children:"Configures Langflow to send tracing data to Openlayer for analysis, monitoring, and evaluation of your flow executions."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"17x",children:"1.7.x"}),"\n",(0,i.jsx)(n.admonition,{title:"Version yanked",type:"warning",children:(0,i.jsx)(n.p,{children:"Version 1.7.0 was yanked due to a critical bug. Version 1.7.0 has been replaced with version 1.7.1, which includes a fix for this issue."})}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"v170-data-path",children:"Known issue: Data not accessible when upgrading to version 1.7.0"}),"\n",(0,i.jsx)(n.p,{children:"A critical issue was identified during the upgrade process to version 1.7.0."}),"\n",(0,i.jsxs)(n.p,{children:["Flows, projects, and global variables are ",(0,i.jsx)(n.strong,{children:"not"})," deleted or corrupted. The data still exists, but version 1.7.0 cannot find it due to a path change in how flows are located.\nAll Langflow versions upgrading to 1.7.0 are affected."]}),"\n",(0,i.jsx)(n.p,{children:"Don't upgrade to Langflow version 1.7.0.\nInstead, upgrade directly to version 1.7.1, which includes a fix for this bug."}),"\n",(0,i.jsx)(n.p,{children:"If you installed version 1.7.0 before the fix was released, follow these steps to recover your flows:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Revert Langflow to version 1.6.9:"}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"pip install langflow==",props:{style:{color:"#A5D6FF"}}},{content:"1.6.9",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Verify that your flows, projects, and global variables are accessible."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Upgrade directly to version 1.7.1, which includes the fix for this issue:"}),"\n",(0,i.jsx)(p.Code,{codeConfig:g,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"pip install langflow==",props:{style:{color:"#A5D6FF"}}},{content:"1.7.1",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements-1",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Support for streamable HTTP transport for MCP clients and servers"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow now supports ",(0,i.jsx)(n.a,{href:"https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http",children:"streamable HTTP transport"})," for both MCP clients and servers.\nWhen using Langflow as an ",(0,i.jsx)(n.a,{href:"/mcp-client",children:"MCP client"}),", you can connect to MCP servers with streamable HTTP transport.\nWhen using Langflow as an ",(0,i.jsx)(n.a,{href:"/mcp-server",children:"MCP server"}),", clients can connect using streamable HTTP transport.\nSSE transport is still supported as a fallback for backwards compatibility."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Webhook authentication"}),"\n",(0,i.jsxs)(n.p,{children:["Added the ",(0,i.jsx)(n.code,{children:"LANGFLOW_WEBHOOK_AUTH_ENABLE"})," environment variable for authenticating requests to the ",(0,i.jsxs)(n.a,{href:"/api-flows-run#webhook-run-flow",children:[(0,i.jsx)(n.code,{children:"/webhook"})," endpoint"]}),". When ",(0,i.jsx)(n.code,{children:"LANGFLOW_WEBHOOK_AUTH_ENABLE=TRUE"}),", webhook endpoints require API key authentication and validate that the authenticated user owns the flow being executed. When ",(0,i.jsx)(n.code,{children:"FALSE"}),", no Langflow API key is required and all requests to the webhook endpoint are treated as being sent by the flow owner. For more information, see ",(0,i.jsx)(n.a,{href:"/webhook",children:"Trigger flows with webhooks"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Configurable API key validation"}),"\n",(0,i.jsxs)(n.p,{children:["Added the ",(0,i.jsx)(n.code,{children:"LANGFLOW_API_KEY_SOURCE"})," environment variable to control how Langflow validates API keys. When set to ",(0,i.jsx)(n.code,{children:"db"}),", Langflow validates API keys against keys stored in the database. When set to ",(0,i.jsx)(n.code,{children:"env"}),", Langflow validates API keys against the ",(0,i.jsx)(n.code,{children:"LANGFLOW_API_KEY"})," environment variable. For more information, see ",(0,i.jsx)(n.a,{href:"/api-keys-and-authentication#langflow-api-key-source",children:"API keys and authentication"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"SSRF protection"}),"\n",(0,i.jsxs)(n.p,{children:["Added SSRF (Server-Side Request Forgery) protection to the ",(0,i.jsxs)(n.a,{href:"/api-request",children:[(0,i.jsx)(n.strong,{children:"API Request"})," component"]}),". HTTP redirects are disabled by default to prevent SSRF bypass attacks. To enable SSRF protection, set ",(0,i.jsx)(n.code,{children:"LANGFLOW_SSRF_PROTECTION_ENABLED=TRUE"}),". Configure allowed hosts with ",(0,i.jsx)(n.code,{children:"LANGFLOW_SSRF_ALLOWED_HOSTS"}),". Flows that relied on automatic redirects will need to enable it manually."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Email registration in Langflow Desktop"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow Desktop now includes an email registration screen at startup. The registered email address helps track user registrations and understand the user base. For more information, see ",(0,i.jsx)(n.a,{href:"/contributing-telemetry#email",children:"Telemetry"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Changes to read/write file components"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Save File"})," component was renamed to ",(0,i.jsx)(n.strong,{children:"Write File"}),", and it can now save to S3 and Google Drive.\nThe ",(0,i.jsx)(n.strong,{children:"File"})," component was renamed to ",(0,i.jsx)(n.strong,{children:"Read File"}),", and it can now read from AWS S3 and Google Drive.\nBoth components support ",(0,i.jsx)(n.strong,{children:"Tool Mode"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"New integrations, bundles, and components:"}),"\n",(0,i.jsxs)(n.p,{children:["New filter operator for ",(0,i.jsx)(n.strong,{children:"DataFrame Operations"})," component"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsxs)(n.a,{href:"/dataframe-operations",children:[(0,i.jsx)(n.strong,{children:"DataFrame Operations"})," component"]})," now includes a ",(0,i.jsx)(n.code,{children:"not contains"})," filter operator.\nUse it to clean data by extracting only records that ",(0,i.jsx)(n.em,{children:"don't"})," contain specific values.\nFor example, you can filter out invalid email addresses that don't contain ",(0,i.jsx)(n.code,{children:"@"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["New JSON operations for ",(0,i.jsx)(n.strong,{children:"Data Operations"})," component"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsxs)(n.a,{href:"/data-operations",children:[(0,i.jsx)(n.strong,{children:"Data Operations"})," component"]})," now includes two operations for advanced JSON data manipulation.\nThe ",(0,i.jsx)(n.strong,{children:"Path Selection"})," operation extracts values from nested JSON structures, and the ",(0,i.jsx)(n.strong,{children:"JQ Expression"})," operation uses the ",(0,i.jsx)(n.a,{href:"https://jqlang.org/",children:(0,i.jsx)(n.code,{children:"jq"})})," query language to perform advanced JSON filtering, projections, and transformations."]}),"\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/smart-router",children:[(0,i.jsx)(n.strong,{children:"Smart Router"})," component"]})]}),"\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/mock-data",children:[(0,i.jsx)(n.strong,{children:"Mock Data"})," component"]})]}),"\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/dynamic-create-data",children:[(0,i.jsx)(n.strong,{children:"Dynamic Create Data"})," component"]})]}),"\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/bundles-altk",children:[(0,i.jsx)(n.strong,{children:"ALTK"})," bundle"]})]}),"\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/bundles-cometapi",children:[(0,i.jsx)(n.strong,{children:"CometAPI"})," bundle"]})]}),"\n",(0,i.jsxs)(n.p,{children:["New ",(0,i.jsxs)(n.a,{href:"/bundles-cuga",children:[(0,i.jsx)(n.strong,{children:"CUGA"})," bundle"]})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"LLM Router"})," component is now called the ",(0,i.jsxs)(n.a,{href:"/llm-selector",children:[(0,i.jsx)(n.strong,{children:"LLM Selector"})," component"]}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsxs)(n.a,{href:"/web-search",children:[(0,i.jsx)(n.strong,{children:"Web Search"})," component"]})," now consolidates Web Search, News Search, and RSS Reader into a single component with tabs for different search modes. You can search the web using DuckDuckGo, search Google News, or read RSS feeds\u2014all from one component. The separate ",(0,i.jsx)(n.strong,{children:"News Search"})," and ",(0,i.jsx)(n.strong,{children:"RSS Reader"})," components have been removed."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"160",children:"1.6.0"}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"env-file-bug",children:"Known issue, potential security vulnerability: .env file not loaded in versions 1.6.0 through 1.6.3"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow versions 1.6.0 through 1.6.3 have a critical bug where environment variables from ",(0,i.jsx)(n.code,{children:".env"})," files aren't read.\nThis affects all deployments using environment variables for configuration, including security settings."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Potential security vulnerability",type:"warning",children:[(0,i.jsxs)(n.p,{children:["If your ",(0,i.jsx)(n.code,{children:".env"})," file includes ",(0,i.jsx)(n.code,{children:"AUTO_LOGIN=false"}),", upgrading to the impacted versions causes Langflow to fall back to default settings, potentially giving all users superuser access immediately upon upgrade.\nAdditionally, database credentials, API keys, and other sensitive configurations can't be loaded from ",(0,i.jsx)(n.code,{children:".env"})," files."]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Don't"})," upgrade to any Langflow version from 1.6.0 through 1.6.3 if you use ",(0,i.jsx)(n.code,{children:".env"})," files for configuration.\nInstead, upgrade to 1.6.4, which includes a fix for this bug."]})]}),"\n",(0,i.jsx)(n.h3,{id:"windows-desktop-update-issue",children:"Known issue: Don't auto-upgrade Windows Desktop"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Windows users of Langflow Desktop should ",(0,i.jsx)(n.strong,{children:"not"})," use the in-app update feature to upgrade to Langflow version 1.6.0.\nOnly Windows Desktop users upgrading to Langflow version 1.6.0 are affected."]})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Update"})," button in Langflow Desktop will not work for Windows users, and may result in data loss."]}),"\n",(0,i.jsxs)(n.p,{children:["Instead, download a fresh installation from the ",(0,i.jsx)(n.a,{href:"https://langflow.org",children:"Langflow website"})," when a new version is available."]}),"\n",(0,i.jsx)(n.p,{children:"Follow the instructions below to minimize the risk of losing flows."}),"\n",(0,i.jsxs)(n.p,{children:["These instructions assume the default path for the Langflow database of ",(0,i.jsx)(n.code,{children:"C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\com.langflow\\data\\database.db"})," or ",(0,i.jsx)(n.code,{children:"C:\\Users\\%YOUR_USERNAME%\\AppData\\Roaming\\com.langflow\\data\\database.db"}),". Replace ",(0,i.jsx)(n.code,{children:"YOUR_USERNAME"})," with your Windows username."]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Ensure you have Administrator privileges."}),"\n",(0,i.jsx)(n.li,{children:"Ensure you have enough disk space for a second installation of Langflow."}),"\n",(0,i.jsx)(n.li,{children:"Close Langflow, and ensure no Langflow process is running in Task Manager."}),"\n",(0,i.jsxs)(n.li,{children:["The Langflow 1.6.0 installer automatically performs a database backup in a later step, but an additional manual backup provides additional redundancy and is recommended.\nTo manually back up your Langflow database file, do the following:","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["In Windows Explorer, navigate to ",(0,i.jsx)(n.code,{children:"C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\com.langflow\\data\\"}),". Replace ",(0,i.jsx)(n.code,{children:"YOUR_USERNAME"})," with your Windows username."]}),"\n",(0,i.jsxs)(n.li,{children:["Copy the ",(0,i.jsx)(n.code,{children:"database.db"})," at this location, and paste it to a safe location."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Download the Windows installer from the ",(0,i.jsx)(n.a,{href:"https://langflow.org",children:"Langflow website"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Run the Windows installer as an Administrator. To run the installer as an Administrator, right-click the executable and select ",(0,i.jsx)(n.strong,{children:"Run as administrator"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Follow the Windows installer's guided steps.\nThe Langflow 1.6.0 installer automatically performs a database backup.\nThese steps install Langflow from scratch, and result in two Langflow installations: the previously installed version, and version 1.6.0.\nThis is expected behavior."}),"\n",(0,i.jsx)(n.li,{children:"Start version 1.6.0 of Langflow, and confirm your flows behave as expected."}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"If flows are missing"}),", restore your flows from your manual backup by doing the following:","\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Close Langflow."}),"\n",(0,i.jsxs)(n.li,{children:["Navigate to your backup location, and copy the ",(0,i.jsx)(n.code,{children:"database.db"})," file."]}),"\n",(0,i.jsxs)(n.li,{children:["Replace the database file in the new installation's ",(0,i.jsx)(n.code,{children:"data"})," directory."]}),"\n",(0,i.jsx)(n.li,{children:"Start Langflow, and confirm your flows behave as expected."}),"\n",(0,i.jsx)(n.li,{children:"After confirmation, uninstall the previous version of Langflow, and keep version 1.6.0."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"breaking-changes-1",children:"Breaking changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Authentication enforced for Langflow API requests by default"}),"\n",(0,i.jsxs)(n.p,{children:["In Langflow version 1.6, ",(0,i.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=True"})," and ",(0,i.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN=False"})," by default.\nThis enforces authentication for Langflow API requests while still automatically authenticating all users as superusers in the visual editor."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["This is a breaking change from 1.5 where both of these environment variables were ",(0,i.jsx)(n.code,{children:"true"})," by default, bypassing all authentication."]})}),"\n",(0,i.jsxs)(n.p,{children:["For temporary backwards compatibility, you can revert to the earlier unauthenticated behavior by setting both variables to ",(0,i.jsx)(n.code,{children:"true"}),".\nHowever, a future release will set ",(0,i.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=False"})," and remove ",(0,i.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN"}),".\nAt that point, Langflow will strictly enforce API key authentication for API requests, and you can manually disable authentication for some features, like the visual editor, by setting ",(0,i.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["For more information, see the documentation for ",(0,i.jsx)(n.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,i.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements-2",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"OpenAI Responses API compatibility"}),"\n",(0,i.jsxs)(n.p,{children:["Langflow now includes an endpoint that is compatible with the ",(0,i.jsx)(n.a,{href:"https://platform.openai.com/docs/api-reference/responses",children:"OpenAI Responses API"})," at ",(0,i.jsx)(n.code,{children:"POST /api/v1/responses"}),".\nThis allows you to use existing OpenAI client libraries with minimal code changes by replacing the ",(0,i.jsx)(n.code,{children:"model"})," name with your ",(0,i.jsx)(n.code,{children:"flow_id"}),".\nThe endpoint supports streaming responses, conversation continuity, tool call results, and global variable passing through headers.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/api-openai-responses",children:"OpenAI Responses API"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Advanced document parsing with built-in Docling support"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Read File"})," component supports advanced parsing with the Docling library."]}),"\n",(0,i.jsxs)(n.p,{children:["To make it easier to use the ",(0,i.jsxs)(n.a,{href:"/bundles-docling",children:[(0,i.jsx)(n.strong,{children:"Docling"})," components"]})," and the ",(0,i.jsx)(n.strong,{children:"Read File"})," component's new advanced parsing feature, the Docling dependency is now included with Langflow for all operating systems except macOS Intel (x86_64)."]}),"\n",(0,i.jsxs)(n.p,{children:["For more information, see ",(0,i.jsx)(n.a,{href:"/read-file#advanced-parsing",children:"Advanced parsing"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Reorganized component menus and visual editor controls"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.a,{href:"/concepts-overview#workspace",children:"workspace"})," sidebar is divided into separate sections for ",(0,i.jsx)(l.A,{name:"Search","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Search"}),", ",(0,i.jsx)(l.A,{name:"Component","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Core components"}),", ",(0,i.jsx)(a.A,{})," ",(0,i.jsx)(n.a,{href:"/mcp-server",children:(0,i.jsx)(n.strong,{children:"MCP servers"})}),", ",(0,i.jsx)(l.A,{name:"Blocks","aria-hidden":"true"})," ",(0,i.jsx)(n.a,{href:"/components-bundle-components",children:(0,i.jsx)(n.strong,{children:"Bundles"})}),", and ",(0,i.jsx)(l.A,{name:"StickyNote","aria-hidden":"true"})," ",(0,i.jsx)(n.strong,{children:"Add Note"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Lock/unlock controls moved to flow details in ",(0,i.jsx)(n.a,{href:"/concepts-flows#projects",children:(0,i.jsx)(n.strong,{children:"Projects"})}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Zoom and help controls moved to the lower-right corner of the workspace."}),"\n",(0,i.jsxs)(n.li,{children:["Vector store components moved to provider-specific ",(0,i.jsx)(l.A,{name:"Blocks","aria-hidden":"true"})," ",(0,i.jsx)(n.a,{href:"/components-bundle-components",children:(0,i.jsx)(n.strong,{children:"Bundles"})})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Serper Google Search API"})," component moved to the ",(0,i.jsx)(n.strong,{children:"Serper"})," bundle"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Increased the default maximum file upload size from ",(0,i.jsx)(n.code,{children:"100 MB"})," to ",(0,i.jsx)(n.code,{children:"1024 MB"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"New integrations and bundles:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/integrations-instana-traceloop",children:"Traceloop"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/bundles-cohere",children:"Cohere Rerank"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/bundles-amazon",children:"S3 Bucket Uploader"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/bundles-composio",children:"Composio single-service components"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"deprecations",children:"Deprecations"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.strong,{children:"Local DB"})," component is now in legacy status.\nReplace this component with the ",(0,i.jsxs)(n.a,{href:"/bundles-chroma",children:[(0,i.jsx)(n.strong,{children:"Chroma DB"})," component"]}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"150",children:"1.5.0"}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements-3",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Langflow API requests can require authentication"}),"\n",(0,i.jsxs)(n.p,{children:["To enhance security and ensure proper authentication for automatic login features, Langflow API endpoints now require authentication with a Langflow API key, even when ",(0,i.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),".\nThis change will be enforced in a future release.\nFor temporary backwards compatibility, this release adds the ",(0,i.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN"})," environment variable.\nThe default value is ",(0,i.jsx)(n.code,{children:"true"}),", which disables API authentication enforcement.\nTo enforce API authentication, set ",(0,i.jsx)(n.code,{children:"LANGFLOW_SKIP_AUTH_AUTO_LOGIN=False"}),".\nFor more information, see the documentation for ",(0,i.jsx)(n.a,{href:"/api-keys-and-authentication#langflow-auto-login",children:(0,i.jsx)(n.code,{children:"LANGFLOW_AUTO_LOGIN"})}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Centralized ",(0,i.jsx)(n.strong,{children:"Language Model"})," and ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," components"]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsxs)(n.a,{href:"/components-models",children:[(0,i.jsx)(n.strong,{children:"Language Model"})," component"]})," and ",(0,i.jsxs)(n.a,{href:"/components-embedding-models",children:[(0,i.jsx)(n.strong,{children:"Embedding Model"})," component"]})," are now core components for your LLM and embeddings flows. They support multiple models and model providers, and allow you to experiment with different models without swapping out single-provider components.\nFind them in the visual editor in the ",(0,i.jsx)(n.strong,{children:"Models"})," category."]}),"\n",(0,i.jsxs)(n.p,{children:["The single-provider components moved to the ",(0,i.jsx)(n.a,{href:"/components-bundle-components",children:(0,i.jsx)(n.strong,{children:"Bundles"})})," section.\nYou can use them to replace the ",(0,i.jsx)(n.strong,{children:"Language Model"})," and ",(0,i.jsx)(n.strong,{children:"Embedding Model"})," core components, or connect them to the ",(0,i.jsx)(n.strong,{children:"Agent"})," component with the ",(0,i.jsx)(n.strong,{children:"Connect other models"})," provider option."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"MCP server one-click installation"}),"\n",(0,i.jsxs)(n.p,{children:["On your Langflow project's ",(0,i.jsx)(n.strong,{children:"MCP server"})," page, click ",(0,i.jsx)(n.strong,{children:"Auto install"})," to install your Langflow MCP server to MCP clients with just one click.\nThe option to install with a JSON configuration file is available for macOS, Windows, and WSL.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"MCP server management"}),"\n",(0,i.jsxs)(n.p,{children:["You can now add, remove, and edit your MCP servers in the ",(0,i.jsx)(n.strong,{children:"MCP Tools"})," components and through your Langflow ",(0,i.jsx)(n.strong,{children:"Settings"})," page.\nFor more information, see ",(0,i.jsx)(n.a,{href:"/mcp-client",children:"Use Langflow as an MCP client"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Input schema replaces temporary overrides"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Input schema"})," pane replaces the need to manage tweak values in the ",(0,i.jsx)(n.strong,{children:"API access"})," pane. When you enable a parameter in the ",(0,i.jsx)(n.strong,{children:"Input schema"})," pane, the parameter is automatically added to your flow's code snippets, providing ready-to-use templates for making requests in your preferred programming language."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Tools components are redistributed"}),"\n",(0,i.jsxs)(n.p,{children:["All components in the ",(0,i.jsx)(n.strong,{children:"Tools"})," category were moved to other component categories, such as ",(0,i.jsx)(n.strong,{children:"Helpers"})," and ",(0,i.jsx)(n.a,{href:"/components-bundle-components",children:(0,i.jsx)(n.strong,{children:"Bundles"})}),", or marked as legacy."]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsxs)(n.a,{href:"/mcp-client",children:[(0,i.jsx)(n.strong,{children:"MCP Tools"})," component"]})," is now under the ",(0,i.jsx)(n.strong,{children:"Agents"})," category."]}),"\n",(0,i.jsxs)(n.p,{children:["Tools that performed the same function were combined into single components that support multiple providers, such as the ",(0,i.jsxs)(n.a,{href:"/web-search",children:[(0,i.jsx)(n.strong,{children:"Web Search"})," component"]})," and the ",(0,i.jsx)(n.strong,{children:"News Search"})," component."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Stability improvements"}),"\n",(0,i.jsxs)(n.p,{children:["General stability improvements and bug fixes for enhanced reliability.\nSee an issue? ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/issues",children:"Raise it on GitHub"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"New integrations and bundles"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsxs)(n.a,{href:"/bundles-cleanlab",children:[(0,i.jsx)(n.strong,{children:"Cleanlab"})," bundle"]})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"142",children:"1.4.2"}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements-4",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Enhanced file and flow management system with improved bulk capabilities."}),"\n",(0,i.jsxs)(n.li,{children:["Added the ",(0,i.jsx)(n.strong,{children:"BigQuery"})," component"]}),"\n",(0,i.jsxs)(n.li,{children:["Added the ",(0,i.jsx)(n.strong,{children:"Twelve Labs"})," bundle"]}),"\n",(0,i.jsxs)(n.li,{children:["Added the ",(0,i.jsx)(n.strong,{children:"NVIDIA System-Assist"})," component"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"deprecations-1",children:"Deprecations"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Deprecated the ",(0,i.jsx)(n.strong,{children:"Combine Text"})," component."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"141",children:"1.4.1"}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements-5",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added an enhanced ",(0,i.jsx)(n.strong,{children:"Breaking Changes"})," feature to help update components without breaking flows after updating Langflow."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"140",children:"1.4.0"}),"\n",(0,i.jsxs)(n.p,{children:["Highlights of this release include the following changes.\nFor all changes, see the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"new-features-and-enhancements-6",children:"New features and enhancements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Introduced MCP server functionality to serve Langflow tools to MCP-compatible clients."}),"\n",(0,i.jsxs)(n.li,{children:["Renamed ",(0,i.jsx)(n.strong,{children:"Folders"})," to ",(0,i.jsx)(n.strong,{children:"Projects"})," in the visual editor."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"/folders"})," endpoints now redirect to ",(0,i.jsx)(n.code,{children:"/projects"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"deprecations-2",children:"Deprecations"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Deprecated the ",(0,i.jsx)(n.strong,{children:"Gmail"}),", ",(0,i.jsx)(n.strong,{children:"Google Drive"}),", and ",(0,i.jsx)(n.strong,{children:"Google Search"})," components.\nFor alternatives, see the ",(0,i.jsxs)(n.a,{href:"/bundles-google",children:[(0,i.jsx)(n.strong,{children:"Google"})," bundle"]}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"earlier-releases",children:"Earlier releases"}),"\n",(0,i.jsxs)(n.p,{children:["See the ",(0,i.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow/releases",children:"Changelog"}),"."]})]})}function x(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(f,{...e})}):f(e)}function j(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/acefda8b.6897bd64.js b/assets/js/acefda8b.ea7dafdc.js
similarity index 92%
rename from assets/js/acefda8b.6897bd64.js
rename to assets/js/acefda8b.ea7dafdc.js
index 763a6bf764..b47f7e4b5f 100644
--- a/assets/js/acefda8b.6897bd64.js
+++ b/assets/js/acefda8b.ea7dafdc.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[6801],{11470:(e,n,o)=>{o.d(n,{A:()=>k});var t=o(96540),s=o(18215),r=o(17559),i=o(23104),l=o(56347),a=o(205),c=o(57485),d=o(31682),h=o(70679);function u(e){return t.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:o}=e;return(0,t.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:o,default:t}})=>({value:e,label:n,attributes:o,default:t}))}(o);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,o])}function f({value:e,tabValues:n}){return n.some(n=>n.value===e)}function g({queryString:e=!1,groupId:n}){const o=(0,l.W6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(s),(0,t.useCallback)(e=>{if(!s)return;const n=new URLSearchParams(o.location.search);n.set(s,e),o.replace({...o.location,search:n.toString()})},[s,o])]}function m(e){const{defaultValue:n,queryString:o=!1,groupId:s}=e,r=p(e),[i,l]=(0,t.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const o=n.find(e=>e.default)??n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:n,tabValues:r})),[c,d]=g({queryString:o,groupId:s}),[u,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[o,s]=(0,h.Dv)(n);return[o,(0,t.useCallback)(e=>{n&&s.set(e)},[n,s])]}({groupId:s}),x=(()=>{const e=c??u;return f({value:e,tabValues:r})?e:null})();(0,a.A)(()=>{x&&l(x)},[x]);return{selectedValue:i,selectValue:(0,t.useCallback)(e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)},[d,m,r]),tabValues:r}}var x=o(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=o(74848);function w({className:e,block:n,selectedValue:o,selectValue:t,tabValues:r}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.a_)(),c=e=>{const n=e.currentTarget,s=l.indexOf(n),i=r[s].value;i!==o&&(a(n),t(i))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const o=l.indexOf(e.currentTarget)+1;n=l[o]??l[0];break}case"ArrowLeft":{const o=l.indexOf(e.currentTarget)-1;n=l[o]??l[l.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":n},e),children:r.map(({value:e,label:n,attributes:t})=>(0,b.jsx)("li",{role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...t,className:(0,s.A)("tabs__item",j.tabItem,t?.className,{"tabs__item--active":o===e}),children:n??e},e))})}function v({lazy:e,children:n,selectedValue:o}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===o);return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==o}))})}function y(e){const n=m(e);return(0,b.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",j.tabList),children:[(0,b.jsx)(w,{...n,...e}),(0,b.jsx)(v,{...n,...e})]})}function k(e){const n=(0,x.A)();return(0,b.jsx)(y,{...e,children:u(e.children)},String(n))}},19365:(e,n,o)=>{o.d(n,{A:()=>i});o(96540);var t=o(18215);const s={tabItem:"tabItem_Ymn6"};var r=o(74848);function i({children:e,hidden:n,className:o}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,o),hidden:n,children:e})}},90208:(e,n,o)=>{o.r(n),o.d(n,{CH:()=>u,assets:()=>h,chCodeConfig:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>t,toc:()=>f});const t=JSON.parse('{"id":"Contributing/contributing-how-to-contribute","title":"Contribute to Langflow","description":"This guide is intended to help you start contributing to Langflow.","source":"@site/docs/Contributing/contributing-how-to-contribute.mdx","sourceDirName":"Contributing","slug":"/contributing-how-to-contribute","permalink":"/contributing-how-to-contribute","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Contribute to Langflow","slug":"/contributing-how-to-contribute"},"sidebar":"docs","previous":{"title":"Join the Langflow community","permalink":"/contributing-community"},"next":{"title":"Contribute components","permalink":"/contributing-components"}}');var s=o(74848),r=o(28453),i=o(24754),l=o(11470),a=o(19365);const c={title:"Contribute to Langflow",slug:"/contributing-how-to-contribute"},d=void 0,h={},u={annotations:i.hk,Code:i.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},f=[{value:"Langflow services overview",id:"langflow-services-overview",level:2},{value:"Install Langflow from source",id:"install-langflow-from-source",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Clone the Langflow repository",id:"clone-the-langflow-repository",level:3},{value:"Run Langflow from source",id:"run-langflow-from-source",level:3},{value:"Set up your Langflow development environment",id:"set-up-your-langflow-development-environment",level:3},{value:"Troubleshoot frontend build issues",id:"troubleshoot-frontend-build-issues",level:3},{value:"Debug",id:"debug",level:3},{value:"Additional contribution guides",id:"additional-contribution-guides",level:3},{value:"Contribute documentation",id:"contribute-documentation",level:2},{value:"Open a pull request",id:"open-a-pull-request",level:2}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:o}=n;return u||x("CH",!1),u.Code||x("CH.Code",!0),o||x("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(n.p,{children:"This guide is intended to help you start contributing to Langflow.\nAs an open-source codebase in a rapidly developing field, Langflow welcomes contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation."}),"\n",(0,s.jsxs)(n.p,{children:["To contribute code or documentation to Langflow, follow the ",(0,s.jsx)(n.a,{href:"#open-a-pull-request",children:"pull request guide"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"langflow-services-overview",children:"Langflow services overview"}),"\n",(0,s.jsx)(n.p,{children:"This overview will help you understand how to set up your development environment."}),"\n",(0,s.jsx)(n.p,{children:"Langflow consists of two main services:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Frontend: A React/TypeScript application that provides the user interface."}),"\n",(0,s.jsx)(n.li,{children:"Backend: A Python/FastAPI service that handles API requests."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"During development, the frontend and backend services run separately on different ports:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Frontend development server: ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," (with hot reload)."]}),"\n",(0,s.jsxs)(n.li,{children:["Backend API server: ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["When you install Langflow as an end user, the backend serves the frontend internally, making both services available on a single port (",(0,s.jsx)(n.code,{children:"7860"})," by default)."]}),"\n",(0,s.jsx)(n.h2,{id:"install-langflow-from-source",children:"Install Langflow from source"}),"\n",(0,s.jsx)(n.p,{children:"Install Langflow from source by forking the repository and setting up your development environment."}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"})," version 0.4 or later"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/package-manager",children:"Node.js"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://www.gnu.org/software/make/#documentation",children:"Make"})," (Linux and macOS only)"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"clone-the-langflow-repository",children:"Clone the Langflow repository"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fork the ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow",children:"Langflow GitHub repository"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Add the new remote to your local repository on your local machine:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"git ",props:{style:{color:"#FFA657"}}},{content:"remote add FORK_NAME https://github.com/GIT_USERNAME/langflow.git",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"Replace the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"FORK_NAME"}),": A name for your fork of the repository"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GIT_USERNAME"}),": Your Git username"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"run-langflow-from-source",children:"Run Langflow from source"}),"\n",(0,s.jsxs)(n.p,{children:["You can run Langflow from source after cloning the repository, even if you aren't contributing to the codebase.\nThis builds the frontend and serves it through the backend on port ",(0,s.jsx)(n.code,{children:"7860"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The instructions below are for running Langflow from source. For development with hot reload, see ",(0,s.jsx)(n.a,{href:"#set-up-your-langflow-development-environment",children:"Set up development environment"}),"."]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Run from source on macOS/Linux"}),(0,s.jsxs)(n.p,{children:["In your terminal, navigate to the root of the Langflow directory, and then run ",(0,s.jsx)(n.code,{children:"make run_cli"}),"."]}),(0,s.jsx)(n.p,{children:"This command does the following:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Installs frontend and backend dependencies"}),"\n",(0,s.jsx)(n.li,{children:"Builds the frontend static files"}),"\n",(0,s.jsx)(n.li,{children:"Starts the application with default settings"}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Langflow frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]})]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Run from source with Windows CMD"}),(0,s.jsx)(n.p,{children:"To run Langflow from source on Windows, you can use the Langflow repository's included scripts, or run the commands in the terminal."}),(0,s.jsx)(n.p,{children:"Do one of the following:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To install and run Langflow with the included Windows Batch file, navigate to the ",(0,s.jsx)(n.code,{children:"scripts/windows"})," directory, and then run the ",(0,s.jsx)(n.code,{children:"build_and_run.bat"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To run Langflow from the Windows Command Line:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Build the frontend static files:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd src/frontend",props:{}}]},{tokens:[{content:"npm install",props:{}}]},{tokens:[{content:"npm run build",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Copy the contents of the built ",(0,s.jsx)(n.code,{children:"src/frontend/build"})," directory to ",(0,s.jsx)(n.code,{children:"src/backend/base/langflow/frontend"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Start Langflow:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv run langflow run",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Langflow frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]})]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Run from source with PowerShell"}),(0,s.jsx)(n.p,{children:"To run Langflow from source on Windows, you can use the Langflow repository's included scripts, or run the commands in the terminal."}),(0,s.jsx)(n.p,{children:"Do one of the following:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To install and run Langflow with the included scripts, navigate to the ",(0,s.jsx)(n.code,{children:"scripts/windows"})," directory, and then run the ",(0,s.jsx)(n.code,{children:"build_and_run.ps1"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To run Langflow from a PowerShell terminal:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Build the frontend static files:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd src/frontend",props:{}}]},{tokens:[{content:"npm install",props:{}}]},{tokens:[{content:"npm run build",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Copy the contents of the built ",(0,s.jsx)(n.code,{children:"src/frontend/build"})," directory to ",(0,s.jsx)(n.code,{children:"src/backend/base/langflow/frontend"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Start Langflow:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv run langflow run",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Langflow frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]})]}),"\n",(0,s.jsx)(n.h3,{id:"set-up-your-langflow-development-environment",children:"Set up your Langflow development environment"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"make help"})," to display all available make commands."]})}),"\n",(0,s.jsx)(n.p,{children:"This section is for contributors who want to develop and test code changes with hot reload enabled."}),"\n",(0,s.jsxs)(n.p,{children:["If you just want to run Langflow locally without making code changes, see ",(0,s.jsx)(n.a,{href:"#run-langflow-from-source",children:"Run Langflow from source"}),"."]}),"\n",(0,s.jsxs)(l.A,{children:[(0,s.jsx)(a.A,{value:"linux-macos",label:"Linux or macOS",default:!0,children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Set up the Langflow development environment:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"init",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"This command sets up the development environment by doing the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Checking for uv and npm."}),"\n",(0,s.jsx)(n.li,{children:"Installing backend and frontend dependencies."}),"\n",(0,s.jsx)(n.li,{children:"Installing pre-commit hooks."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Run the backend and frontend in separate terminals for development:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Run backend in development mode (includes hot reload)",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"backend",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# In another terminal, run frontend in development mode (includes hot reload)",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"frontend",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"make backend"})," and ",(0,s.jsx)(n.code,{children:"make frontend"})," commands automatically install dependencies, so you don't need to run install commands separately."]}),"\n",(0,s.jsxs)(n.p,{children:["The frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," and the backend at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optional: Install pre-commit hooks to help keep your changes clean and well-formatted."}),"\n",(0,s.jsxs)(n.p,{children:["With pre-commit hooks installed, you must use ",(0,s.jsx)(n.code,{children:"uv run git commit"})," instead of ",(0,s.jsx)(n.code,{children:"git commit"})," directly."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"make init"})," installs pre-commit hooks automatically, or you can run the following command to install them manually:"]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"sync",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"run pre-commit install",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To test your changes before pushing commits, run ",(0,s.jsx)(n.code,{children:"make lint"}),", ",(0,s.jsx)(n.code,{children:"make format"}),", and ",(0,s.jsx)(n.code,{children:"make unit_tests"}),".\nTo run all tests, including coverage, unit, and integration, tests, run ",(0,s.jsx)(n.code,{children:"make tests"}),"."]}),"\n"]}),"\n"]})}),(0,s.jsxs)(a.A,{value:"Windows",label:"Windows",children:[(0,s.jsxs)(n.p,{children:["Since Windows doesn't include ",(0,s.jsx)(n.code,{children:"make"}),", building and running Langflow from source uses ",(0,s.jsx)(n.code,{children:"npm"})," and ",(0,s.jsx)(n.code,{children:"uv"}),"."]}),(0,s.jsx)(n.p,{children:"To set up the Langflow development environment, run the frontend and backend in separate terminals:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To run the frontend development server with hot reload, run the following commands:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"src/frontend",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"install",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"run start",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In a separate terminal, run the following command to run the backend:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"run langflow run ",props:{style:{color:"#A5D6FF"}}},{content:"--backend-only",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," and the backend at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),". This setup preserves hot reload for frontend development, with no need to copy build files after every edit."]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"troubleshoot-frontend-build-issues",children:"Troubleshoot frontend build issues"}),"\n",(0,s.jsxs)(n.p,{children:["If you encounter frontend build problems or are upgrading from an older version of Langflow, run ",(0,s.jsx)(n.code,{children:"make run_clic"})," once."]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"run_clic",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"This command cleans the build cache and rebuilds everything from scratch, which resolves most frontend-related issues when switching between versions."}),"\n",(0,s.jsx)(n.h3,{id:"debug",children:"Debug"}),"\n",(0,s.jsxs)(n.p,{children:["The repo includes a ",(0,s.jsx)(n.code,{children:".vscode/launch.json"})," file for debugging the backend in VSCode, which is faster than debugging with Docker Compose."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://code.visualstudio.com/docs/debugtest/debugging#_start-a-debugging-session",children:"VSCode documentation"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"additional-contribution-guides",children:"Additional contribution guides"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-bundles",children:"Contribute bundles"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-components",children:"Contribute components"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-component-tests",children:"Contribute tests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-templates",children:"Contribute templates"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"contribute-documentation",children:"Contribute documentation"}),"\n",(0,s.jsxs)(n.p,{children:["The documentation is built using ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"})," and written in ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Markdown"}),".\nFor style guidance, see the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/style",children:"Google Developer Documentation Style Guide"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/package-manager",children:"Node.js"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fork the ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow",children:"Langflow GitHub repository"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Add the new remote to your local repository on your local machine:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"git ",props:{style:{color:"#FFA657"}}},{content:"remote add FORK_NAME https://github.com/GIT_USERNAME/langflow.git",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"Replace the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"FORK_NAME"}),": A name for your fork of the repository"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GIT_USERNAME"}),": Your Git username"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["From the root of your local Langflow fork, change to the ",(0,s.jsx)(n.code,{children:"/docs"})," directory:"]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"docs",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"If you're using a dev container, run the documentation build from outside the container on your host terminal, not from within the dev container workspace.\nThe documentation build may not work properly when run inside the dev container."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install dependencies and start a local Docusaurus static site with hot reload:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"install",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"run start",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsxs)(n.p,{children:["The documentation is served at ",(0,s.jsx)(n.code,{children:"http://localhost:3000"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To edit and create content, work with the ",(0,s.jsx)(n.code,{children:".mdx"})," files in the ",(0,s.jsx)(n.code,{children:"langflow/docs/docs"})," directory."]}),"\n",(0,s.jsxs)(n.p,{children:["Create new files in ",(0,s.jsx)(n.code,{children:".mdx"})," format."]}),"\n",(0,s.jsxs)(n.p,{children:["Navigation is defined in ",(0,s.jsx)(n.code,{children:"langflow/docs/sidebars.js"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Most pages use a ",(0,s.jsx)(n.code,{children:"slug"})," for shorthand cross-referencing, rather than supplying the full or relative directory path.\nFor example, if a page has a ",(0,s.jsx)(n.code,{children:"slug"})," of ",(0,s.jsx)(n.code,{children:"/cool-page"}),", you can link to it with ",(0,s.jsx)(n.code,{children:"[Cool page](/cool-page)"})," from any other ",(0,s.jsx)(n.code,{children:"/docs"})," page."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Recommended: After making some changes, run ",(0,s.jsx)(n.code,{children:"npm run build"})," to build the site locally with more robust logging.\nThis can help you find broken links before creating a PR."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"open-a-pull-request",children:"Open a pull request"}),"\n",(0,s.jsx)(n.p,{children:"To submit a pull request, do the following:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open a new GitHub pull request with your patch against the ",(0,s.jsx)(n.code,{children:"main"})," branch."]}),"\n",(0,s.jsxs)(n.li,{children:["Ensure the PR title follows semantic commit conventions. For example, features are ",(0,s.jsx)(n.code,{children:"feat: add new feature"})," and fixes are ",(0,s.jsx)(n.code,{children:"fix: correct issue with X"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Some additional guidance on pull request titles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Ensure the pull request description clearly describes the problem and solution. If the PR fixes an issue, include a link to the fixed issue in the PR description with ",(0,s.jsx)(n.code,{children:"Fixes #1234"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"Pull request titles appear in Langflow's release notes, so they should explain what the PR does as explicitly as possible."}),"\n",(0,s.jsxs)(n.li,{children:["Pull requests should strive to fix one thing ",(0,s.jsx)(n.strong,{children:"only"}),", and should contain a good description of what is being fixed."]}),"\n"]}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsx)(n.li,{children:"A Langflow maintainer will review your pull request and may request changes, so ensure you pay attention to your PRs. Thanks for your contribution!"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://devguide.python.org/getting-started/pull-request-lifecycle/index.html#making-good-commits",children:"Python Developer's Guide"}),"."]})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}function x(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[6801],{11470:(e,n,o)=>{o.d(n,{A:()=>k});var t=o(96540),s=o(18215),r=o(17559),i=o(23104),l=o(56347),a=o(205),c=o(57485),d=o(31682),h=o(70679);function u(e){return t.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:o}=e;return(0,t.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:o,default:t}})=>({value:e,label:n,attributes:o,default:t}))}(o);return function(e){const n=(0,d.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,o])}function f({value:e,tabValues:n}){return n.some(n=>n.value===e)}function g({queryString:e=!1,groupId:n}){const o=(0,l.W6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,c.aZ)(s),(0,t.useCallback)(e=>{if(!s)return;const n=new URLSearchParams(o.location.search);n.set(s,e),o.replace({...o.location,search:n.toString()})},[s,o])]}function m(e){const{defaultValue:n,queryString:o=!1,groupId:s}=e,r=p(e),[i,l]=(0,t.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!f({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const o=n.find(e=>e.default)??n[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:n,tabValues:r})),[c,d]=g({queryString:o,groupId:s}),[u,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[o,s]=(0,h.Dv)(n);return[o,(0,t.useCallback)(e=>{n&&s.set(e)},[n,s])]}({groupId:s}),x=(()=>{const e=c??u;return f({value:e,tabValues:r})?e:null})();(0,a.A)(()=>{x&&l(x)},[x]);return{selectedValue:i,selectValue:(0,t.useCallback)(e=>{if(!f({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),m(e)},[d,m,r]),tabValues:r}}var x=o(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=o(74848);function v({className:e,block:n,selectedValue:o,selectValue:t,tabValues:r}){const l=[],{blockElementScrollPositionUntilNextRender:a}=(0,i.a_)(),c=e=>{const n=e.currentTarget,s=l.indexOf(n),i=r[s].value;i!==o&&(a(n),t(i))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const o=l.indexOf(e.currentTarget)+1;n=l[o]??l[0];break}case"ArrowLeft":{const o=l.indexOf(e.currentTarget)-1;n=l[o]??l[l.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":n},e),children:r.map(({value:e,label:n,attributes:t})=>(0,b.jsx)("li",{role:"tab",tabIndex:o===e?0:-1,"aria-selected":o===e,ref:e=>{l.push(e)},onKeyDown:d,onClick:c,...t,className:(0,s.A)("tabs__item",j.tabItem,t?.className,{"tabs__item--active":o===e}),children:n??e},e))})}function w({lazy:e,children:n,selectedValue:o}){const r=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===o);return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:r.map((e,n)=>(0,t.cloneElement)(e,{key:n,hidden:e.props.value!==o}))})}function y(e){const n=m(e);return(0,b.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",j.tabList),children:[(0,b.jsx)(v,{...n,...e}),(0,b.jsx)(w,{...n,...e})]})}function k(e){const n=(0,x.A)();return(0,b.jsx)(y,{...e,children:u(e.children)},String(n))}},19365:(e,n,o)=>{o.d(n,{A:()=>i});o(96540);var t=o(18215);const s={tabItem:"tabItem_Ymn6"};var r=o(74848);function i({children:e,hidden:n,className:o}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,o),hidden:n,children:e})}},90208:(e,n,o)=>{o.r(n),o.d(n,{CH:()=>u,assets:()=>h,chCodeConfig:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>t,toc:()=>f});const t=JSON.parse('{"id":"Contributing/contributing-how-to-contribute","title":"Contribute to Langflow","description":"This guide is intended to help you start contributing to Langflow.","source":"@site/docs/Contributing/contributing-how-to-contribute.mdx","sourceDirName":"Contributing","slug":"/contributing-how-to-contribute","permalink":"/contributing-how-to-contribute","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Contribute to Langflow","slug":"/contributing-how-to-contribute"},"sidebar":"docs","previous":{"title":"Join the Langflow community","permalink":"/contributing-community"},"next":{"title":"Contribute components","permalink":"/contributing-components"}}');var s=o(74848),r=o(28453),i=o(24754),l=o(11470),a=o(19365);const c={title:"Contribute to Langflow",slug:"/contributing-how-to-contribute"},d=void 0,h={},u={annotations:i.hk,Code:i.Cy},p={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},f=[{value:"Langflow services overview",id:"langflow-services-overview",level:2},{value:"Install Langflow from source",id:"install-langflow-from-source",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Clone the Langflow repository",id:"clone-the-langflow-repository",level:3},{value:"Run Langflow from source",id:"run-langflow-from-source",level:3},{value:"Set up your Langflow development environment",id:"set-up-your-langflow-development-environment",level:3},{value:"Troubleshoot frontend build issues",id:"troubleshoot-frontend-build-issues",level:3},{value:"Debug",id:"debug",level:3},{value:"Additional contribution guides",id:"additional-contribution-guides",level:3},{value:"Contribute documentation",id:"contribute-documentation",level:2},{value:"Open a pull request",id:"open-a-pull-request",level:2}];function g(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:o}=n;return u||x("CH",!1),u.Code||x("CH.Code",!0),o||x("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsx)(n.p,{children:"This guide is intended to help you start contributing to Langflow.\nAs an open-source codebase in a rapidly developing field, Langflow welcomes contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation."}),"\n",(0,s.jsxs)(n.p,{children:["To contribute code or documentation to Langflow, follow the ",(0,s.jsx)(n.a,{href:"#open-a-pull-request",children:"pull request guide"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"langflow-services-overview",children:"Langflow services overview"}),"\n",(0,s.jsx)(n.p,{children:"This overview will help you understand how to set up your development environment."}),"\n",(0,s.jsx)(n.p,{children:"Langflow consists of two main services:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Frontend: A React/TypeScript application that provides the user interface."}),"\n",(0,s.jsx)(n.li,{children:"Backend: A Python/FastAPI service that handles API requests."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"During development, the frontend and backend services run separately on different ports:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Frontend development server: ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," (with hot reload)."]}),"\n",(0,s.jsxs)(n.li,{children:["Backend API server: ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["When you install Langflow as an end user, the backend serves the frontend internally, making both services available on a single port (",(0,s.jsx)(n.code,{children:"7860"})," by default)."]}),"\n",(0,s.jsx)(n.h2,{id:"install-langflow-from-source",children:"Install Langflow from source"}),"\n",(0,s.jsx)(n.p,{children:"Install Langflow from source by forking the repository and setting up your development environment."}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://docs.astral.sh/uv/getting-started/installation/",children:"uv"})," version 0.4 or later"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/package-manager",children:"Node.js"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://www.gnu.org/software/make/#documentation",children:"Make"})," (Linux and macOS only)"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"clone-the-langflow-repository",children:"Clone the Langflow repository"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fork the ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow",children:"Langflow GitHub repository"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Add the new remote to your local repository on your local machine:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"git ",props:{style:{color:"#FFA657"}}},{content:"remote add FORK_NAME https://github.com/GIT_USERNAME/langflow.git",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"Replace the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"FORK_NAME"}),": A name for your fork of the repository"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GIT_USERNAME"}),": Your Git username"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"run-langflow-from-source",children:"Run Langflow from source"}),"\n",(0,s.jsxs)(n.p,{children:["You can run Langflow from source after cloning the repository, even if you aren't contributing to the codebase.\nThis builds the frontend and serves it through the backend on port ",(0,s.jsx)(n.code,{children:"7860"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The instructions below are for running Langflow from source. For development with hot reload, see ",(0,s.jsx)(n.a,{href:"#set-up-your-langflow-development-environment",children:"Set up development environment"}),"."]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Run from source on macOS/Linux"}),(0,s.jsxs)(n.p,{children:["In your terminal, navigate to the root of the Langflow directory, and then run ",(0,s.jsx)(n.code,{children:"make run_cli"}),"."]}),(0,s.jsx)(n.p,{children:"This command does the following:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Installs frontend and backend dependencies"}),"\n",(0,s.jsx)(n.li,{children:"Builds the frontend static files"}),"\n",(0,s.jsx)(n.li,{children:"Starts the application with default settings"}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Langflow frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]})]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Run from source with Windows CMD"}),(0,s.jsx)(n.p,{children:"To run Langflow from source on Windows, you can use the Langflow repository's included scripts, or run the commands in the terminal."}),(0,s.jsx)(n.p,{children:"Do one of the following:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To install and run Langflow with the included Windows Batch file, navigate to the ",(0,s.jsx)(n.code,{children:"scripts/windows"})," directory, and then run the ",(0,s.jsx)(n.code,{children:"build_and_run.bat"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To run Langflow from the Windows Command Line:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Build the frontend static files:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd src/frontend",props:{}}]},{tokens:[{content:"npm install",props:{}}]},{tokens:[{content:"npm run build",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Copy the contents of the built ",(0,s.jsx)(n.code,{children:"src/frontend/build"})," directory to ",(0,s.jsx)(n.code,{children:"src/backend/base/langflow/frontend"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Start Langflow:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv run langflow run",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Langflow frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]})]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Run from source with PowerShell"}),(0,s.jsx)(n.p,{children:"To run Langflow from source on Windows, you can use the Langflow repository's included scripts, or run the commands in the terminal."}),(0,s.jsx)(n.p,{children:"Do one of the following:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To install and run Langflow with the included scripts, navigate to the ",(0,s.jsx)(n.code,{children:"scripts/windows"})," directory, and then run the ",(0,s.jsx)(n.code,{children:"build_and_run.ps1"})," file."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To run Langflow from a PowerShell terminal:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Build the frontend static files:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd src/frontend",props:{}}]},{tokens:[{content:"npm install",props:{}}]},{tokens:[{content:"npm run build",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Copy the contents of the built ",(0,s.jsx)(n.code,{children:"src/frontend/build"})," directory to ",(0,s.jsx)(n.code,{children:"src/backend/base/langflow/frontend"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Start Langflow:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv run langflow run",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The Langflow frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]})]}),"\n",(0,s.jsx)(n.h3,{id:"set-up-your-langflow-development-environment",children:"Set up your Langflow development environment"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["Run ",(0,s.jsx)(n.code,{children:"make help"})," to display all available make commands."]})}),"\n",(0,s.jsx)(n.p,{children:"This section is for contributors who want to develop and test code changes with hot reload enabled."}),"\n",(0,s.jsxs)(n.p,{children:["If you just want to run Langflow locally without making code changes, see ",(0,s.jsx)(n.a,{href:"#run-langflow-from-source",children:"Run Langflow from source"}),"."]}),"\n",(0,s.jsxs)(l.A,{children:[(0,s.jsx)(a.A,{value:"linux-macos",label:"Linux or macOS",default:!0,children:(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Set up the Langflow development environment:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"init",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"This command sets up the development environment by doing the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Checking for uv and npm."}),"\n",(0,s.jsx)(n.li,{children:"Installing backend and frontend dependencies."}),"\n",(0,s.jsx)(n.li,{children:"Installing pre-commit hooks."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Run the backend and frontend in separate terminals for development:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# Run backend in development mode (includes hot reload)",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"backend",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"# In another terminal, run frontend in development mode (includes hot reload)",props:{style:{color:"#8B949E"}}}]},{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"frontend",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"make backend"})," and ",(0,s.jsx)(n.code,{children:"make frontend"})," commands automatically install dependencies, so you don't need to run install commands separately."]}),"\n",(0,s.jsxs)(n.p,{children:["The frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," and the backend at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Optional: Install pre-commit hooks to help keep your changes clean and well-formatted."}),"\n",(0,s.jsxs)(n.p,{children:["With pre-commit hooks installed, you must use ",(0,s.jsx)(n.code,{children:"uv run git commit"})," instead of ",(0,s.jsx)(n.code,{children:"git commit"})," directly."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"make init"})," installs pre-commit hooks automatically, or you can run the following command to install them manually:"]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"sync",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"run pre-commit install",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To test your changes before pushing commits, run ",(0,s.jsx)(n.code,{children:"make lint"}),", ",(0,s.jsx)(n.code,{children:"make format"}),", and ",(0,s.jsx)(n.code,{children:"make unit_tests"}),".\nTo run all tests, including coverage, unit, and integration, tests, run ",(0,s.jsx)(n.code,{children:"make tests"}),"."]}),"\n"]}),"\n"]})}),(0,s.jsxs)(a.A,{value:"Windows",label:"Windows",children:[(0,s.jsxs)(n.p,{children:["Since Windows doesn't include ",(0,s.jsx)(n.code,{children:"make"}),", building and running Langflow from source uses ",(0,s.jsx)(n.code,{children:"npm"})," and ",(0,s.jsx)(n.code,{children:"uv"}),"."]}),(0,s.jsx)(n.p,{children:"To set up the Langflow development environment, run the frontend and backend in separate terminals:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"To run the frontend development server with hot reload, run the following commands:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"src/frontend",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"install",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"run start",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In a separate terminal, run the following command to run the backend:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"run langflow run ",props:{style:{color:"#A5D6FF"}}},{content:"--backend-only",props:{style:{color:"#79C0FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:["The frontend is served at ",(0,s.jsx)(n.code,{children:"http://localhost:3000"})," and the backend at ",(0,s.jsx)(n.code,{children:"http://localhost:7860"}),". This setup preserves hot reload for frontend development, with no need to copy build files after every edit."]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"troubleshoot-frontend-build-issues",children:"Troubleshoot frontend build issues"}),"\n",(0,s.jsxs)(n.p,{children:["If you encounter frontend build problems or are upgrading from an older version of Langflow, run ",(0,s.jsx)(n.code,{children:"make run_clic"})," once."]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"make ",props:{style:{color:"#FFA657"}}},{content:"run_clic",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"This command cleans the build cache and rebuilds everything from scratch, which resolves most frontend-related issues when switching between versions."}),"\n",(0,s.jsx)(n.h3,{id:"debug",children:"Debug"}),"\n",(0,s.jsxs)(n.p,{children:["The repo includes a ",(0,s.jsx)(n.code,{children:".vscode/launch.json"})," file for debugging the backend in VSCode, which is faster than debugging with Docker Compose."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://code.visualstudio.com/docs/debugtest/debugging#_start-a-debugging-session",children:"VSCode documentation"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"additional-contribution-guides",children:"Additional contribution guides"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-bundles",children:"Contribute bundles"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-components",children:"Contribute components"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-component-tests",children:"Contribute tests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/contributing-templates",children:"Contribute templates"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"contribute-documentation",children:"Contribute documentation"}),"\n",(0,s.jsxs)(n.p,{children:["The documentation is built using ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/",children:"Docusaurus"})," and written in ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Markdown"}),".\nFor style guidance, see the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/style",children:"Google Developer Documentation Style Guide"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install ",(0,s.jsx)(n.a,{href:"https://nodejs.org/en/download/package-manager",children:"Node.js"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fork the ",(0,s.jsx)(n.a,{href:"https://github.com/langflow-ai/langflow",children:"Langflow GitHub repository"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Add the new remote to your local repository on your local machine:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"git ",props:{style:{color:"#FFA657"}}},{content:"remote add FORK_NAME https://github.com/GIT_USERNAME/langflow.git",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"Replace the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"FORK_NAME"}),": A name for your fork of the repository"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"GIT_USERNAME"}),": Your Git username"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["From the root of your local Langflow fork, change to the ",(0,s.jsx)(n.code,{children:"/docs"})," directory:"]}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"cd ",props:{style:{color:"#79C0FF"}}},{content:"docs",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsx)(n.p,{children:"If you're using a dev container, run the documentation build from outside the container on your host terminal, not from within the dev container workspace.\nThe documentation build may not work properly when run inside the dev container."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install dependencies and start a local Docusaurus static site with hot reload:"}),"\n",(0,s.jsx)(u.Code,{codeConfig:p,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"install",props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"npm ",props:{style:{color:"#FFA657"}}},{content:"run start",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n",(0,s.jsxs)(n.p,{children:["The documentation is served at ",(0,s.jsx)(n.code,{children:"http://localhost:3000"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To edit and create content, work with the ",(0,s.jsx)(n.code,{children:".mdx"})," files in the ",(0,s.jsx)(n.code,{children:"langflow/docs/docs"})," directory."]}),"\n",(0,s.jsxs)(n.p,{children:["Create new files in ",(0,s.jsx)(n.code,{children:".mdx"})," format."]}),"\n",(0,s.jsxs)(n.p,{children:["Navigation is defined in ",(0,s.jsx)(n.code,{children:"langflow/docs/sidebars.js"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Most pages use a ",(0,s.jsx)(n.code,{children:"slug"})," for shorthand cross-referencing, rather than supplying the full or relative directory path.\nFor example, if a page has a ",(0,s.jsx)(n.code,{children:"slug"})," of ",(0,s.jsx)(n.code,{children:"/cool-page"}),", you can link to it with ",(0,s.jsx)(n.code,{children:"[Cool page](/cool-page)"})," from any other ",(0,s.jsx)(n.code,{children:"/docs"})," page."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Recommended: After making some changes, run ",(0,s.jsx)(n.code,{children:"npm run build"})," to build the site locally with more robust logging.\nThis can help you find broken links before creating a PR."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"open-a-pull-request",children:"Open a pull request"}),"\n",(0,s.jsx)(n.p,{children:"To submit a pull request, do the following:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Open a GitHub pull request against the active ",(0,s.jsx)(n.code,{children:"release-X.Y.Z"})," release candidate branch.\nDo not target ",(0,s.jsx)(n.code,{children:"main"}),".\nFor example, if the latest released version is ",(0,s.jsx)(n.code,{children:"1.8.0"}),", your pull request should target the ",(0,s.jsx)(n.code,{children:"release-1.9.0"})," branch.\nInclude a clear title and description."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Ensure the PR title follows semantic commit conventions. For example, features are ",(0,s.jsx)(n.code,{children:"feat: add new feature"})," and fixes are ",(0,s.jsx)(n.code,{children:"fix: correct issue with X"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Some additional guidance on pull request titles:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Ensure the pull request description clearly describes the problem and solution. If the PR fixes an issue, include a link to the fixed issue in the PR description with ",(0,s.jsx)(n.code,{children:"Fixes #1234"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"Pull request titles appear in Langflow's release notes, so they should explain what the PR does as explicitly as possible."}),"\n",(0,s.jsxs)(n.li,{children:["Pull requests should strive to fix one thing ",(0,s.jsx)(n.strong,{children:"only"}),", and should contain a good description of what is being fixed."]}),"\n"]}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsx)(n.li,{children:"A Langflow maintainer will review your pull request and may request changes, so ensure you pay attention to your PRs. Thanks for your contribution!"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://devguide.python.org/getting-started/pull-request-lifecycle/index.html#making-good-commits",children:"Python Developer's Guide"}),"."]})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(g,{...e})}):g(e)}function x(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/c2ea283c.2541a8c1.js b/assets/js/c2ea283c.2541a8c1.js
deleted file mode 100644
index 2234988d60..0000000000
--- a/assets/js/c2ea283c.2541a8c1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[2394],{11470:(e,o,n)=>{n.d(o,{A:()=>v});var t=n(96540),s=n(18215),r=n(17559),l=n(23104),c=n(56347),i=n(205),a=n(57485),p=n(31682),d=n(70679);function h(e){return t.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:o}=e;return!!o&&"object"==typeof o&&"value"in o}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function u(e){const{values:o,children:n}=e;return(0,t.useMemo)(()=>{const e=o??function(e){return h(e).map(({props:{value:e,label:o,attributes:n,default:t}})=>({value:e,label:o,attributes:n,default:t}))}(n);return function(e){const o=(0,p.XI)(e,(e,o)=>e.value===o.value);if(o.length>0)throw new Error(`Docusaurus error: Duplicate values "${o.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[o,n])}function y({value:e,tabValues:o}){return o.some(o=>o.value===e)}function F({queryString:e=!1,groupId:o}){const n=(0,c.W6)(),s=function({queryString:e=!1,groupId:o}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:e,groupId:o});return[(0,a.aZ)(s),(0,t.useCallback)(e=>{if(!s)return;const o=new URLSearchParams(n.location.search);o.set(s,e),n.replace({...n.location,search:o.toString()})},[s,n])]}function L(e){const{defaultValue:o,queryString:n=!1,groupId:s}=e,r=u(e),[l,c]=(0,t.useState)(()=>function({defaultValue:e,tabValues:o}){if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!y({value:e,tabValues:o}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${o.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=o.find(e=>e.default)??o[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:o,tabValues:r})),[a,p]=F({queryString:n,groupId:s}),[h,L]=function({groupId:e}){const o=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,d.Dv)(o);return[n,(0,t.useCallback)(e=>{o&&s.set(e)},[o,s])]}({groupId:s}),D=(()=>{const e=a??h;return y({value:e,tabValues:r})?e:null})();(0,i.A)(()=>{D&&c(D)},[D]);return{selectedValue:l,selectValue:(0,t.useCallback)(e=>{if(!y({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),p(e),L(e)},[p,L,r]),tabValues:r}}var D=n(92303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=n(74848);function j({className:e,block:o,selectedValue:n,selectValue:t,tabValues:r}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,l.a_)(),a=e=>{const o=e.currentTarget,s=c.indexOf(o),l=r[s].value;l!==n&&(i(o),t(l))},p=e=>{let o=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;o=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;o=c[n]??c[c.length-1];break}}o?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:r.map(({value:e,label:o,attributes:t})=>(0,f.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{c.push(e)},onKeyDown:p,onClick:a,...t,className:(0,s.A)("tabs__item",x.tabItem,t?.className,{"tabs__item--active":n===e}),children:o??e},e))})}function A({lazy:e,children:o,selectedValue:n}){const r=(Array.isArray(o)?o:[o]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===n);return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:r.map((e,o)=>(0,t.cloneElement)(e,{key:o,hidden:e.props.value!==n}))})}function m(e){const o=L(e);return(0,f.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",x.tabList),children:[(0,f.jsx)(j,{...o,...e}),(0,f.jsx)(A,{...o,...e})]})}function v(e){const o=(0,D.A)();return(0,f.jsx)(m,{...e,children:h(e.children)},String(o))}},19365:(e,o,n)=>{n.d(o,{A:()=>l});n(96540);var t=n(18215);const s={tabItem:"tabItem_Ymn6"};var r=n(74848);function l({children:e,hidden:o,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,n),hidden:o,children:e})}},60956:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>h,assets:()=>d,chCodeConfig:()=>u,contentTitle:()=>p,default:()=>L,frontMatter:()=>a,metadata:()=>t,toc:()=>y});const t=JSON.parse('{"id":"Develop/environment-variables","title":"Environment variables","description":"In general, environment variables, like LANGFLOWPORT or LANGFLOWLOG_LEVEL, configure how Langflow runs.","source":"@site/docs/Develop/environment-variables.mdx","sourceDirName":"Develop","slug":"/environment-variables","permalink":"/environment-variables","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Environment variables","slug":"/environment-variables"},"sidebar":"docs","previous":{"title":"Global variables","permalink":"/configuration-global-variables"},"next":{"title":"Manage files","permalink":"/concepts-file-management"}}');var s=n(74848),r=n(28453),l=n(24754),c=n(11470),i=n(19365);n(28774);const a={title:"Environment variables",slug:"/environment-variables"},p=void 0,d={},h={annotations:l.hk,Code:l.Cy},u={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},y=[{value:"Configure environment variables for Langflow OSS",id:"configure-environment-variables-for-langflow-oss",level:2},{value:"Precedence",id:"precedence",level:3},{value:"Set environment variables in your terminal",id:"configure-variables-terminal",level:3},{value:"Import environment variables from a .env file",id:"configure-variables-env-file",level:3},{value:"Configure environment variables for development",id:"configure-environment-variables-for-development",level:3},{value:"Set environment variables for Langflow Desktop",id:"set-environment-variables-for-langflow-desktop",level:2},{value:"Supported environment variables",id:"supported-variables",level:2},{value:"Authentication and security",id:"authentication-and-security",level:3},{value:"Global variables",id:"global-variables",level:3},{value:"Logs",id:"logging",level:3},{value:"MCP servers",id:"mcp",level:3},{value:"Monitoring and metrics",id:"monitoring-and-metrics",level:3},{value:"Server",id:"server",level:3},{value:"Storage",id:"storage",level:3},{value:"Telemetry",id:"telemetry",level:3},{value:"Visual editor and Playground behavior",id:"visual-editor-and-playground-behavior",level:3}];function F(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return h||D("CH",!1),h.Code||D("CH.Code",!0),n||D("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsxs)(o.p,{children:["In general, environment variables, like ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})," or ",(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_LEVEL"}),", configure how Langflow runs.\nThese are broad settings that apply to your entire Langflow deployment."]}),"\n",(0,s.jsxs)(o.p,{children:["In contrast, global variables are user-defined values stored in Langflow's database for use in flows, such as ",(0,s.jsx)(o.code,{children:"OPENAI_API_KEY"}),".\nLangflow can also source global variables from environment variables.\nFor more information, see ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"Langflow global variables"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"configure-environment-variables-for-langflow-oss",children:"Configure environment variables for Langflow OSS"}),"\n",(0,s.jsxs)(o.p,{children:["Langflow recognizes ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"supported environment variables"})," from the following sources:"]}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Environment variables set in your terminal."}),"\n",(0,s.jsxs)(o.li,{children:["Environment variables imported from a ",(0,s.jsx)(o.code,{children:".env"})," file when starting Langflow."]}),"\n",(0,s.jsxs)(o.li,{children:["Environment variables set with the ",(0,s.jsx)(o.a,{href:"./configuration-cli",children:"Langflow CLI"}),", including the ",(0,s.jsx)(o.code,{children:"--env-file"})," option and direct options, such as ",(0,s.jsx)(o.code,{children:"--port"}),"."]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"You can choose to use one or more of these sources."}),"\n",(0,s.jsx)(o.h3,{id:"precedence",children:"Precedence"}),"\n",(0,s.jsx)(o.p,{children:"If the same environment variable is set in multiple places, the following hierarchy applies:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsx)(o.li,{children:"Langflow CLI options override all other sources."}),"\n",(0,s.jsxs)(o.li,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file overrides system environment variables."]}),"\n",(0,s.jsxs)(o.li,{children:["System environment variables are used only if not set elsewhere.\nWhen running a Langflow Docker image, the ",(0,s.jsx)(o.code,{children:"-e"})," flag can be used to set additional system environment variables."]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"For example:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["If you set ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT=8080"})," in your system environment and ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT=7860"})," in ",(0,s.jsx)(o.code,{children:".env"}),", Langflow uses ",(0,s.jsx)(o.code,{children:"7860"})," from ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["If you use the Langflow CLI to run ",(0,s.jsx)(o.code,{children:"langflow run --env-file .env --port 9000"}),", and you set ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT=7860"})," in ",(0,s.jsx)(o.code,{children:".env"}),", then Langflow uses ",(0,s.jsx)(o.code,{children:"9000"})," from the CLI option."]}),"\n"]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-terminal",children:"Set environment variables in your terminal"}),"\n",(0,s.jsx)(o.p,{children:"Run the following commands to set environment variables for your current terminal session:"}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"linux-macos",label:"Linux or macOS",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"export",props:{style:{color:"#FF7B72"}}},{content:" VARIABLE_NAME",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"'VALUE'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"windows",label:"Windows",children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"set VARIABLE_NAME='VALUE'",props:{}}]}],lang:"text"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -e ",props:{style:{color:"#79C0FF"}}},{content:"VARIABLE_NAME='VALUE' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["When you start Langflow, it looks for environment variables that you've set in your terminal.\nIf it detects a supported environment variable, then it automatically adopts the specified value, subject to ",(0,s.jsx)(o.a,{href:"#precedence",children:"precedence rules"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-env-file",children:"Import environment variables from a .env file"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"If Langflow is running, quit Langflow."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create a ",(0,s.jsx)(o.code,{children:".env"})," file, and then open it in your preferred editor."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Define ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"Langflow environment variables"})," in the ",(0,s.jsx)(o.code,{children:".env"})," file."]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: .env"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=False",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=False",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=False",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=False",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=False",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=False",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=True",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]}),(0,s.jsxs)(o.p,{children:["For additional examples, see ",(0,s.jsx)(o.a,{href:"https://github.com/langflow-ai/langflow/blob/main/.env.example",children:(0,s.jsx)(o.code,{children:".env.example"})})," in the Langflow repository."]})]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Save and close ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Start Langflow with your ",(0,s.jsx)(o.code,{children:".env"})," file:"]}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"local",label:"Local",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"run langflow run ",props:{style:{color:"#A5D6FF"}}},{content:"--env-file ",props:{style:{color:"#79C0FF"}}},{content:".env",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --env-file ",props:{style:{color:"#79C0FF"}}},{content:".env ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["If your ",(0,s.jsx)(o.code,{children:".env"})," file isn't in the same directory, provide the path to your ",(0,s.jsx)(o.code,{children:".env"})," file."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["On startup, Langflow imports the environment variables from your ",(0,s.jsx)(o.code,{children:".env"})," file, as well as any others that you set in your terminal, and then adopts their specified values."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-environment-variables-for-development",children:"Configure environment variables for development"}),"\n",(0,s.jsx)(o.p,{children:"The following examples show how to configure Langflow using environment variables in different development scenarios."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"env",label:".env file",default:!0,children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file is a text file that contains key-value pairs of environment variables."]}),(0,s.jsxs)(o.p,{children:["Create or edit a ",(0,s.jsx)(o.code,{children:".env"})," file in the root directory of your application or Langflow environment, and then add your configuration variables to the file:"]}),(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: .env"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".env"',focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=False",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=False",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=False",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=False",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=False",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=False",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=True",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]})]})]}),(0,s.jsxs)(i.A,{value:"systemd",label:"Systemd service",children:[(0,s.jsx)(o.p,{children:"A systemd service configuration file configures Linux system services."}),(0,s.jsxs)(o.p,{children:["To add environment variables, create or edit a service configuration file and add an ",(0,s.jsx)(o.code,{children:"override.conf"})," file. This file allows you to override the default environment variables for the service."]}),(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: override.conf"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'"override.conf"',focus:"",code:{lines:[{tokens:[{content:"[Service]",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"DO_NOT_TRACK=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_LOGIN=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING_INTERVAL=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BACKEND_ONLY=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BUNDLE_URLS=[\\"',props:{style:{color:"#A5D6FF"}}},{content:"https://github.com/user/repo/commit/hash\\",props:{style:{color:"#C9D1D9"}}},{content:'"]"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CACHE_TYPE=async"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_COMPONENTS_PATH=/path/to/components/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR=/path/to/config"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DEV=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_FALLBACK_TO_ENV_VAR=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HOST=localhost"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_ITEMS_LENGTH=100"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_TEXT_LENGTH=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_ENV=container_json"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_FILE=logs/langflow.log"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_LEVEL=error"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_OPEN_BROWSER=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_PORT=7860"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_REMOVE_API_KEYS=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SECRET_KEY=somesecretkey"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER=adminuser"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER_PASSWORD=adminpass"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKER_TIMEOUT=60000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKERS=3"',props:{style:{color:"#A5D6FF"}}}]}],lang:"ini"},annotations:[]}]})]}),(0,s.jsxs)(o.p,{children:["For more information on systemd, see the ",(0,s.jsx)(o.a,{href:"https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_systemd_unit_files_to_customize_and_optimize_your_system/assembly_working-with-systemd-unit-files_working-with-systemd",children:"Red Hat documentation"}),"."]})]}),(0,s.jsxs)(i.A,{value:"vscode",label:"VSCode tasks.json",children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"tasks.json"})," file located in ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," is a configuration file for development environments using Visual Studio Code."]}),(0,s.jsxs)(o.p,{children:["Create or edit the ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," file in your project root."]}),(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: .vscode/tasks.json"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".vscode/tasks.json"',focus:"",code:{lines:[{tokens:[{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "version"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"2.0.0"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "options"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "env"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "DO_NOT_TRACK"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_LOGIN"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING_INTERVAL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BACKEND_ONLY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BUNDLE_URLS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"[',props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:"https://github.com/user/repo/commit/hash",props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:']"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CACHE_TYPE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"async"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_COMPONENTS_PATH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/components/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/config/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DATABASE_URL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"postgresql://postgres:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DEV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_FALLBACK_TO_ENV_VAR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HEALTH_CHECK_MAX_RETRIES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"5"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HOST"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"localhost"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LANGCHAIN_CACHE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"InMemoryCache"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_FILE_SIZE_UPLOAD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"10000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_ITEMS_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"100"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_TEXT_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_ENV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"container_csv"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_FILE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow.log"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_LEVEL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_OPEN_BROWSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_PORT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_REMOVE_API_KEYS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SAVE_DB_IN_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SECRET_KEY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"somesecretkey"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_STORE_ENVIRONMENT_VARIABLES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminuser"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER_PASSWORD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminpass"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKER_TIMEOUT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"60000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKERS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"3"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "tasks"',props:{style:{color:"#7EE787"}}},{content:": [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "label"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow backend"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "type"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"shell"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "command"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'". ./langflownightly/Scripts/activate && langflow run"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "isBackground"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "problemMatcher"',props:{style:{color:"#7EE787"}}},{content:": []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]})]}),(0,s.jsxs)(o.p,{children:["To run Langflow using the above VSCode ",(0,s.jsx)(o.code,{children:"tasks.json"})," file, in the VSCode command palette, select ",(0,s.jsx)(o.strong,{children:"Tasks: Run Task"})," > ",(0,s.jsx)(o.strong,{children:"langflow backend"}),"."]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"set-environment-variables-for-langflow-desktop",children:"Set environment variables for Langflow Desktop"}),"\n",(0,s.jsx)(o.p,{children:"Environment variables set in your terminal aren't automatically available to GUI-based applications like Langflow Desktop when you launch them from the Windows or macOS GUI."}),"\n",(0,s.jsx)(o.p,{children:"For Windows, this means any GUI-based app launched from the Start menu, desktop shortcuts, or Windows Explorer."}),"\n",(0,s.jsx)(o.p,{children:"For macOS, this means any GUI-based app launched from Finder, Spotlight, Launchpad, or the Dock."}),"\n",(0,s.jsx)(o.p,{children:"To set environment variables for Langflow Desktop, you need to use specific commands or files, depending on your OS."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"macos",label:"macOS",default:!0,children:[(0,s.jsxs)(o.p,{children:["Langflow Desktop for macOS cannot automatically use variables set in your terminal, such as those in",(0,s.jsx)(o.code,{children:".zshrc"})," or ",(0,s.jsx)(o.code,{children:".bash_profile"}),", when launched from the macOS GUI."]}),(0,s.jsxs)(o.p,{children:["To make environment variables available to GUI apps on macOS, you need to use ",(0,s.jsx)(o.code,{children:"launchctl"})," with a ",(0,s.jsx)(o.code,{children:"plist"})," file:"]}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create the ",(0,s.jsx)(o.code,{children:"LaunchAgents"})," directory if it doesn't exist:"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"mkdir ",props:{style:{color:"#FFA657"}}},{content:"-p ",props:{style:{color:"#79C0FF"}}},{content:"~/Library/LaunchAgents",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["In the ",(0,s.jsx)(o.code,{children:"LaunchAgents"})," directory, create a ",(0,s.jsx)(o.code,{children:".plist"})," file called ",(0,s.jsx)(o.code,{children:"dev.langflow.env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Add the following content to ",(0,s.jsx)(o.code,{children:"dev.langflow.env.plist"}),", and then add, change, or remove Langflow environment variables as needed for your configuration."]}),"\n",(0,s.jsx)(o.p,{children:"This example sets multiple environmental variables for all GUI apps launched from the macOS GUI."}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}},{content:"xml",props:{style:{color:"#7EE787"}}},{content:" version",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"1.0"',props:{style:{color:"#A5D6FF"}}},{content:" encoding",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"UTF-8"',props:{style:{color:"#A5D6FF"}}},{content:"?>",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ',props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"plist ",props:{style:{color:"#7EE787"}}},{content:"version",props:{style:{color:"#79C0FF"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"1.0"',props:{style:{color:"#A5D6FF"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">Label",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">dev.langflow.env",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">ProgramArguments",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"array",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">/bin/sh",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">-c",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" launchctl setenv LANGFLOW_CONFIG_DIR /Users/your_user/custom/config ;",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" launchctl setenv LANGFLOW_PORT 7860 ;",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" launchctl setenv LANGFLOW_HOST localhost ;",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" launchctl setenv ARIZE_API_KEY ak-...",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}},{content:"array",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">RunAtLoad",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#7EE787"}}},{content:"/>",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}},{content:"dict",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}},{content:"plist",props:{style:{color:"#7EE787"}}},{content:">",props:{style:{color:"#C9D1D9"}}}]}],lang:"xml"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Load the file with ",(0,s.jsx)(o.code,{children:"launchctl"}),":"]}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"launchctl ",props:{style:{color:"#FFA657"}}},{content:"bootstrap gui/$(",props:{style:{color:"#A5D6FF"}}},{content:"id ",props:{style:{color:"#FFA657"}}},{content:"-u",props:{style:{color:"#79C0FF"}}},{content:") ~/Library/LaunchAgents/dev.langflow.env.plist",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows1",label:"Window System Properties",children:[(0,s.jsxs)(o.p,{children:["Langflow Desktop for Windows cannot automatically use variables set in your terminal, such as those defined with ",(0,s.jsx)(o.code,{children:"set"})," in ",(0,s.jsx)(o.code,{children:"cmd"})," or ",(0,s.jsx)(o.code,{children:"$env:VAR=..."})," in PowerShell, when launched from the Windows GUI."]}),(0,s.jsxs)(o.p,{children:["To make environment variables available to the Langflow Desktop app, you must set them at the user or system level using the ",(0,s.jsx)(o.strong,{children:"System Properties"})," interface or the Terminal."]}),(0,s.jsx)(o.p,{children:"To set environment variables using the System Properties interface, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Press ",(0,s.jsx)("kbd",{children:"Win + R"}),", enter ",(0,s.jsx)(o.code,{children:"SystemPropertiesAdvanced"}),", and then press ",(0,s.jsx)("kbd",{children:"Enter"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Click ",(0,s.jsx)(o.strong,{children:"Environment Variables"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Under ",(0,s.jsx)(o.strong,{children:"User variables"}),", click ",(0,s.jsx)(o.strong,{children:"New"}),"."]}),"\n",(0,s.jsx)(o.admonition,{type:"tip",children:(0,s.jsxs)(o.p,{children:["To apply the setting to all users, select ",(0,s.jsx)(o.strong,{children:"System variables"}),"."]})}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Enter the name of the Langflow variable you want to set, such as ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"}),", and the desired value, such as ",(0,s.jsx)(o.code,{children:"C:\\Users\\your_user\\.langflow_config"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Click ",(0,s.jsx)(o.strong,{children:"OK"})," to save the variable."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Repeat until you have set all necessary Langflow environment variables."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Launch or restart Langflow Desktop to apply the environment variables."}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows2",label:"Powershell",children:[(0,s.jsx)(o.p,{children:"To define environment variables for Windows using PowerShell, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Enter the name of the Langflow variable you want to set, such as ",(0,s.jsx)(o.code,{children:"LANGFLOW_CONFIG_DIR"}),", and the desired value, such as ",(0,s.jsx)(o.code,{children:"C:\\Users\\your_user\\.langflow_config"}),"."]}),"\n",(0,s.jsx)(o.p,{children:"To set an environment variable for the current user:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}},{content:"System.Environment",props:{style:{color:"#FF7B72"}}},{content:"]::SetEnvironmentVariable(",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"C:\\Users\\your_user\\.langflow_config"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"User"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"powershell"},annotations:[]}]}),"\n",(0,s.jsx)(o.p,{children:"To set an environment variable for all users (you must have Administrator priveleges):"}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"[",props:{style:{color:"#C9D1D9"}}},{content:"System.Environment",props:{style:{color:"#FF7B72"}}},{content:"]::SetEnvironmentVariable(",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"C:\\Langflow\\Config"',props:{style:{color:"#A5D6FF"}}},{content:", ",props:{style:{color:"#FF7B72"}}},{content:'"Machine"',props:{style:{color:"#A5D6FF"}}},{content:")",props:{style:{color:"#C9D1D9"}}}]}],lang:"powershell"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Repeat until you have set all necessary Langflow environment variables."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Launch or restart Langflow Desktop to apply the environment variables."}),"\n"]}),"\n"]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"supported-variables",children:"Supported environment variables"}),"\n",(0,s.jsx)(o.p,{children:"The following sections provide information about specific Langflow environment variables."}),"\n",(0,s.jsx)(o.h3,{id:"authentication-and-security",children:"Authentication and security"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"global-variables",children:"Global variables"}),"\n",(0,s.jsxs)(o.p,{children:["For information about the relationship between Langflow global variables and environment variables, as well as environment variables that control handling of global variables, see ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"Global variables"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"logging",children:"Logs"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/logging#log-storage",children:"Configure log options"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"mcp",children:"MCP servers"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"monitoring-and-metrics",children:"Monitoring and metrics"}),"\n",(0,s.jsxs)(o.p,{children:["For environment variables for specific monitoring service providers, see the Langflow monitoring integration guides, such as ",(0,s.jsx)(o.a,{href:"/integrations-langfuse",children:"Langfuse"})," and ",(0,s.jsx)(o.a,{href:"/deployment-prod-best-practices",children:"Best practices for Langflow on Kubernetes"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"server",children:"Server"}),"\n",(0,s.jsx)(o.p,{children:"The following environment variables set base Langflow server configuration, such as where the server is hosted, required files for SSL encryption, and the deployment type (frontend and backend, backend-only, development mode)."}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Variable"}),(0,s.jsx)(o.th,{children:"Format"}),(0,s.jsx)(o.th,{children:"Default"}),(0,s.jsx)(o.th,{children:"Description"})]})}),(0,s.jsxs)(o.tbody,{children:[(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HOST"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"localhost"})}),(0,s.jsx)(o.td,{children:"The host on which the Langflow server will run."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"7860"})}),(0,s.jsx)(o.td,{children:"The port on which the Langflow server runs. The server automatically selects a free port if the specified port is in use."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BACKEND_ONLY"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Run only the Langflow backend service (no frontend)."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DEV"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Whether to run Langflow in development mode (may contain bugs)."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_OPEN_BROWSER"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Open the system web browser on startup."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"5"})}),(0,s.jsx)(o.td,{children:"Set the maximum number of retries for Langflow's server status health checks."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKERS"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1"})}),(0,s.jsx)(o.td,{children:"Number of worker processes."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKER_TIMEOUT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"300"})}),(0,s.jsx)(o.td,{children:"Worker timeout in seconds."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_CERT_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to the SSL certificate file for enabling HTTPS on the Langflow web server. This is separate from ",(0,s.jsx)(o.a,{href:"/configuration-custom-database#connect-langflow-to-a-local-postgresql-database",children:"database SSL connections"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_KEY_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to the SSL key file for enabling HTTPS on the Langflow web server. This is separate from ",(0,s.jsx)(o.a,{href:"/configuration-custom-database#connect-langflow-to-a-local-postgresql-database",children:"database SSL connections"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DEACTIVATE_TRACING"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Deactivate tracing functionality."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CELERY_ENABLED"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Enable Celery for distributed task processing."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_ALEMBIC_LOG_TO_STDOUT"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsxs)(o.td,{children:["Whether to log Alembic database migration output to stdout instead of a log file. If ",(0,s.jsx)(o.code,{children:"true"}),", Alembic logs to ",(0,s.jsx)(o.code,{children:"stdout"})," and the default log file is ignored."]})]})]})]}),"\n",(0,s.jsxs)(o.p,{children:["For more information about deploying Langflow servers, see ",(0,s.jsx)(o.a,{href:"/deployment-overview",children:"Langflow deployment overview"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"storage",children:"Storage"}),"\n",(0,s.jsxs)(o.p,{children:["For file storage environment variables, see ",(0,s.jsx)(o.a,{href:"/concepts-file-management#file-storage-environment-variables",children:"File storage environment variables"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["For database environment variables, including PostgreSQL configuration, see ",(0,s.jsx)(o.a,{href:"/memory#configure-external-memory",children:"Memory management options"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"telemetry",children:"Telemetry"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/contributing-telemetry",children:"Telemetry"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"visual-editor-and-playground-behavior",children:"Visual editor and Playground behavior"}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Variable"}),(0,s.jsx)(o.th,{children:"Format"}),(0,s.jsx)(o.th,{children:"Default"}),(0,s.jsx)(o.th,{children:"Description"})]})}),(0,s.jsxs)(o.tbody,{children:[(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"True"})}),(0,s.jsx)(o.td,{children:"Whether to automatically save flows."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING_INTERVAL"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsxs)(o.td,{children:["Set the auto-save interval in milliseconds if ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING=True"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BUNDLE_URLS"})}),(0,s.jsx)(o.td,{children:"List[String]"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"[]"})}),(0,s.jsxs)(o.td,{children:["A list of URLs from which to load custom bundles. Supports GitHub URLs. If ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),", flows from these bundles are loaded into the database."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_COMPONENTS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to a directory containing custom components. Typically used if you have local custom components or you are building a Docker image with custom components."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOAD_FLOWS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to a directory containing flow JSON files to be loaded on startup. Typically used when creating a Docker image with prepackaged flows. Requires ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CREATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"True"})}),(0,s.jsxs)(o.td,{children:["Whether to create templates during initialization. If ",(0,s.jsx)(o.code,{children:"false"}),", Langflow doesn't create templates, and ",(0,s.jsx)(o.code,{children:"LANGFLOW_UPDATE_STARTER_PROJECTS"})," is treated as ",(0,s.jsx)(o.code,{children:"false"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_UPDATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"True"})}),(0,s.jsx)(o.td,{children:"Whether to update templates with the latest component versions when initializing after an upgrade."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LAZY_LOAD_COMPONENTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsxs)(o.td,{children:["If ",(0,s.jsx)(o.code,{children:"true"}),", Langflow only partially loads components at startup and fully loads them on demand. This significantly reduces startup time but can cause a slight delay when a component is first used."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_EVENT_DELIVERY"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"streaming"})}),(0,s.jsxs)(o.td,{children:["How to deliver build events to the frontend: ",(0,s.jsx)(o.code,{children:"polling"}),", ",(0,s.jsx)(o.code,{children:"streaming"})," or ",(0,s.jsx)(o.code,{children:"direct"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_FRONTEND_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"./frontend"})}),(0,s.jsx)(o.td,{children:"Path to the frontend directory containing build files. For development purposes only when you need to serve specific frontend code."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_ITEMS_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"100"})}),(0,s.jsx)(o.td,{children:"Maximum number of items to store and display in the visual editor. Lists longer than this will be truncated when displayed in the visual editor. Doesn't affect outputs or data passed between components."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_TEXT_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsx)(o.td,{children:"Maximum number of characters to store and display in the visual editor. Responses longer than this will be truncated when displayed in the visual editor. Doesn't truncate outputs or responses passed between components."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_TRANSACTIONS_TO_KEEP"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3000"})}),(0,s.jsx)(o.td,{children:"Maximum number of flow transaction events to keep in the database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_VERTEX_BUILDS_TO_KEEP"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3000"})}),(0,s.jsxs)(o.td,{children:["Maximum number of vertex builds to keep in the database. Relates to ",(0,s.jsx)(o.a,{href:"/concepts-playground",children:"Playground"})," functionality."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_VERTEX_BUILDS_PER_VERTEX"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"2"})}),(0,s.jsxs)(o.td,{children:["Maximum number of builds to keep per vertex. Older builds are deleted. Relates to ",(0,s.jsx)(o.a,{href:"/concepts-playground",children:"Playground"})," functionality."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PUBLIC_FLOW_CLEANUP_INTERVAL"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3600"})}),(0,s.jsxs)(o.td,{children:["The interval in seconds at which data for ",(0,s.jsx)(o.a,{href:"/concepts-playground#share-a-flows-playground",children:"shared Playground"})," flows are cleaned up. Default: 3600 seconds (1 hour). Minimum: 600 seconds (10 minutes)."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PUBLIC_FLOW_EXPIRATION"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"86400"})}),(0,s.jsxs)(o.td,{children:["The time in seconds after which a ",(0,s.jsx)(o.a,{href:"/concepts-playground#share-a-flows-playground",children:"shared Playground"})," flow is considered expired and eligible for cleanup. Default: 86400 seconds (24 hours). Minimum: 600 seconds (10 minutes)."]})]})]})]})]})}function L(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(F,{...e})}):F(e)}function D(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/c2ea283c.d1929c67.js b/assets/js/c2ea283c.d1929c67.js
new file mode 100644
index 0000000000..af18ea938c
--- /dev/null
+++ b/assets/js/c2ea283c.d1929c67.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[2394],{11470:(e,o,n)=>{n.d(o,{A:()=>_});var t=n(96540),s=n(18215),r=n(17559),l=n(23104),c=n(56347),i=n(205),a=n(57485),d=n(31682),p=n(70679);function h(e){return t.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,t.isValidElement)(e)&&function(e){const{props:o}=e;return!!o&&"object"==typeof o&&"value"in o}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function u(e){const{values:o,children:n}=e;return(0,t.useMemo)(()=>{const e=o??function(e){return h(e).map(({props:{value:e,label:o,attributes:n,default:t}})=>({value:e,label:o,attributes:n,default:t}))}(n);return function(e){const o=(0,d.XI)(e,(e,o)=>e.value===o.value);if(o.length>0)throw new Error(`Docusaurus error: Duplicate values "${o.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[o,n])}function L({value:e,tabValues:o}){return o.some(o=>o.value===e)}function x({queryString:e=!1,groupId:o}){const n=(0,c.W6)(),s=function({queryString:e=!1,groupId:o}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!o)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return o??null}({queryString:e,groupId:o});return[(0,a.aZ)(s),(0,t.useCallback)(e=>{if(!s)return;const o=new URLSearchParams(n.location.search);o.set(s,e),n.replace({...n.location,search:o.toString()})},[s,n])]}function F(e){const{defaultValue:o,queryString:n=!1,groupId:s}=e,r=u(e),[l,c]=(0,t.useState)(()=>function({defaultValue:e,tabValues:o}){if(0===o.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!L({value:e,tabValues:o}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${o.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const n=o.find(e=>e.default)??o[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:o,tabValues:r})),[a,d]=x({queryString:n,groupId:s}),[h,F]=function({groupId:e}){const o=function(e){return e?`docusaurus.tab.${e}`:null}(e),[n,s]=(0,p.Dv)(o);return[n,(0,t.useCallback)(e=>{o&&s.set(e)},[o,s])]}({groupId:s}),f=(()=>{const e=a??h;return L({value:e,tabValues:r})?e:null})();(0,i.A)(()=>{f&&c(f)},[f]);return{selectedValue:l,selectValue:(0,t.useCallback)(e=>{if(!L({value:e,tabValues:r}))throw new Error(`Can't select invalid tab value=${e}`);c(e),d(e),F(e)},[d,F,r]),tabValues:r}}var f=n(92303);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var A=n(74848);function y({className:e,block:o,selectedValue:n,selectValue:t,tabValues:r}){const c=[],{blockElementScrollPositionUntilNextRender:i}=(0,l.a_)(),a=e=>{const o=e.currentTarget,s=c.indexOf(o),l=r[s].value;l!==n&&(i(o),t(l))},d=e=>{let o=null;switch(e.key){case"Enter":a(e);break;case"ArrowRight":{const n=c.indexOf(e.currentTarget)+1;o=c[n]??c[0];break}case"ArrowLeft":{const n=c.indexOf(e.currentTarget)-1;o=c[n]??c[c.length-1];break}}o?.focus()};return(0,A.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":o},e),children:r.map(({value:e,label:o,attributes:t})=>(0,A.jsx)("li",{role:"tab",tabIndex:n===e?0:-1,"aria-selected":n===e,ref:e=>{c.push(e)},onKeyDown:d,onClick:a,...t,className:(0,s.A)("tabs__item",j.tabItem,t?.className,{"tabs__item--active":n===e}),children:o??e},e))})}function v({lazy:e,children:o,selectedValue:n}){const r=(Array.isArray(o)?o:[o]).filter(Boolean);if(e){const e=r.find(e=>e.props.value===n);return e?(0,t.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,A.jsx)("div",{className:"margin-top--md",children:r.map((e,o)=>(0,t.cloneElement)(e,{key:o,hidden:e.props.value!==n}))})}function m(e){const o=F(e);return(0,A.jsxs)("div",{className:(0,s.A)(r.G.tabs.container,"tabs-container",j.tabList),children:[(0,A.jsx)(y,{...o,...e}),(0,A.jsx)(v,{...o,...e})]})}function _(e){const o=(0,f.A)();return(0,A.jsx)(m,{...e,children:h(e.children)},String(o))}},19365:(e,o,n)=>{n.d(o,{A:()=>l});n(96540);var t=n(18215);const s={tabItem:"tabItem_Ymn6"};var r=n(74848);function l({children:e,hidden:o,className:n}){return(0,r.jsx)("div",{role:"tabpanel",className:(0,t.A)(s.tabItem,n),hidden:o,children:e})}},60956:(e,o,n)=>{n.r(o),n.d(o,{CH:()=>h,assets:()=>p,chCodeConfig:()=>u,contentTitle:()=>d,default:()=>F,frontMatter:()=>a,metadata:()=>t,toc:()=>L});const t=JSON.parse('{"id":"Develop/environment-variables","title":"Environment variables","description":"In general, environment variables, like LANGFLOWPORT or LANGFLOWLOG_LEVEL, configure how Langflow runs.","source":"@site/docs/Develop/environment-variables.mdx","sourceDirName":"Develop","slug":"/environment-variables","permalink":"/environment-variables","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Environment variables","slug":"/environment-variables"},"sidebar":"docs","previous":{"title":"Global variables","permalink":"/configuration-global-variables"},"next":{"title":"Manage files","permalink":"/concepts-file-management"}}');var s=n(74848),r=n(28453),l=n(24754),c=n(11470),i=n(19365);n(28774);const a={title:"Environment variables",slug:"/environment-variables"},d=void 0,p={},h={annotations:l.hk,Code:l.Cy},u={staticMediaQuery:"not screen, (max-width: 768px)",lineNumbers:!0,showCopyButton:!0,themeName:"github-dark"},L=[{value:"Configure environment variables for Langflow OSS",id:"configure-environment-variables-for-langflow-oss",level:2},{value:"Precedence",id:"precedence",level:3},{value:"Set environment variables in your terminal",id:"configure-variables-terminal",level:3},{value:"Import environment variables from a .env file",id:"configure-variables-env-file",level:3},{value:"Configure environment variables for development",id:"configure-environment-variables-for-development",level:3},{value:"Set environment variables for Langflow Desktop",id:"set-environment-variables-for-langflow-desktop",level:2},{value:"Supported environment variables",id:"supported-variables",level:2},{value:"Authentication and security",id:"authentication-and-security",level:3},{value:"Global variables",id:"global-variables",level:3},{value:"Logs",id:"logging",level:3},{value:"MCP servers",id:"mcp",level:3},{value:"Monitoring and metrics",id:"monitoring-and-metrics",level:3},{value:"Server",id:"server",level:3},{value:"Storage",id:"storage",level:3},{value:"Telemetry",id:"telemetry",level:3},{value:"Visual editor and Playground behavior",id:"visual-editor-and-playground-behavior",level:3}];function x(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components},{Details:n}=o;return h||f("CH",!1),h.Code||f("CH.Code",!0),n||f("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("style",{dangerouslySetInnerHTML:{__html:'[data-ch-theme="github-dark"] { --ch-t-colorScheme: dark;--ch-t-foreground: #c9d1d9;--ch-t-background: #0d1117;--ch-t-lighter-inlineBackground: #0d1117e6;--ch-t-editor-background: #0d1117;--ch-t-editor-foreground: #c9d1d9;--ch-t-editor-lineHighlightBackground: #6e76811a;--ch-t-editor-rangeHighlightBackground: #ffffff0b;--ch-t-editor-infoForeground: #3794FF;--ch-t-editor-selectionBackground: #264F78;--ch-t-focusBorder: #1f6feb;--ch-t-tab-activeBackground: #0d1117;--ch-t-tab-activeForeground: #c9d1d9;--ch-t-tab-inactiveBackground: #010409;--ch-t-tab-inactiveForeground: #8b949e;--ch-t-tab-border: #30363d;--ch-t-tab-activeBorder: #0d1117;--ch-t-editorGroup-border: #30363d;--ch-t-editorGroupHeader-tabsBackground: #010409;--ch-t-editorLineNumber-foreground: #6e7681;--ch-t-input-background: #0d1117;--ch-t-input-foreground: #c9d1d9;--ch-t-input-border: #30363d;--ch-t-icon-foreground: #8b949e;--ch-t-sideBar-background: #010409;--ch-t-sideBar-foreground: #c9d1d9;--ch-t-sideBar-border: #30363d;--ch-t-list-activeSelectionBackground: #6e768166;--ch-t-list-activeSelectionForeground: #c9d1d9;--ch-t-list-hoverBackground: #6e76811a;--ch-t-list-hoverForeground: #c9d1d9; }'}}),"\n","\n",(0,s.jsxs)(o.p,{children:["In general, environment variables, like ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})," or ",(0,s.jsx)(o.code,{children:"LANGFLOW_LOG_LEVEL"}),", configure how Langflow runs.\nThese are broad settings that apply to your entire Langflow deployment."]}),"\n",(0,s.jsxs)(o.p,{children:["In contrast, global variables are user-defined values stored in Langflow's database for use in flows, such as ",(0,s.jsx)(o.code,{children:"OPENAI_API_KEY"}),".\nLangflow can also source global variables from environment variables.\nFor more information, see ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"Langflow global variables"}),"."]}),"\n",(0,s.jsx)(o.h2,{id:"configure-environment-variables-for-langflow-oss",children:"Configure environment variables for Langflow OSS"}),"\n",(0,s.jsxs)(o.p,{children:["Langflow recognizes ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"supported environment variables"})," from the following sources:"]}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Environment variables set in your terminal."}),"\n",(0,s.jsxs)(o.li,{children:["Environment variables imported from a ",(0,s.jsx)(o.code,{children:".env"})," file when starting Langflow."]}),"\n",(0,s.jsxs)(o.li,{children:["Environment variables set with the ",(0,s.jsx)(o.a,{href:"./configuration-cli",children:"Langflow CLI"}),", including the ",(0,s.jsx)(o.code,{children:"--env-file"})," option and direct options, such as ",(0,s.jsx)(o.code,{children:"--port"}),"."]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"You can choose to use one or more of these sources."}),"\n",(0,s.jsx)(o.h3,{id:"precedence",children:"Precedence"}),"\n",(0,s.jsx)(o.p,{children:"If the same environment variable is set in multiple places, the following hierarchy applies:"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsx)(o.li,{children:"Langflow CLI options override all other sources."}),"\n",(0,s.jsxs)(o.li,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file overrides system environment variables."]}),"\n",(0,s.jsxs)(o.li,{children:["System environment variables are used only if not set elsewhere.\nWhen running a Langflow Docker image, the ",(0,s.jsx)(o.code,{children:"-e"})," flag can be used to set additional system environment variables."]}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"For example:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["If you set ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT=8080"})," in your system environment and ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT=7860"})," in ",(0,s.jsx)(o.code,{children:".env"}),", Langflow uses ",(0,s.jsx)(o.code,{children:"7860"})," from ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["If you use the Langflow CLI to run ",(0,s.jsx)(o.code,{children:"langflow run --env-file .env --port 9000"}),", and you set ",(0,s.jsx)(o.code,{children:"LANGFLOW_PORT=7860"})," in ",(0,s.jsx)(o.code,{children:".env"}),", then Langflow uses ",(0,s.jsx)(o.code,{children:"9000"})," from the CLI option."]}),"\n"]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-terminal",children:"Set environment variables in your terminal"}),"\n",(0,s.jsx)(o.p,{children:"Run the following commands to set environment variables for your current terminal session:"}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"linux-macos",label:"Linux or macOS",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"export",props:{style:{color:"#FF7B72"}}},{content:" VARIABLE_NAME",props:{style:{color:"#C9D1D9"}}},{content:"=",props:{style:{color:"#FF7B72"}}},{content:"'VALUE'",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"windows",label:"Windows",children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"set VARIABLE_NAME='VALUE'",props:{}}]}],lang:"text"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -e ",props:{style:{color:"#79C0FF"}}},{content:"VARIABLE_NAME='VALUE' ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["When you start Langflow, it looks for environment variables that you've set in your terminal.\nIf it detects a supported environment variable, then it automatically adopts the specified value, subject to ",(0,s.jsx)(o.a,{href:"#precedence",children:"precedence rules"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-variables-env-file",children:"Import environment variables from a .env file"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"If Langflow is running, quit Langflow."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create a ",(0,s.jsx)(o.code,{children:".env"})," file, and then open it in your preferred editor."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Define ",(0,s.jsx)(o.a,{href:"#supported-variables",children:"Langflow environment variables"})," in the ",(0,s.jsx)(o.code,{children:".env"})," file."]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: .env"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=False",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=False",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=False",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=False",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=False",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=False",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=True",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]}),(0,s.jsxs)(o.p,{children:["For additional examples, see ",(0,s.jsx)(o.a,{href:"https://github.com/langflow-ai/langflow/blob/main/.env.example",children:(0,s.jsx)(o.code,{children:".env.example"})})," in the Langflow repository."]})]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Save and close ",(0,s.jsx)(o.code,{children:".env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Start Langflow with your ",(0,s.jsx)(o.code,{children:".env"})," file:"]}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsx)(i.A,{value:"local",label:"Local",default:!0,children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"uv ",props:{style:{color:"#FFA657"}}},{content:"run langflow run ",props:{style:{color:"#A5D6FF"}}},{content:"--env-file ",props:{style:{color:"#79C0FF"}}},{content:".env",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})}),(0,s.jsx)(i.A,{value:"docker",label:"Docker",children:(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"docker ",props:{style:{color:"#FFA657"}}},{content:"run ",props:{style:{color:"#A5D6FF"}}},{content:"-it --rm \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" -p ",props:{style:{color:"#79C0FF"}}},{content:"7860:",props:{style:{color:"#A5D6FF"}}},{content:"7860 \\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" --env-file ",props:{style:{color:"#79C0FF"}}},{content:".env ",props:{style:{color:"#A5D6FF"}}},{content:"\\",props:{style:{color:"#79C0FF"}}}]},{tokens:[{content:" langflowai/langflow:latest",props:{style:{color:"#A5D6FF"}}}]}],lang:"bash"},annotations:[]}]})})]}),"\n",(0,s.jsxs)(o.p,{children:["If your ",(0,s.jsx)(o.code,{children:".env"})," file isn't in the same directory, provide the path to your ",(0,s.jsx)(o.code,{children:".env"})," file."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(o.p,{children:["On startup, Langflow imports the environment variables from your ",(0,s.jsx)(o.code,{children:".env"})," file, as well as any others that you set in your terminal, and then adopts their specified values."]}),"\n",(0,s.jsx)(o.h3,{id:"configure-environment-variables-for-development",children:"Configure environment variables for development"}),"\n",(0,s.jsx)(o.p,{children:"The following examples show how to configure Langflow using environment variables in different development scenarios."}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"env",label:".env file",default:!0,children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file is a text file that contains key-value pairs of environment variables."]}),(0,s.jsxs)(o.p,{children:["Create or edit a ",(0,s.jsx)(o.code,{children:".env"})," file in the root directory of your application or Langflow environment, and then add your configuration variables to the file:"]}),(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: .env"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".env"',focus:"",code:{lines:[{tokens:[{content:"DO_NOT_TRACK=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_LOGIN=False",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING=True",props:{}}]},{tokens:[{content:"LANGFLOW_AUTO_SAVING_INTERVAL=1000",props:{}}]},{tokens:[{content:"LANGFLOW_BACKEND_ONLY=False",props:{}}]},{tokens:[{content:'LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]',props:{}}]},{tokens:[{content:"LANGFLOW_CACHE_TYPE=async",props:{}}]},{tokens:[{content:"LANGFLOW_COMPONENTS_PATH=/path/to/components/",props:{}}]},{tokens:[{content:"LANGFLOW_CONFIG_DIR=/path/to/config/",props:{}}]},{tokens:[{content:"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow",props:{}}]},{tokens:[{content:"LANGFLOW_DEV=False",props:{}}]},{tokens:[{content:"LANGFLOW_FALLBACK_TO_ENV_VAR=False",props:{}}]},{tokens:[{content:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5",props:{}}]},{tokens:[{content:"LANGFLOW_HOST=localhost",props:{}}]},{tokens:[{content:"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_ITEMS_LENGTH=100",props:{}}]},{tokens:[{content:"LANGFLOW_MAX_TEXT_LENGTH=1000",props:{}}]},{tokens:[{content:"LANGFLOW_LOG_LEVEL=error",props:{}}]},{tokens:[{content:"LANGFLOW_OPEN_BROWSER=False",props:{}}]},{tokens:[{content:"LANGFLOW_PORT=7860",props:{}}]},{tokens:[{content:"LANGFLOW_REMOVE_API_KEYS=False",props:{}}]},{tokens:[{content:"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True",props:{}}]},{tokens:[{content:"LANGFLOW_SECRET_KEY=somesecretkey",props:{}}]},{tokens:[{content:"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=True",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER=adminuser",props:{}}]},{tokens:[{content:"LANGFLOW_SUPERUSER_PASSWORD=adminpass",props:{}}]},{tokens:[{content:"LANGFLOW_WORKER_TIMEOUT=60000",props:{}}]},{tokens:[{content:"LANGFLOW_WORKERS=3",props:{}}]}],lang:"text"},annotations:[]}]})]})]}),(0,s.jsxs)(i.A,{value:"systemd",label:"Systemd service",children:[(0,s.jsx)(o.p,{children:"A systemd service configuration file configures Linux system services."}),(0,s.jsxs)(o.p,{children:["To add environment variables, create or edit a service configuration file and add an ",(0,s.jsx)(o.code,{children:"override.conf"})," file. This file allows you to override the default environment variables for the service."]}),(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: override.conf"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'"override.conf"',focus:"",code:{lines:[{tokens:[{content:"[Service]",props:{style:{color:"#FFA657"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"DO_NOT_TRACK=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_LOGIN=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_AUTO_SAVING_INTERVAL=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BACKEND_ONLY=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_BUNDLE_URLS=[\\"',props:{style:{color:"#A5D6FF"}}},{content:"https://github.com/user/repo/commit/hash\\",props:{style:{color:"#C9D1D9"}}},{content:'"]"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CACHE_TYPE=async"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_COMPONENTS_PATH=/path/to/components/"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_CONFIG_DIR=/path/to/config"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_DEV=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_FALLBACK_TO_ENV_VAR=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_HOST=localhost"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LANGCHAIN_CACHE=InMemoryCache"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_ITEMS_LENGTH=100"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_MAX_TEXT_LENGTH=1000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_ENV=container_json"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_FILE=logs/langflow.log"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_LOG_LEVEL=error"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_OPEN_BROWSER=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_PORT=7860"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_REMOVE_API_KEYS=false"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SECRET_KEY=somesecretkey"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_STORE_ENVIRONMENT_VARIABLES=true"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER=adminuser"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_SUPERUSER_PASSWORD=adminpass"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKER_TIMEOUT=60000"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:"Environment",props:{style:{color:"#FF7B72"}}},{content:"=",props:{style:{color:"#C9D1D9"}}},{content:'"LANGFLOW_WORKERS=3"',props:{style:{color:"#A5D6FF"}}}]}],lang:"ini"},annotations:[]}]})]}),(0,s.jsxs)(o.p,{children:["For more information on systemd, see the ",(0,s.jsx)(o.a,{href:"https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_systemd_unit_files_to_customize_and_optimize_your_system/assembly_working-with-systemd-unit-files_working-with-systemd",children:"Red Hat documentation"}),"."]})]}),(0,s.jsxs)(i.A,{value:"vscode",label:"VSCode tasks.json",children:[(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:"tasks.json"})," file located in ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," is a configuration file for development environments using Visual Studio Code."]}),(0,s.jsxs)(o.p,{children:["Create or edit the ",(0,s.jsx)(o.code,{children:".vscode/tasks.json"})," file in your project root."]}),(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Example: .vscode/tasks.json"}),(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",title:'".vscode/tasks.json"',focus:"",code:{lines:[{tokens:[{content:"{",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "version"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"2.0.0"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "options"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "env"',props:{style:{color:"#7EE787"}}},{content:": {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "DO_NOT_TRACK"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_LOGIN"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_AUTO_SAVING_INTERVAL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BACKEND_ONLY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_BUNDLE_URLS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"[',props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:"https://github.com/user/repo/commit/hash",props:{style:{color:"#A5D6FF"}}},{content:'\\"',props:{style:{color:"#79C0FF"}}},{content:']"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CACHE_TYPE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"async"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_COMPONENTS_PATH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/components/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"D:/path/to/config/"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DATABASE_URL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"postgresql://postgres:password@localhost:5432/langflow"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_DEV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_FALLBACK_TO_ENV_VAR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HEALTH_CHECK_MAX_RETRIES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"5"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_HOST"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"localhost"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LANGCHAIN_CACHE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"InMemoryCache"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_FILE_SIZE_UPLOAD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"10000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_ITEMS_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"100"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_MAX_TEXT_LENGTH"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"1000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_ENV"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"container_csv"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_FILE"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow.log"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_LOG_LEVEL"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"error"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_OPEN_BROWSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_PORT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"7860"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_REMOVE_API_KEYS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SAVE_DB_IN_CONFIG_DIR"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"false"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SECRET_KEY"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"somesecretkey"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_STORE_ENVIRONMENT_VARIABLES"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"true"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminuser"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_SUPERUSER_PASSWORD"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"adminpass"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKER_TIMEOUT"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"60000"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "LANGFLOW_WORKERS"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"3"',props:{style:{color:"#A5D6FF"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" },",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "tasks"',props:{style:{color:"#7EE787"}}},{content:": [",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" {",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "label"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"langflow backend"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "type"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'"shell"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "command"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:'". ./langflownightly/Scripts/activate && langflow run"',props:{style:{color:"#A5D6FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "isBackground"',props:{style:{color:"#7EE787"}}},{content:": ",props:{style:{color:"#C9D1D9"}}},{content:"true",props:{style:{color:"#79C0FF"}}},{content:",",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:' "problemMatcher"',props:{style:{color:"#7EE787"}}},{content:": []",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" }",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" ]",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:"}",props:{style:{color:"#C9D1D9"}}}]}],lang:"json"},annotations:[]}]})]}),(0,s.jsxs)(o.p,{children:["To run Langflow using the above VSCode ",(0,s.jsx)(o.code,{children:"tasks.json"})," file, in the VSCode command palette, select ",(0,s.jsx)(o.strong,{children:"Tasks: Run Task"})," > ",(0,s.jsx)(o.strong,{children:"langflow backend"}),"."]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"set-environment-variables-for-langflow-desktop",children:"Set environment variables for Langflow Desktop"}),"\n",(0,s.jsx)(o.p,{children:"Environment variables set in your terminal aren't automatically available to GUI-based applications like Langflow Desktop when you launch them from the Windows or macOS GUI."}),"\n",(0,s.jsxs)(o.p,{children:["To modify environment variables for Langflow Desktop, set environment variables in a Desktop ",(0,s.jsx)(o.code,{children:".env"})," file, and then restart the app."]}),"\n",(0,s.jsxs)(c.A,{children:[(0,s.jsxs)(i.A,{value:"macos",label:"macOS",default:!0,children:[(0,s.jsxs)(o.p,{children:["To modify the macOS ",(0,s.jsx)(o.code,{children:".env"})," file, do the following:"]}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create or edit ",(0,s.jsx)(o.code,{children:"~/.langflow/data/.env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Add your Langflow environment variables, for example:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_LOG_LEVEL=info",props:{}}]},{tokens:[{content:"LANGFLOW_DOCLING=true",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Save the file."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Restart Langflow Desktop."}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows",label:"Windows .env file",children:[(0,s.jsxs)(o.p,{children:["To modify the Windows ",(0,s.jsx)(o.code,{children:".env"})," file, do the following:"]}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["Create or edit ",(0,s.jsx)(o.code,{children:"%APPDATA%\\com.LangflowDesktop\\data\\.env"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Add your Langflow environment variables, for example:"}),"\n",(0,s.jsx)(h.Code,{codeConfig:u,northPanel:{tabs:[""],active:"",heightRatio:1},files:[{name:"",focus:"",code:{lines:[{tokens:[{content:"LANGFLOW_LOG_LEVEL=info",props:{}}]},{tokens:[{content:"LANGFLOW_DOCLING=true",props:{}}]}],lang:"text"},annotations:[]}]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Save the file."}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsx)(o.p,{children:"Restart Langflow Desktop."}),"\n"]}),"\n"]})]}),(0,s.jsxs)(i.A,{value:"windows-user-vars",label:"Windows user environment variables",children:[(0,s.jsxs)(o.p,{children:["Windows supports two sources for Langflow Desktop environment variables: a Langflow application ",(0,s.jsx)(o.code,{children:".env"})," file, and Windows user environment variables."]}),(0,s.jsxs)(o.p,{children:["The ",(0,s.jsx)(o.code,{children:".env"})," file at ",(0,s.jsx)(o.code,{children:"%APPDATA%\\com.LangflowDesktop\\data\\.env"})," is the recommended approach, but\nWindows user variables are useful for single-sourcing API keys between Langflow and other Windows applications.\nIf the same variable is defined in both the Langflow application ",(0,s.jsx)(o.code,{children:".env"})," file and as a Windows user environment variable, the ",(0,s.jsx)(o.code,{children:".env"})," file takes precedence."]}),(0,s.jsx)(o.p,{children:"To modify the Windows user environment variables, do the following:"}),(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["Press ",(0,s.jsx)("kbd",{children:"Win + R"}),", enter ",(0,s.jsx)(o.code,{children:"sysdm.cpl"}),", and then press ",(0,s.jsx)("kbd",{children:"Enter"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Click the ",(0,s.jsx)(o.strong,{children:"Advanced"})," tab, and then click ",(0,s.jsx)(o.strong,{children:"Environment Variables"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["In ",(0,s.jsx)(o.strong,{children:"User variables"}),", click ",(0,s.jsx)(o.strong,{children:"New"}),"."]}),"\n",(0,s.jsxs)(o.li,{children:["Enter the variable name, such as ",(0,s.jsx)(o.code,{children:"OPENAI_API_KEY"}),", and its value."]}),"\n",(0,s.jsxs)(o.li,{children:["Click ",(0,s.jsx)(o.strong,{children:"OK"}),", and then ",(0,s.jsx)(o.strong,{children:"restart Langflow Desktop"}),"."]}),"\n"]})]})]}),"\n",(0,s.jsx)(o.h2,{id:"supported-variables",children:"Supported environment variables"}),"\n",(0,s.jsx)(o.p,{children:"The following sections provide information about specific Langflow environment variables."}),"\n",(0,s.jsx)(o.h3,{id:"authentication-and-security",children:"Authentication and security"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/api-keys-and-authentication",children:"API keys and authentication"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"global-variables",children:"Global variables"}),"\n",(0,s.jsxs)(o.p,{children:["For information about the relationship between Langflow global variables and environment variables, as well as environment variables that control handling of global variables, see ",(0,s.jsx)(o.a,{href:"/configuration-global-variables",children:"Global variables"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"logging",children:"Logs"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/logging#log-storage",children:"Configure log options"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"mcp",children:"MCP servers"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/mcp-server",children:"Use Langflow as an MCP server"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"monitoring-and-metrics",children:"Monitoring and metrics"}),"\n",(0,s.jsxs)(o.p,{children:["For environment variables for specific monitoring service providers, see the Langflow monitoring integration guides, such as ",(0,s.jsx)(o.a,{href:"/integrations-langfuse",children:"Langfuse"})," and ",(0,s.jsx)(o.a,{href:"/deployment-prod-best-practices",children:"Best practices for Langflow on Kubernetes"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"server",children:"Server"}),"\n",(0,s.jsx)(o.p,{children:"The following environment variables set base Langflow server configuration, such as where the server is hosted, required files for SSL encryption, and the deployment type (frontend and backend, backend-only, development mode)."}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Variable"}),(0,s.jsx)(o.th,{children:"Format"}),(0,s.jsx)(o.th,{children:"Default"}),(0,s.jsx)(o.th,{children:"Description"})]})}),(0,s.jsxs)(o.tbody,{children:[(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HOST"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"localhost"})}),(0,s.jsx)(o.td,{children:"The host on which the Langflow server will run."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PORT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"7860"})}),(0,s.jsx)(o.td,{children:"The port on which the Langflow server runs. The server automatically selects a free port if the specified port is in use."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BACKEND_ONLY"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Run only the Langflow backend service (no frontend)."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DEV"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Whether to run Langflow in development mode (may contain bugs)."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_OPEN_BROWSER"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Open the system web browser on startup."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_HEALTH_CHECK_MAX_RETRIES"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"5"})}),(0,s.jsx)(o.td,{children:"Set the maximum number of retries for Langflow's server status health checks."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKERS"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1"})}),(0,s.jsx)(o.td,{children:"Number of worker processes."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_WORKER_TIMEOUT"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"300"})}),(0,s.jsx)(o.td,{children:"Worker timeout in seconds."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_CERT_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to the SSL certificate file for enabling HTTPS on the Langflow web server. This is separate from ",(0,s.jsx)(o.a,{href:"/configuration-custom-database#connect-langflow-to-a-local-postgresql-database",children:"database SSL connections"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_SSL_KEY_FILE"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to the SSL key file for enabling HTTPS on the Langflow web server. This is separate from ",(0,s.jsx)(o.a,{href:"/configuration-custom-database#connect-langflow-to-a-local-postgresql-database",children:"database SSL connections"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_DEACTIVATE_TRACING"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Deactivate tracing functionality."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CELERY_ENABLED"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsx)(o.td,{children:"Enable Celery for distributed task processing."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_ALEMBIC_LOG_TO_STDOUT"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsxs)(o.td,{children:["Whether to log Alembic database migration output to stdout instead of a log file. If ",(0,s.jsx)(o.code,{children:"true"}),", Alembic logs to ",(0,s.jsx)(o.code,{children:"stdout"})," and the default log file is ignored."]})]})]})]}),"\n",(0,s.jsxs)(o.p,{children:["For more information about deploying Langflow servers, see ",(0,s.jsx)(o.a,{href:"/deployment-overview",children:"Langflow deployment overview"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"storage",children:"Storage"}),"\n",(0,s.jsxs)(o.p,{children:["For file storage environment variables, see ",(0,s.jsx)(o.a,{href:"/concepts-file-management#file-storage-environment-variables",children:"File storage environment variables"}),"."]}),"\n",(0,s.jsxs)(o.p,{children:["For database environment variables, including PostgreSQL configuration, see ",(0,s.jsx)(o.a,{href:"/memory#configure-external-memory",children:"Memory management options"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"telemetry",children:"Telemetry"}),"\n",(0,s.jsxs)(o.p,{children:["See ",(0,s.jsx)(o.a,{href:"/contributing-telemetry",children:"Telemetry"}),"."]}),"\n",(0,s.jsx)(o.h3,{id:"visual-editor-and-playground-behavior",children:"Visual editor and Playground behavior"}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Variable"}),(0,s.jsx)(o.th,{children:"Format"}),(0,s.jsx)(o.th,{children:"Default"}),(0,s.jsx)(o.th,{children:"Description"})]})}),(0,s.jsxs)(o.tbody,{children:[(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"True"})}),(0,s.jsx)(o.td,{children:"Whether to automatically save flows."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING_INTERVAL"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsxs)(o.td,{children:["Set the auto-save interval in milliseconds if ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_SAVING=True"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_BUNDLE_URLS"})}),(0,s.jsx)(o.td,{children:"List[String]"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"[]"})}),(0,s.jsxs)(o.td,{children:["A list of URLs from which to load custom bundles. Supports GitHub URLs. If ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),", flows from these bundles are loaded into the database."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_COMPONENTS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsx)(o.td,{children:"Path to a directory containing custom components. Typically used if you have local custom components or you are building a Docker image with custom components."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LOAD_FLOWS_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:"Not set"}),(0,s.jsxs)(o.td,{children:["Path to a directory containing flow JSON files to be loaded on startup. Typically used when creating a Docker image with prepackaged flows. Requires ",(0,s.jsx)(o.code,{children:"LANGFLOW_AUTO_LOGIN=True"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_CREATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"True"})}),(0,s.jsxs)(o.td,{children:["Whether to create templates during initialization. If ",(0,s.jsx)(o.code,{children:"false"}),", Langflow doesn't create templates, and ",(0,s.jsx)(o.code,{children:"LANGFLOW_UPDATE_STARTER_PROJECTS"})," is treated as ",(0,s.jsx)(o.code,{children:"false"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_UPDATE_STARTER_PROJECTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"True"})}),(0,s.jsx)(o.td,{children:"Whether to update templates with the latest component versions when initializing after an upgrade."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_LAZY_LOAD_COMPONENTS"})}),(0,s.jsx)(o.td,{children:"Boolean"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"False"})}),(0,s.jsxs)(o.td,{children:["If ",(0,s.jsx)(o.code,{children:"true"}),", Langflow only partially loads components at startup and fully loads them on demand. This significantly reduces startup time but can cause a slight delay when a component is first used."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_EVENT_DELIVERY"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"streaming"})}),(0,s.jsxs)(o.td,{children:["How to deliver build events to the frontend: ",(0,s.jsx)(o.code,{children:"polling"}),", ",(0,s.jsx)(o.code,{children:"streaming"})," or ",(0,s.jsx)(o.code,{children:"direct"}),"."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_FRONTEND_PATH"})}),(0,s.jsx)(o.td,{children:"String"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"./frontend"})}),(0,s.jsx)(o.td,{children:"Path to the frontend directory containing build files. For development purposes only when you need to serve specific frontend code."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_ITEMS_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"100"})}),(0,s.jsx)(o.td,{children:"Maximum number of items to store and display in the visual editor. Lists longer than this will be truncated when displayed in the visual editor. Doesn't affect outputs or data passed between components."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_TEXT_LENGTH"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"1000"})}),(0,s.jsx)(o.td,{children:"Maximum number of characters to store and display in the visual editor. Responses longer than this will be truncated when displayed in the visual editor. Doesn't truncate outputs or responses passed between components."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_TRANSACTIONS_TO_KEEP"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3000"})}),(0,s.jsx)(o.td,{children:"Maximum number of flow transaction events to keep in the database."})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_VERTEX_BUILDS_TO_KEEP"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3000"})}),(0,s.jsxs)(o.td,{children:["Maximum number of vertex builds to keep in the database. Relates to ",(0,s.jsx)(o.a,{href:"/concepts-playground",children:"Playground"})," functionality."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_MAX_VERTEX_BUILDS_PER_VERTEX"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"2"})}),(0,s.jsxs)(o.td,{children:["Maximum number of builds to keep per vertex. Older builds are deleted. Relates to ",(0,s.jsx)(o.a,{href:"/concepts-playground",children:"Playground"})," functionality."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PUBLIC_FLOW_CLEANUP_INTERVAL"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"3600"})}),(0,s.jsxs)(o.td,{children:["The interval in seconds at which data for ",(0,s.jsx)(o.a,{href:"/concepts-playground#share-a-flows-playground",children:"shared Playground"})," flows are cleaned up. Default: 3600 seconds (1 hour). Minimum: 600 seconds (10 minutes)."]})]}),(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"LANGFLOW_PUBLIC_FLOW_EXPIRATION"})}),(0,s.jsx)(o.td,{children:"Integer"}),(0,s.jsx)(o.td,{children:(0,s.jsx)(o.code,{children:"86400"})}),(0,s.jsxs)(o.td,{children:["The time in seconds after which a ",(0,s.jsx)(o.a,{href:"/concepts-playground#share-a-flows-playground",children:"shared Playground"})," flow is considered expired and eligible for cleanup. Default: 86400 seconds (24 hours). Minimum: 600 seconds (10 minutes)."]})]})]})]})]})}function F(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(x,{...e})}):x(e)}function f(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}}}]);
\ No newline at end of file
diff --git a/assets/js/d5ec984b.64627d58.js b/assets/js/d5ec984b.64627d58.js
deleted file mode 100644
index 259e70d32c..0000000000
--- a/assets/js/d5ec984b.64627d58.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[6999],{11470:(e,n,t)=>{t.d(n,{A:()=>y});var r=t(96540),s=t(18215),o=t(17559),i=t(23104),l=t(56347),c=t(205),d=t(57485),a=t(31682),h=t(70679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:t}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r}))}(t);return function(e){const n=(0,a.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,t])}function x({value:e,tabValues:n}){return n.some(n=>n.value===e)}function m({queryString:e=!1,groupId:n}){const t=(0,l.W6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,d.aZ)(s),(0,r.useCallback)(e=>{if(!s)return;const n=new URLSearchParams(t.location.search);n.set(s,e),t.replace({...t.location,search:n.toString()})},[s,t])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=p(e),[i,l]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const t=n.find(e=>e.default)??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o})),[d,a]=m({queryString:t,groupId:s}),[u,g]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,s]=(0,h.Dv)(n);return[t,(0,r.useCallback)(e=>{n&&s.set(e)},[n,s])]}({groupId:s}),j=(()=>{const e=d??u;return x({value:e,tabValues:o})?e:null})();(0,c.A)(()=>{j&&l(j)},[j]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),g(e)},[a,g,o]),tabValues:o}}var j=t(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var D=t(74848);function b({className:e,block:n,selectedValue:t,selectValue:r,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.a_)(),d=e=>{const n=e.currentTarget,s=l.indexOf(n),i=o[s].value;i!==t&&(c(n),r(i))},a=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,D.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:r})=>(0,D.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{l.push(e)},onKeyDown:a,onClick:d,...r,className:(0,s.A)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function v({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===t);return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,D.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t}))})}function w(e){const n=g(e);return(0,D.jsxs)("div",{className:(0,s.A)(o.G.tabs.container,"tabs-container",f.tabList),children:[(0,D.jsx)(b,{...n,...e}),(0,D.jsx)(v,{...n,...e})]})}function y(e){const n=(0,j.A)();return(0,D.jsx)(w,{...e,children:u(e.children)},String(n))}},16728:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/integrations-docling-split-text-7dfa4c618be68f4559ce6247630dbdf1.png"},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var r=t(18215);const s={tabItem:"tabItem_Ymn6"};var o=t(74848);function i({children:e,hidden:n,className:t}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,t),hidden:n,children:e})}},40935:(e,n,t)=>{t.d(n,{Ay:()=>l,RM:()=>o});var r=t(74848),s=t(28453);const o=[];function i(e){const n={a:"a",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,r.jsxs)(n.p,{children:["If you are running Langflow Desktop on Windows, you must ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development#activate-developer-mode",children:"enable Developer Mode"})," to use the Docling components.\nThe location of this setting depends on your Windows OS version.\nFind ",(0,r.jsx)(n.strong,{children:"For developers"}),' in your Windows Settings, or search for "Developer" in the Windows search bar, and then enable ',(0,r.jsx)(n.strong,{children:"Developer mode"}),".\nYou might need to restart your computer or Langflow to apply the change."]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},76582:(e,n,t)=>{t.d(n,{Ay:()=>l,RM:()=>o});var r=t(74848),s=t(28453);const o=[];function i(e){const n={a:"a",li:"li",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Docker/Linux system dependencies"}),": If running Langflow in a Docker container on Linux, you might need to install additional system packages for document processing. For more information, see ",(0,r.jsx)(n.a,{href:"/troubleshoot#document-processing-errors-in-docker-containers",children:"Document processing errors in Docker containers"}),"."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},77995:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>x,frontMatter:()=>d,metadata:()=>r,toc:()=>u});const r=JSON.parse('{"id":"Components/bundles-docling","title":"Docling","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","source":"@site/docs/Components/bundles-docling.mdx","sourceDirName":"Components","slug":"/bundles-docling","permalink":"/bundles-docling","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Docling","slug":"/bundles-docling"},"sidebar":"docs","previous":{"title":"DeepSeek","permalink":"/bundles-deepseek"},"next":{"title":"DuckDuckGo","permalink":"/bundles-duckduckgo"}}');var s=t(74848),o=t(28453),i=(t(11470),t(19365),t(40619)),l=t(40935),c=t(76582);const d={title:"Docling",slug:"/bundles-docling"},a=void 0,h={},u=[{value:"Prerequisites",id:"prerequisites",level:2},...l.RM,...c.RM,{value:"Use Docling components in a flow",id:"use-docling-components-in-a-flow",level:2},{value:"Docling components",id:"docling-components",level:2},{value:"Docling local model",id:"docling-local-model",level:3},{value:"Docling parameters",id:"docling-parameters",level:4},{value:"Docling Serve",id:"docling-serve",level:3},{value:"Docling Serve parameters",id:"docling-serve-parameters",level:4},{value:"Chunk DoclingDocument",id:"chunk-doclingdocument",level:3},{value:"Chunk DoclingDocument parameters",id:"chunk-doclingdocument-parameters",level:4},{value:"Export DoclingDocument",id:"export-doclingdocument",level:3},{value:"Export DoclingDocument parameters",id:"export-doclingdocument-parameters",level:4},{value:"See also",id:"see-also",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(i.A,{name:"Blocks","aria-hidden":"true"})," ",(0,s.jsx)(n.a,{href:"/components-bundle-components",children:(0,s.jsx)(n.strong,{children:"Bundles"})})," contain custom components that support specific third-party integrations with Langflow."]}),"\n",(0,s.jsxs)(n.p,{children:["Langflow integrates with ",(0,s.jsx)(n.a,{href:"https://docling-project.github.io/docling/",children:"Docling"})," through a bundle of components for parsing and chunking documents."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Enable Developer Mode for Windows"}),":"]}),"\n",(0,s.jsx)(l.Ay,{}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Install Docling dependency"}),":\nThe Docling dependency is required to use the Docling components in Langflow."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Langflow version 1.6 and later"}),": The Docling dependency is included by default for all operating systems except macOS Intel (x86_64)."]}),"\n",(0,s.jsxs)(n.p,{children:["For macOS Intel (x86_64), use the ",(0,s.jsx)(n.a,{href:"https://docling-project.github.io/docling/installation/",children:"Docling installation guide"})," to install the Docling dependency."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Earlier versions"}),": Langflow versions earlier than 1.6 don't include the Docling dependency.\nFor Langflow OSS, install the Docling extra with ",(0,s.jsx)(n.code,{children:"uv pip install 'langflow[docling]'"}),".\nFor Langflow Desktop, add the Docling dependency to Langflow Desktop's ",(0,s.jsx)(n.code,{children:"requirements.txt"}),".\nFor more information, see ",(0,s.jsx)(n.a,{href:"/install-custom-dependencies",children:"Install custom dependencies"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(c.Ay,{}),"\n",(0,s.jsx)(n.h2,{id:"use-docling-components-in-a-flow",children:"Use Docling components in a flow"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["To learn more about content extraction with Docling, see the video tutorial ",(0,s.jsx)(n.a,{href:"https://www.youtube.com/watch?v=5DuS6uRI5OM",children:"Docling + Langflow: Document Processing for AI Workflows"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"This example demonstrates how to use Docling components to split a PDF in a flow:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Connect a ",(0,s.jsx)(n.strong,{children:"Docling"})," and an ",(0,s.jsx)(n.strong,{children:"Export DoclingDocument"})," component to a ",(0,s.jsxs)(n.a,{href:"/split-text",children:[(0,s.jsx)(n.strong,{children:"Split Text"})," component"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Docling"})," component loads the document, and the ",(0,s.jsx)(n.strong,{children:"Export DoclingDocument"})," component converts the ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," into the format you select. This example converts the document to Markdown, with images represented as placeholders.\nThe ",(0,s.jsx)(n.strong,{children:"Split Text"})," component will split the Markdown into chunks for the vector database to store in the next part of the flow."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Connect a ",(0,s.jsxs)(n.a,{href:"/bundles-chroma#chroma-db",children:[(0,s.jsx)(n.strong,{children:"Chroma DB"})," vector store component"]})," to the ",(0,s.jsx)(n.strong,{children:"Split Text"})," component's ",(0,s.jsx)(n.strong,{children:"Chunks"})," output."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Connect an ",(0,s.jsx)(n.a,{href:"/components-embedding-models",children:"embedding model component"})," to the ",(0,s.jsx)(n.strong,{children:"Chroma DB"})," component's ",(0,s.jsx)(n.strong,{children:"Embedding"})," port and a ",(0,s.jsx)(n.strong,{children:"Chat Output"})," component to view the extracted ",(0,s.jsx)(n.a,{href:"/data-types#dataframe",children:(0,s.jsx)(n.code,{children:"DataFrame"})}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In the embedding model component, select your preferred model, provide credentials, and configure other settings as needed."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Docling and ExportDoclingDocument extracting and splitting text to vector database",src:t(16728).A+"",width:"4000",height:"2060"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add a file to the ",(0,s.jsx)(n.strong,{children:"Docling"})," component."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To run the flow, click ",(0,s.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Playground"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The chunked document is loaded as vectors into your vector database."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"docling-components",children:"Docling components"}),"\n",(0,s.jsxs)(n.p,{children:["The following sections describe the purpose and configuration options for each component in the ",(0,s.jsx)(n.strong,{children:"Docling"})," bundle."]}),"\n",(0,s.jsx)(n.h3,{id:"docling-local-model",children:"Docling local model"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Docling"})," component ingests documents, and then uses Docling to process them by running a local Docling model."]}),"\n",(0,s.jsxs)(n.p,{children:["It outputs ",(0,s.jsx)(n.code,{children:"files"}),", which is the processed files with ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," data."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-ibm-models",children:"Docling IBM models project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"docling-parameters",children:"Docling parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"files"}),(0,s.jsx)(n.td,{children:"File"}),(0,s.jsx)(n.td,{children:"The files to process."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"pipeline"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Docling pipeline to use (standard, vlm)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ocr_engine"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"OCR engine to use (easyocr, tesserocr, rapidocr, ocrmac)."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"docling-serve",children:"Docling Serve"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Docling Serve"})," component ingests documents and processes them with a Docling API service rather than a local model."]}),"\n",(0,s.jsxs)(n.p,{children:["It outputs ",(0,s.jsx)(n.code,{children:"files"}),", which is the processed files with ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," data."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-serve",children:"Docling serve project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"docling-serve-parameters",children:"Docling Serve parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"files"}),(0,s.jsx)(n.td,{children:"File"}),(0,s.jsx)(n.td,{children:"The files to process."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"api_url"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"URL of the Docling Serve instance."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"max_concurrency"}),(0,s.jsx)(n.td,{children:"Integer"}),(0,s.jsx)(n.td,{children:"Maximum number of concurrent requests for the server."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"max_poll_timeout"}),(0,s.jsx)(n.td,{children:"Float"}),(0,s.jsx)(n.td,{children:"Maximum waiting time for the document conversion to complete."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"api_headers"}),(0,s.jsx)(n.td,{children:"Dict"}),(0,s.jsx)(n.td,{children:"Optional dictionary of additional headers required for connecting to Docling Serve."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"docling_serve_opts"}),(0,s.jsx)(n.td,{children:"Dict"}),(0,s.jsx)(n.td,{children:"Optional dictionary of additional options for Docling Serve."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"chunk-doclingdocument",children:"Chunk DoclingDocument"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Chunk DoclingDocument"})," component splits ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," objects into chunks."]}),"\n",(0,s.jsxs)(n.p,{children:["It outputs the chunked documents as a ",(0,s.jsx)(n.a,{href:"/data-types#dataframe",children:(0,s.jsx)(n.code,{children:"DataFrame"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-core",children:"Docling core project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"chunk-doclingdocument-parameters",children:"Chunk DoclingDocument parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"data_inputs"}),(0,s.jsx)(n.td,{children:"Data/DataFrame"}),(0,s.jsx)(n.td,{children:"The data with documents to split in chunks."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"chunker"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Which chunker to use (HybridChunker, HierarchicalChunker)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"provider"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Which tokenizer provider (Hugging Face, OpenAI)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"hf_model_name"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Model name of the tokenizer to use with the HybridChunker when Hugging Face is chosen."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"openai_model_name"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Model name of the tokenizer to use with the HybridChunker when OpenAI is chosen."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"max_tokens"}),(0,s.jsx)(n.td,{children:"Integer"}),(0,s.jsx)(n.td,{children:"Maximum number of tokens for the HybridChunker."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"doc_key"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsxs)(n.td,{children:["The key to use for the ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," column."]})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"export-doclingdocument",children:"Export DoclingDocument"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Export DoclingDocument"})," component exports ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," to Markdown, HTML, and other formats."]}),"\n",(0,s.jsxs)(n.p,{children:["It can output the exported data as either ",(0,s.jsx)(n.a,{href:"/data-types#data",children:(0,s.jsx)(n.code,{children:"Data"})})," or ",(0,s.jsx)(n.a,{href:"/data-types#dataframe",children:(0,s.jsx)(n.code,{children:"DataFrame"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-core",children:"Docling core project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"export-doclingdocument-parameters",children:"Export DoclingDocument parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"data_inputs"}),(0,s.jsx)(n.td,{children:"Data/DataFrame"}),(0,s.jsx)(n.td,{children:"The data with documents to export."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"export_format"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Select the export format to convert the input (Markdown, HTML, Plaintext, DocTags)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"image_mode"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Specify how images are exported in the output (placeholder, embedded)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"md_image_placeholder"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Specify the image placeholder for markdown exports."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"md_page_break_placeholder"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Add this placeholder between pages in the markdown output."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"doc_key"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsxs)(n.td,{children:["The key to use for the ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," column."]})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsxs)(n.a,{href:"/read-file",children:[(0,s.jsx)(n.strong,{children:"Read File"})," component"]})}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/d5ec984b.a44842cb.js b/assets/js/d5ec984b.a44842cb.js
new file mode 100644
index 0000000000..61d6761eb3
--- /dev/null
+++ b/assets/js/d5ec984b.a44842cb.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunklangflow_docs=globalThis.webpackChunklangflow_docs||[]).push([[6999],{11470:(e,n,t)=>{t.d(n,{A:()=>y});var r=t(96540),s=t(18215),o=t(17559),i=t(23104),l=t(56347),c=t(205),d=t(57485),a=t(31682),h=t(70679);function u(e){return r.Children.toArray(e).filter(e=>"\n"!==e).map(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})?.filter(Boolean)??[]}function p(e){const{values:n,children:t}=e;return(0,r.useMemo)(()=>{const e=n??function(e){return u(e).map(({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r}))}(t);return function(e){const n=(0,a.XI)(e,(e,n)=>e.value===n.value);if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map(e=>e.value).join(", ")}" found in . Every value needs to be unique.`)}(e),e},[n,t])}function x({value:e,tabValues:n}){return n.some(n=>n.value===e)}function j({queryString:e=!1,groupId:n}){const t=(0,l.W6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,d.aZ)(s),(0,r.useCallback)(e=>{if(!s)return;const n=new URLSearchParams(t.location.search);n.set(s,e),t.replace({...t.location,search:n.toString()})},[s,t])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,o=p(e),[i,l]=(0,r.useState)(()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(e){if(!x({value:e,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const t=n.find(e=>e.default)??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:o})),[d,a]=j({queryString:t,groupId:s}),[u,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,s]=(0,h.Dv)(n);return[t,(0,r.useCallback)(e=>{n&&s.set(e)},[n,s])]}({groupId:s}),g=(()=>{const e=d??u;return x({value:e,tabValues:o})?e:null})();(0,c.A)(()=>{g&&l(g)},[g]);return{selectedValue:i,selectValue:(0,r.useCallback)(e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),a(e),m(e)},[a,m,o]),tabValues:o}}var g=t(92303);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var b=t(74848);function D({className:e,block:n,selectedValue:t,selectValue:r,tabValues:o}){const l=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.a_)(),d=e=>{const n=e.currentTarget,s=l.indexOf(n),i=o[s].value;i!==t&&(c(n),r(i))},a=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,b.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":n},e),children:o.map(({value:e,label:n,attributes:r})=>(0,b.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{l.push(e)},onKeyDown:a,onClick:d,...r,className:(0,s.A)("tabs__item",f.tabItem,r?.className,{"tabs__item--active":t===e}),children:n??e},e))})}function v({lazy:e,children:n,selectedValue:t}){const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=o.find(e=>e.props.value===t);return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,b.jsx)("div",{className:"margin-top--md",children:o.map((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t}))})}function w(e){const n=m(e);return(0,b.jsxs)("div",{className:(0,s.A)(o.G.tabs.container,"tabs-container",f.tabList),children:[(0,b.jsx)(D,{...n,...e}),(0,b.jsx)(v,{...n,...e})]})}function y(e){const n=(0,g.A)();return(0,b.jsx)(w,{...e,children:u(e.children)},String(n))}},16728:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/integrations-docling-split-text-7dfa4c618be68f4559ce6247630dbdf1.png"},19365:(e,n,t)=>{t.d(n,{A:()=>i});t(96540);var r=t(18215);const s={tabItem:"tabItem_Ymn6"};var o=t(74848);function i({children:e,hidden:n,className:t}){return(0,o.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,t),hidden:n,children:e})}},40935:(e,n,t)=>{t.d(n,{Ay:()=>l,RM:()=>o});var r=t(74848),s=t(28453);const o=[];function i(e){const n={a:"a",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,r.jsxs)(n.p,{children:["If you are running Langflow Desktop on Windows, you must ",(0,r.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development#activate-developer-mode",children:"enable Developer Mode"})," to use the Docling components.\nThe location of this setting depends on your Windows OS version.\nFind ",(0,r.jsx)(n.strong,{children:"For developers"}),' in your Windows Settings, or search for "Developer" in the Windows search bar, and then enable ',(0,r.jsx)(n.strong,{children:"Developer mode"}),".\nYou might need to restart your computer or Langflow to apply the change."]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},76582:(e,n,t)=>{t.d(n,{Ay:()=>l,RM:()=>o});var r=t(74848),s=t(28453);const o=[];function i(e){const n={a:"a",li:"li",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Docker/Linux system dependencies"}),": If running Langflow in a Docker container on Linux, you might need to install additional system packages for document processing. For more information, see ",(0,r.jsx)(n.a,{href:"/troubleshoot#document-processing-errors-in-docker-containers",children:"Document processing errors in Docker containers"}),"."]}),"\n"]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(i,{...e})}):i(e)}},77995:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>x,frontMatter:()=>d,metadata:()=>r,toc:()=>u});const r=JSON.parse('{"id":"Components/bundles-docling","title":"Docling","description":"Bundles contain custom components that support specific third-party integrations with Langflow.","source":"@site/docs/Components/bundles-docling.mdx","sourceDirName":"Components","slug":"/bundles-docling","permalink":"/bundles-docling","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Docling","slug":"/bundles-docling"},"sidebar":"docs","previous":{"title":"DeepSeek","permalink":"/bundles-deepseek"},"next":{"title":"DuckDuckGo","permalink":"/bundles-duckduckgo"}}');var s=t(74848),o=t(28453),i=(t(11470),t(19365),t(40619)),l=t(40935),c=t(76582);const d={title:"Docling",slug:"/bundles-docling"},a=void 0,h={},u=[{value:"Prerequisites",id:"prerequisites",level:2},...l.RM,...c.RM,{value:"Use Docling components in a flow",id:"use-docling-components-in-a-flow",level:2},{value:"Docling components",id:"docling-components",level:2},{value:"Docling local model",id:"docling-local-model",level:3},{value:"Docling parameters",id:"docling-parameters",level:4},{value:"Docling Serve",id:"docling-serve",level:3},{value:"Docling Serve parameters",id:"docling-serve-parameters",level:4},{value:"Chunk DoclingDocument",id:"chunk-doclingdocument",level:3},{value:"Chunk DoclingDocument parameters",id:"chunk-doclingdocument-parameters",level:4},{value:"Export DoclingDocument",id:"export-doclingdocument",level:3},{value:"Export DoclingDocument parameters",id:"export-doclingdocument-parameters",level:4},{value:"See also",id:"see-also",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)(i.A,{name:"Blocks","aria-hidden":"true"})," ",(0,s.jsx)(n.a,{href:"/components-bundle-components",children:(0,s.jsx)(n.strong,{children:"Bundles"})})," contain custom components that support specific third-party integrations with Langflow."]}),"\n",(0,s.jsxs)(n.p,{children:["Langflow integrates with ",(0,s.jsx)(n.a,{href:"https://docling-project.github.io/docling/",children:"Docling"})," through a bundle of components for parsing and chunking documents."]}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Enable Developer Mode for Windows"}),":"]}),"\n",(0,s.jsx)(l.Ay,{}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Install Docling dependency"}),":\nThe Docling dependency is required to use the Docling components in Langflow."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Langflow Desktop"}),": Set ",(0,s.jsx)(n.code,{children:"LANGFLOW_DOCLING=True"})," in your ",(0,s.jsx)(n.code,{children:".env"})," file to enable Docling dependency installation. For more information, see ",(0,s.jsx)(n.a,{href:"/environment-variables#set-environment-variables-for-langflow-desktop",children:"Set environment variables for Langflow Desktop"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Langflow OSS"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If you installed ",(0,s.jsx)(n.code,{children:"langflow"})," (",(0,s.jsx)(n.code,{children:"uv pip install langflow"}),"), Docling is included automatically through bundled extras."]}),"\n",(0,s.jsxs)(n.li,{children:["If you installed ",(0,s.jsx)(n.code,{children:"langflow-base"})," directly, install Docling with an extra, for example ",(0,s.jsx)(n.code,{children:'uv pip install "langflow-base[docling]"'}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"macOS Intel (x86_64)"}),": Use the ",(0,s.jsx)(n.a,{href:"https://docling-project.github.io/docling/installation/",children:"Docling installation guide"})," to install the Docling dependency."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Earlier versions"}),": Langflow versions earlier than 1.6 don't include the Docling dependency by default."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see ",(0,s.jsx)(n.a,{href:"/install-custom-dependencies",children:"Install custom dependencies"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(c.Ay,{}),"\n",(0,s.jsx)(n.h2,{id:"use-docling-components-in-a-flow",children:"Use Docling components in a flow"}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["To learn more about content extraction with Docling, see the video tutorial ",(0,s.jsx)(n.a,{href:"https://www.youtube.com/watch?v=5DuS6uRI5OM",children:"Docling + Langflow: Document Processing for AI Workflows"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"This example demonstrates how to use Docling components to split a PDF in a flow:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Connect a ",(0,s.jsx)(n.strong,{children:"Docling"})," and an ",(0,s.jsx)(n.strong,{children:"Export DoclingDocument"})," component to a ",(0,s.jsxs)(n.a,{href:"/split-text",children:[(0,s.jsx)(n.strong,{children:"Split Text"})," component"]}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Docling"})," component loads the document, and the ",(0,s.jsx)(n.strong,{children:"Export DoclingDocument"})," component converts the ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," into the format you select. This example converts the document to Markdown, with images represented as placeholders.\nThe ",(0,s.jsx)(n.strong,{children:"Split Text"})," component will split the Markdown into chunks for the vector database to store in the next part of the flow."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Connect a ",(0,s.jsxs)(n.a,{href:"/bundles-chroma#chroma-db",children:[(0,s.jsx)(n.strong,{children:"Chroma DB"})," vector store component"]})," to the ",(0,s.jsx)(n.strong,{children:"Split Text"})," component's ",(0,s.jsx)(n.strong,{children:"Chunks"})," output."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Connect an ",(0,s.jsx)(n.a,{href:"/components-embedding-models",children:"embedding model component"})," to the ",(0,s.jsx)(n.strong,{children:"Chroma DB"})," component's ",(0,s.jsx)(n.strong,{children:"Embedding"})," port and a ",(0,s.jsx)(n.strong,{children:"Chat Output"})," component to view the extracted ",(0,s.jsx)(n.a,{href:"/data-types#dataframe",children:(0,s.jsx)(n.code,{children:"DataFrame"})}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In the embedding model component, select your preferred model, provide credentials, and configure other settings as needed."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Docling and ExportDoclingDocument extracting and splitting text to vector database",src:t(16728).A+"",width:"4000",height:"2060"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add a file to the ",(0,s.jsx)(n.strong,{children:"Docling"})," component."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["To run the flow, click ",(0,s.jsx)(i.A,{name:"Play","aria-hidden":"true"})," ",(0,s.jsx)(n.strong,{children:"Playground"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The chunked document is loaded as vectors into your vector database."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"docling-components",children:"Docling components"}),"\n",(0,s.jsxs)(n.p,{children:["The following sections describe the purpose and configuration options for each component in the ",(0,s.jsx)(n.strong,{children:"Docling"})," bundle."]}),"\n",(0,s.jsx)(n.h3,{id:"docling-local-model",children:"Docling local model"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Docling"})," component ingests documents, and then uses Docling to process them by running a local Docling model."]}),"\n",(0,s.jsxs)(n.p,{children:["It outputs ",(0,s.jsx)(n.code,{children:"files"}),", which is the processed files with ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," data."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-ibm-models",children:"Docling IBM models project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"docling-parameters",children:"Docling parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"files"}),(0,s.jsx)(n.td,{children:"File"}),(0,s.jsx)(n.td,{children:"The files to process."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"pipeline"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Docling pipeline to use (standard, vlm)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"ocr_engine"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"OCR engine to use (easyocr, tesserocr, rapidocr, ocrmac)."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"docling-serve",children:"Docling Serve"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Docling Serve"})," component ingests documents and processes them with a Docling API service rather than a local model."]}),"\n",(0,s.jsxs)(n.p,{children:["It outputs ",(0,s.jsx)(n.code,{children:"files"}),", which is the processed files with ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," data."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-serve",children:"Docling serve project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"docling-serve-parameters",children:"Docling Serve parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"files"}),(0,s.jsx)(n.td,{children:"File"}),(0,s.jsx)(n.td,{children:"The files to process."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"api_url"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"URL of the Docling Serve instance."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"max_concurrency"}),(0,s.jsx)(n.td,{children:"Integer"}),(0,s.jsx)(n.td,{children:"Maximum number of concurrent requests for the server."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"max_poll_timeout"}),(0,s.jsx)(n.td,{children:"Float"}),(0,s.jsx)(n.td,{children:"Maximum waiting time for the document conversion to complete."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"api_headers"}),(0,s.jsx)(n.td,{children:"Dict"}),(0,s.jsx)(n.td,{children:"Optional dictionary of additional headers required for connecting to Docling Serve."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"docling_serve_opts"}),(0,s.jsx)(n.td,{children:"Dict"}),(0,s.jsx)(n.td,{children:"Optional dictionary of additional options for Docling Serve."})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"chunk-doclingdocument",children:"Chunk DoclingDocument"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Chunk DoclingDocument"})," component splits ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," objects into chunks."]}),"\n",(0,s.jsxs)(n.p,{children:["It outputs the chunked documents as a ",(0,s.jsx)(n.a,{href:"/data-types#dataframe",children:(0,s.jsx)(n.code,{children:"DataFrame"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-core",children:"Docling core project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"chunk-doclingdocument-parameters",children:"Chunk DoclingDocument parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"data_inputs"}),(0,s.jsx)(n.td,{children:"Data/DataFrame"}),(0,s.jsx)(n.td,{children:"The data with documents to split in chunks."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"chunker"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Which chunker to use (HybridChunker, HierarchicalChunker)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"provider"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Which tokenizer provider (Hugging Face, OpenAI)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"hf_model_name"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Model name of the tokenizer to use with the HybridChunker when Hugging Face is chosen."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"openai_model_name"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Model name of the tokenizer to use with the HybridChunker when OpenAI is chosen."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"max_tokens"}),(0,s.jsx)(n.td,{children:"Integer"}),(0,s.jsx)(n.td,{children:"Maximum number of tokens for the HybridChunker."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"doc_key"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsxs)(n.td,{children:["The key to use for the ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," column."]})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"export-doclingdocument",children:"Export DoclingDocument"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.strong,{children:"Export DoclingDocument"})," component exports ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," to Markdown, HTML, and other formats."]}),"\n",(0,s.jsxs)(n.p,{children:["It can output the exported data as either ",(0,s.jsx)(n.a,{href:"/data-types#data",children:(0,s.jsx)(n.code,{children:"Data"})})," or ",(0,s.jsx)(n.a,{href:"/data-types#dataframe",children:(0,s.jsx)(n.code,{children:"DataFrame"})}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["For more information, see the ",(0,s.jsx)(n.a,{href:"https://github.com/docling-project/docling-core",children:"Docling core project repository"}),"."]}),"\n",(0,s.jsx)(n.h4,{id:"export-doclingdocument-parameters",children:"Export DoclingDocument parameters"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Name"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"data_inputs"}),(0,s.jsx)(n.td,{children:"Data/DataFrame"}),(0,s.jsx)(n.td,{children:"The data with documents to export."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"export_format"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Select the export format to convert the input (Markdown, HTML, Plaintext, DocTags)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"image_mode"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Specify how images are exported in the output (placeholder, embedded)."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"md_image_placeholder"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Specify the image placeholder for markdown exports."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"md_page_break_placeholder"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsx)(n.td,{children:"Add this placeholder between pages in the markdown output."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"doc_key"}),(0,s.jsx)(n.td,{children:"String"}),(0,s.jsxs)(n.td,{children:["The key to use for the ",(0,s.jsx)(n.code,{children:"DoclingDocument"})," column."]})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsxs)(n.a,{href:"/read-file",children:[(0,s.jsx)(n.strong,{children:"Read File"})," component"]})}),"\n"]})]})}function x(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.a1651604.js b/assets/js/runtime~main.23b610af.js
similarity index 98%
rename from assets/js/runtime~main.a1651604.js
rename to assets/js/runtime~main.23b610af.js
index 1d72ac14d1..860c3620ac 100644
--- a/assets/js/runtime~main.a1651604.js
+++ b/assets/js/runtime~main.23b610af.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({15:"d803fa53",30:"db8c087e",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",253:"bb45d4f9",351:"b9acb8d9",360:"e4dcfb14",375:"3d81f1cf",446:"a4232cf8",534:"76e36fb0",596:"c2e0ed62",598:"db4f3bbd",600:"ee87c775",676:"7631f8d2",681:"ffa0f8b1",750:"33b5ee95",879:"8bee5443",883:"1dfb8d43",889:"08b309e9",953:"bd7e5f4a",956:"03735ec1",957:"c141421f",1006:"47e58a89",1162:"f7e6b9d6",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1408:"2fc7e024",1446:"c78349fc",1490:"0f761898",1567:"22dd74f7",1703:"ff8bad6c",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",1966:"b1582da4",2076:"common",2102:"755d162a",2116:"0f1bef30",2138:"1a4e3797",2272:"ca5faf5d",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2472:"62f97fbe",2475:"1ab69cbd",2565:"622fd833",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2888:"32270e71",2909:"144a43f5",2969:"f0ad3fbb",2990:"1d50b418",3035:"87b7bbd6",3038:"6df123cd",3140:"1a29c454",3147:"c83c70df",3164:"67f2dc6c",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3284:"6398c398",3345:"040305fb",3353:"2b4d41d7",3359:"6d032186",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",3683:"5a0b74d9",3992:"18dc6e4d",4036:"fbcfc90d",4085:"cb17b4e0",4090:"a8ca941b",4173:"d51059db",4263:"9a5e6f6b",4314:"f6a246db",4341:"e1a0f423",4351:"13786dcf",4356:"7b864b08",4384:"622bdc6f",4474:"3db73d6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4644:"d3e886ab",4876:"44691977",4907:"86116998",4919:"ce43de4b",4995:"62266e9d",5045:"f2ec4536",5048:"3c440e04",5110:"e9fe1d10",5144:"944c5f91",5200:"ff7f32ba",5217:"fb0a7a3f",5270:"99931d31",5281:"eeeaec82",5333:"70909872",5343:"1b10d5ba",5397:"eba86ea4",5412:"a6d50436",5627:"e27c2ac1",5660:"1b208f60",5663:"b1379b2b",5734:"cef46d81",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5838:"bbb8ec1d",5903:"69d616f2",5985:"e3536031",6108:"2fed9fb3",6224:"ef9aa223",6256:"6888b60e",6311:"cce672fb",6329:"a7b545c5",6459:"290c78e6",6513:"f13693f0",6538:"719cba95",6559:"7431813e",6601:"81bb6a5c",6801:"acefda8b",6839:"80866714",6999:"d5ec984b",7098:"a7bd4aaa",7118:"7996108c",7243:"5d9d4350",7356:"2ea623f2",7484:"ad01e028",7498:"e4400415",7502:"1a547ad8",7512:"4c09a7b3",7567:"4545d55b",7705:"2b91b6ca",7720:"3bfbe7c9",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7859:"593d9d00",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8090:"6e85978c",8240:"0102a83b",8267:"02f8077b",8268:"a4b6c971",8269:"c7f91cbe",8294:"f2bedfce",8336:"e7fd9095",8381:"147f5874",8392:"20177945",8401:"17896441",8508:"10dd1586",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8611:"0c23d011",8625:"3a9e0e6c",8649:"7de42fc9",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8786:"614cb771",8822:"555ae514",8862:"e87b52ac",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9048:"a94703ab",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9459:"97254d1d",9482:"a9c1003f",9522:"85dc2a2b",9610:"453ae64a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9712:"d8c8efb9",9758:"439d880a",9763:"aece522a",9781:"b796be74",9897:"f0eeb72e",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{15:"d4103b44",30:"d5f6d415",38:"3a4fac77",44:"6310a01a",78:"670c02e8",93:"622a1f88",126:"b234a8d7",129:"df86eec6",253:"35cb6896",351:"2a1a8be1",360:"d17e0b29",375:"b2953002",416:"bba44855",446:"c334deef",534:"795dab19",596:"7c1db8af",598:"5b1053df",600:"2a163757",676:"d9ff9a6d",681:"26c49a71",750:"aa0a84ad",879:"a07813c0",883:"a54ab8cd",889:"df4f3b30",953:"628fe802",956:"657667b5",957:"9350e3d5",1006:"7f9a6238",1083:"38f76bcf",1162:"12f31dbe",1193:"e8a52c78",1303:"cb77a67a",1308:"19ab43fe",1345:"66bea9d5",1408:"88a7766e",1446:"bc1d8376",1490:"7a3af458",1567:"8327ab0e",1703:"81ffc5c2",1861:"080fa5c2",1876:"198d048f",1895:"47c5ca9a",1966:"529c371f",2076:"a147e1aa",2102:"e04c4c2c",2116:"66ba19b7",2138:"b9e35d57",2237:"6bbae924",2272:"fe4b9a67",2278:"dc2f3640",2348:"4cb98c8a",2360:"b8419a64",2394:"2541a8c1",2423:"9a704566",2457:"473c611f",2460:"2ac05431",2469:"0c7b3f7c",2472:"dc63bd2c",2475:"95e18472",2565:"10b561f1",2651:"92578320",2693:"380feae7",2741:"5b07a55d",2752:"9575b8a2",2888:"603c895a",2909:"1e643600",2969:"51e6616d",2990:"244599e4",3035:"b2adcd04",3038:"746b5104",3140:"80d4a164",3147:"80f96c59",3164:"afb9b764",3240:"759d13b9",3247:"d418a16f",3263:"3d0f082d",3284:"36307cad",3345:"5569535b",3353:"f158ad34",3359:"7ff07aa0",3361:"e6042c27",3368:"ae419940",3387:"1e3dfa97",3468:"8ce253e7",3500:"efe030c8",3536:"6c16d55f",3683:"34100144",3992:"73fbda8d",4036:"15898141",4085:"0fd46b78",4090:"62a13c39",4115:"d07268e6",4173:"cff8d83a",4263:"a16a248b",4314:"2202791a",4341:"cf603161",4351:"0d5905f3",4356:"5405f198",4384:"727a5b43",4474:"d742b4c0",4573:"04372438",4612:"195892fa",4614:"e7c5fca9",4644:"75273c72",4754:"78f469df",4876:"227e7868",4907:"5ddf17c6",4919:"e665854e",4995:"ece12ff2",5045:"cca37a20",5048:"b43aa9f1",5110:"456d4c24",5144:"d825c9b4",5200:"dff043ce",5217:"393cf74c",5270:"cd08b649",5281:"4b19c528",5333:"f53e44bc",5343:"5c5f5f29",5397:"a8e80b52",5412:"0694303a",5480:"127c0842",5627:"8aad549c",5660:"57b46a92",5663:"c98a5d9f",5734:"89eb55f3",5739:"2a563c92",5742:"8cdbe811",5757:"c7a308e1",5838:"0993f6d4",5903:"3900f4c5",5985:"bc98da4a",6108:"365e2569",6224:"b8bf79da",6256:"a846f457",6311:"690fa063",6329:"a5b86d52",6459:"2463c0f5",6513:"13baf1e4",6538:"207e3a0a",6559:"91875c22",6601:"66f73f50",6801:"6897bd64",6839:"9c7bfd1a",6990:"2d009052",6999:"64627d58",7098:"e566890f",7118:"204687e4",7243:"930b5bd6",7356:"dc4b5e2f",7484:"87f5d367",7498:"bc1d0911",7502:"f4acd00b",7512:"33f7eed4",7567:"eddb6d25",7705:"16858a84",7720:"24a92496",7807:"9ed7d10f",7824:"20952bb6",7829:"5bfdb1e8",7859:"acd80658",7902:"b293db8d",7964:"b889e714",7968:"8658e795",8090:"3e91a2e5",8240:"d4f52412",8267:"53fed409",8268:"7ed10065",8269:"c3b18741",8287:"7f586667",8294:"e344768e",8336:"4c5df02d",8381:"cdc18a0f",8392:"32fde553",8401:"9b189e06",8508:"e9d8e178",8571:"e11e0da7",8593:"e0584060",8607:"3c24e2c5",8611:"03e3ae2a",8625:"d22660bd",8649:"540f0784",8702:"046f5c3a",8750:"56e811df",8765:"c381c5fb",8786:"f1e32c3e",8822:"77921987",8862:"2272a76a",8913:"fd271a57",8963:"66693d3f",8990:"9bb3ef07",9033:"11737f6f",9048:"fbe061ed",9213:"7dd93294",9227:"a58d07fa",9264:"924f1a5d",9315:"167ce0df",9331:"b33d24ee",9363:"66313398",9459:"bcd99a3a",9482:"d79e999d",9522:"9a97e8c5",9610:"1ecfdc0a",9640:"8da65214",9647:"a3e58221",9674:"078d3e13",9712:"f5eaa1ca",9758:"5f1367ed",9763:"8017d111",9781:"c9db232c",9897:"cb0ce060",9976:"32ddde62",9986:"87289072"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="langflow-docs:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"8401",20177945:"8392",44691977:"4876",56350599:"8593",69079906:"5739",70909872:"5333",80866714:"6839",86116998:"4907",d803fa53:"15",db8c087e:"30",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129",bb45d4f9:"253",b9acb8d9:"351",e4dcfb14:"360","3d81f1cf":"375",a4232cf8:"446","76e36fb0":"534",c2e0ed62:"596",db4f3bbd:"598",ee87c775:"600","7631f8d2":"676",ffa0f8b1:"681","33b5ee95":"750","8bee5443":"879","1dfb8d43":"883","08b309e9":"889",bd7e5f4a:"953","03735ec1":"956",c141421f:"957","47e58a89":"1006",f7e6b9d6:"1162","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345","2fc7e024":"1408",c78349fc:"1446","0f761898":"1490","22dd74f7":"1567",ff8bad6c:"1703","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",b1582da4:"1966",common:"2076","755d162a":"2102","0f1bef30":"2116","1a4e3797":"2138",ca5faf5d:"2272",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","62f97fbe":"2472","1ab69cbd":"2475","622fd833":"2565","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752","32270e71":"2888","144a43f5":"2909",f0ad3fbb:"2969","1d50b418":"2990","87b7bbd6":"3035","6df123cd":"3038","1a29c454":"3140",c83c70df:"3147","67f2dc6c":"3164",b079b393:"3240",f0b67137:"3247","730da84e":"3263","6398c398":"3284","040305fb":"3345","2b4d41d7":"3353","6d032186":"3359","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536","5a0b74d9":"3683","18dc6e4d":"3992",fbcfc90d:"4036",cb17b4e0:"4085",a8ca941b:"4090",d51059db:"4173","9a5e6f6b":"4263",f6a246db:"4314",e1a0f423:"4341","13786dcf":"4351","7b864b08":"4356","622bdc6f":"4384","3db73d6f":"4474",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d3e886ab:"4644",ce43de4b:"4919","62266e9d":"4995",f2ec4536:"5045","3c440e04":"5048",e9fe1d10:"5110","944c5f91":"5144",ff7f32ba:"5200",fb0a7a3f:"5217","99931d31":"5270",eeeaec82:"5281","1b10d5ba":"5343",eba86ea4:"5397",a6d50436:"5412",e27c2ac1:"5627","1b208f60":"5660",b1379b2b:"5663",cef46d81:"5734",aba21aa0:"5742",ad42ff54:"5757",bbb8ec1d:"5838","69d616f2":"5903",e3536031:"5985","2fed9fb3":"6108",ef9aa223:"6224","6888b60e":"6256",cce672fb:"6311",a7b545c5:"6329","290c78e6":"6459",f13693f0:"6513","719cba95":"6538","7431813e":"6559","81bb6a5c":"6601",acefda8b:"6801",d5ec984b:"6999",a7bd4aaa:"7098","7996108c":"7118","5d9d4350":"7243","2ea623f2":"7356",ad01e028:"7484",e4400415:"7498","1a547ad8":"7502","4c09a7b3":"7512","4545d55b":"7567","2b91b6ca":"7705","3bfbe7c9":"7720","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","593d9d00":"7859","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","6e85978c":"8090","0102a83b":"8240","02f8077b":"8267",a4b6c971:"8268",c7f91cbe:"8269",f2bedfce:"8294",e7fd9095:"8336","147f5874":"8381","10dd1586":"8508",da1ad91e:"8571","681e5335":"8607","0c23d011":"8611","3a9e0e6c":"8625","7de42fc9":"8649","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765","614cb771":"8786","555ae514":"8822",e87b52ac:"8862","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033",a94703ab:"9048","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","97254d1d":"9459",a9c1003f:"9482","85dc2a2b":"9522","453ae64a":"9610","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",d8c8efb9:"9712","439d880a":"9758",aece522a:"9763",b796be74:"9781",f0eeb72e:"9897","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise((f,b)=>d=e[a]=[f,b]);f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,[c,t,o]=f,n=0;if(c.some(a=>0!==e[a])){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every(e=>r.O[e](f[o]))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((a,f)=>(r.f[f](e,a),a),[])),r.u=e=>"assets/js/"+({15:"d803fa53",30:"db8c087e",38:"a99a45c9",44:"e3f369d5",78:"b768a3a5",93:"a3702f61",126:"ae70dfbf",129:"dfa3dc90",253:"bb45d4f9",351:"b9acb8d9",360:"e4dcfb14",375:"3d81f1cf",446:"a4232cf8",534:"76e36fb0",596:"c2e0ed62",598:"db4f3bbd",600:"ee87c775",676:"7631f8d2",681:"ffa0f8b1",750:"33b5ee95",879:"8bee5443",883:"1dfb8d43",889:"08b309e9",953:"bd7e5f4a",956:"03735ec1",957:"c141421f",1006:"47e58a89",1162:"f7e6b9d6",1193:"444a6da6",1303:"41d45d82",1308:"ec030ab7",1345:"fe6d5b4f",1408:"2fc7e024",1446:"c78349fc",1490:"0f761898",1567:"22dd74f7",1703:"ff8bad6c",1861:"8ad67c3b",1876:"5c3b537a",1895:"d375ca1d",1966:"b1582da4",2076:"common",2102:"755d162a",2116:"0f1bef30",2138:"1a4e3797",2272:"ca5faf5d",2278:"c4280da9",2348:"f2da9399",2360:"017d425f",2394:"c2ea283c",2423:"19bcb67f",2457:"46abd5bb",2460:"954b19af",2469:"cd086441",2472:"62f97fbe",2475:"1ab69cbd",2565:"622fd833",2651:"8cd0650d",2741:"43ad9ba4",2752:"e14655eb",2888:"32270e71",2909:"144a43f5",2969:"f0ad3fbb",2990:"1d50b418",3035:"87b7bbd6",3038:"6df123cd",3140:"1a29c454",3147:"c83c70df",3164:"67f2dc6c",3240:"b079b393",3247:"f0b67137",3263:"730da84e",3284:"6398c398",3345:"040305fb",3353:"2b4d41d7",3359:"6d032186",3361:"8f633f11",3368:"efa0f9ee",3387:"3d67876e",3468:"c76bd485",3500:"c3c63498",3536:"2eb731bc",3683:"5a0b74d9",3992:"18dc6e4d",4036:"fbcfc90d",4085:"cb17b4e0",4090:"a8ca941b",4173:"d51059db",4263:"9a5e6f6b",4314:"f6a246db",4341:"e1a0f423",4351:"13786dcf",4356:"7b864b08",4384:"622bdc6f",4474:"3db73d6f",4573:"baacc2a1",4612:"6a9eca1a",4614:"e55b8e98",4644:"d3e886ab",4876:"44691977",4907:"86116998",4919:"ce43de4b",4995:"62266e9d",5045:"f2ec4536",5048:"3c440e04",5110:"e9fe1d10",5144:"944c5f91",5200:"ff7f32ba",5217:"fb0a7a3f",5270:"99931d31",5281:"eeeaec82",5333:"70909872",5343:"1b10d5ba",5397:"eba86ea4",5412:"a6d50436",5627:"e27c2ac1",5660:"1b208f60",5663:"b1379b2b",5734:"cef46d81",5739:"69079906",5742:"aba21aa0",5757:"ad42ff54",5838:"bbb8ec1d",5903:"69d616f2",5985:"e3536031",6108:"2fed9fb3",6224:"ef9aa223",6256:"6888b60e",6311:"cce672fb",6329:"a7b545c5",6459:"290c78e6",6513:"f13693f0",6538:"719cba95",6559:"7431813e",6601:"81bb6a5c",6801:"acefda8b",6839:"80866714",6999:"d5ec984b",7098:"a7bd4aaa",7118:"7996108c",7243:"5d9d4350",7356:"2ea623f2",7484:"ad01e028",7498:"e4400415",7502:"1a547ad8",7512:"4c09a7b3",7567:"4545d55b",7705:"2b91b6ca",7720:"3bfbe7c9",7807:"1a8a0a64",7824:"2b56b65e",7829:"7c27dc91",7859:"593d9d00",7902:"619c7267",7964:"ff35961a",7968:"9b0af131",8090:"6e85978c",8240:"0102a83b",8267:"02f8077b",8268:"a4b6c971",8269:"c7f91cbe",8294:"f2bedfce",8336:"e7fd9095",8381:"147f5874",8392:"20177945",8401:"17896441",8508:"10dd1586",8571:"da1ad91e",8593:"56350599",8607:"681e5335",8611:"0c23d011",8625:"3a9e0e6c",8649:"7de42fc9",8702:"42962acd",8750:"8a484c94",8765:"1a2eaade",8786:"614cb771",8822:"555ae514",8862:"e87b52ac",8963:"56c23a02",8990:"5f1a63c6",9033:"9f55b2fc",9048:"a94703ab",9213:"62d1268c",9227:"7e40e6b3",9264:"c7f32161",9315:"16faf8bf",9331:"ffcd190c",9363:"f3312674",9459:"97254d1d",9482:"a9c1003f",9522:"85dc2a2b",9610:"453ae64a",9640:"3b25a2ae",9647:"5e95c892",9674:"feac1fba",9712:"d8c8efb9",9758:"439d880a",9763:"aece522a",9781:"b796be74",9897:"f0eeb72e",9976:"230d5fdc",9986:"d1f3cfe5"}[e]||e)+"."+{15:"d4103b44",30:"d5f6d415",38:"3a4fac77",44:"6310a01a",78:"670c02e8",93:"622a1f88",126:"b234a8d7",129:"df86eec6",253:"35cb6896",351:"2a1a8be1",360:"d17e0b29",375:"b2953002",416:"bba44855",446:"c334deef",534:"795dab19",596:"7c1db8af",598:"5b1053df",600:"2a163757",676:"d9ff9a6d",681:"26c49a71",750:"aa0a84ad",879:"ca2cd91a",883:"a54ab8cd",889:"df4f3b30",953:"628fe802",956:"657667b5",957:"9350e3d5",1006:"7f9a6238",1083:"38f76bcf",1162:"12f31dbe",1193:"e8a52c78",1303:"cb77a67a",1308:"19ab43fe",1345:"66bea9d5",1408:"88a7766e",1446:"bc1d8376",1490:"7a3af458",1567:"8327ab0e",1703:"81ffc5c2",1861:"080fa5c2",1876:"198d048f",1895:"47c5ca9a",1966:"529c371f",2076:"a147e1aa",2102:"e04c4c2c",2116:"66ba19b7",2138:"b9e35d57",2237:"6bbae924",2272:"fe4b9a67",2278:"dc2f3640",2348:"4cb98c8a",2360:"b8419a64",2394:"d1929c67",2423:"9a704566",2457:"473c611f",2460:"2ac05431",2469:"0c7b3f7c",2472:"dc63bd2c",2475:"95e18472",2565:"10b561f1",2651:"92578320",2693:"380feae7",2741:"5b07a55d",2752:"9575b8a2",2888:"603c895a",2909:"1e643600",2969:"51e6616d",2990:"244599e4",3035:"b2adcd04",3038:"746b5104",3140:"80d4a164",3147:"80f96c59",3164:"afb9b764",3240:"759d13b9",3247:"d418a16f",3263:"3d0f082d",3284:"36307cad",3345:"5569535b",3353:"f158ad34",3359:"7ff07aa0",3361:"e6042c27",3368:"ae419940",3387:"1e3dfa97",3468:"8ce253e7",3500:"efe030c8",3536:"6c16d55f",3683:"34100144",3992:"73fbda8d",4036:"15898141",4085:"0fd46b78",4090:"62a13c39",4115:"d07268e6",4173:"cff8d83a",4263:"a16a248b",4314:"2202791a",4341:"cf603161",4351:"0d5905f3",4356:"5405f198",4384:"727a5b43",4474:"d742b4c0",4573:"04372438",4612:"195892fa",4614:"e7c5fca9",4644:"75273c72",4754:"78f469df",4876:"227e7868",4907:"5ddf17c6",4919:"e665854e",4995:"ece12ff2",5045:"cca37a20",5048:"b43aa9f1",5110:"456d4c24",5144:"d825c9b4",5200:"dff043ce",5217:"393cf74c",5270:"cd08b649",5281:"4b19c528",5333:"f53e44bc",5343:"5c5f5f29",5397:"a8e80b52",5412:"0694303a",5480:"127c0842",5627:"8aad549c",5660:"57b46a92",5663:"c98a5d9f",5734:"89eb55f3",5739:"2a563c92",5742:"8cdbe811",5757:"c7a308e1",5838:"0993f6d4",5903:"3900f4c5",5985:"bc98da4a",6108:"365e2569",6224:"b8bf79da",6256:"a846f457",6311:"690fa063",6329:"a5b86d52",6459:"2463c0f5",6513:"13baf1e4",6538:"207e3a0a",6559:"91875c22",6601:"66f73f50",6801:"ea7dafdc",6839:"9c7bfd1a",6990:"2d009052",6999:"a44842cb",7098:"e566890f",7118:"204687e4",7243:"930b5bd6",7356:"dc4b5e2f",7484:"87f5d367",7498:"bc1d0911",7502:"f4acd00b",7512:"33f7eed4",7567:"eddb6d25",7705:"16858a84",7720:"24a92496",7807:"9ed7d10f",7824:"20952bb6",7829:"5bfdb1e8",7859:"acd80658",7902:"b293db8d",7964:"b889e714",7968:"8658e795",8090:"3e91a2e5",8240:"d4f52412",8267:"53fed409",8268:"7ed10065",8269:"c3b18741",8287:"7f586667",8294:"e344768e",8336:"4c5df02d",8381:"cdc18a0f",8392:"32fde553",8401:"9b189e06",8508:"e9d8e178",8571:"e11e0da7",8593:"e0584060",8607:"3c24e2c5",8611:"03e3ae2a",8625:"d22660bd",8649:"540f0784",8702:"046f5c3a",8750:"56e811df",8765:"c381c5fb",8786:"f1e32c3e",8822:"77921987",8862:"2272a76a",8913:"fd271a57",8963:"66693d3f",8990:"9bb3ef07",9033:"11737f6f",9048:"fbe061ed",9213:"7dd93294",9227:"a58d07fa",9264:"924f1a5d",9315:"167ce0df",9331:"b33d24ee",9363:"66313398",9459:"bcd99a3a",9482:"d79e999d",9522:"9a97e8c5",9610:"1ecfdc0a",9640:"8da65214",9647:"a3e58221",9674:"078d3e13",9712:"f5eaa1ca",9758:"5f1367ed",9763:"8017d111",9781:"c9db232c",9897:"cb0ce060",9976:"32ddde62",9986:"87289072"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="langflow-docs:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach(e=>e(f)),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"8401",20177945:"8392",44691977:"4876",56350599:"8593",69079906:"5739",70909872:"5333",80866714:"6839",86116998:"4907",d803fa53:"15",db8c087e:"30",a99a45c9:"38",e3f369d5:"44",b768a3a5:"78",a3702f61:"93",ae70dfbf:"126",dfa3dc90:"129",bb45d4f9:"253",b9acb8d9:"351",e4dcfb14:"360","3d81f1cf":"375",a4232cf8:"446","76e36fb0":"534",c2e0ed62:"596",db4f3bbd:"598",ee87c775:"600","7631f8d2":"676",ffa0f8b1:"681","33b5ee95":"750","8bee5443":"879","1dfb8d43":"883","08b309e9":"889",bd7e5f4a:"953","03735ec1":"956",c141421f:"957","47e58a89":"1006",f7e6b9d6:"1162","444a6da6":"1193","41d45d82":"1303",ec030ab7:"1308",fe6d5b4f:"1345","2fc7e024":"1408",c78349fc:"1446","0f761898":"1490","22dd74f7":"1567",ff8bad6c:"1703","8ad67c3b":"1861","5c3b537a":"1876",d375ca1d:"1895",b1582da4:"1966",common:"2076","755d162a":"2102","0f1bef30":"2116","1a4e3797":"2138",ca5faf5d:"2272",c4280da9:"2278",f2da9399:"2348","017d425f":"2360",c2ea283c:"2394","19bcb67f":"2423","46abd5bb":"2457","954b19af":"2460",cd086441:"2469","62f97fbe":"2472","1ab69cbd":"2475","622fd833":"2565","8cd0650d":"2651","43ad9ba4":"2741",e14655eb:"2752","32270e71":"2888","144a43f5":"2909",f0ad3fbb:"2969","1d50b418":"2990","87b7bbd6":"3035","6df123cd":"3038","1a29c454":"3140",c83c70df:"3147","67f2dc6c":"3164",b079b393:"3240",f0b67137:"3247","730da84e":"3263","6398c398":"3284","040305fb":"3345","2b4d41d7":"3353","6d032186":"3359","8f633f11":"3361",efa0f9ee:"3368","3d67876e":"3387",c76bd485:"3468",c3c63498:"3500","2eb731bc":"3536","5a0b74d9":"3683","18dc6e4d":"3992",fbcfc90d:"4036",cb17b4e0:"4085",a8ca941b:"4090",d51059db:"4173","9a5e6f6b":"4263",f6a246db:"4314",e1a0f423:"4341","13786dcf":"4351","7b864b08":"4356","622bdc6f":"4384","3db73d6f":"4474",baacc2a1:"4573","6a9eca1a":"4612",e55b8e98:"4614",d3e886ab:"4644",ce43de4b:"4919","62266e9d":"4995",f2ec4536:"5045","3c440e04":"5048",e9fe1d10:"5110","944c5f91":"5144",ff7f32ba:"5200",fb0a7a3f:"5217","99931d31":"5270",eeeaec82:"5281","1b10d5ba":"5343",eba86ea4:"5397",a6d50436:"5412",e27c2ac1:"5627","1b208f60":"5660",b1379b2b:"5663",cef46d81:"5734",aba21aa0:"5742",ad42ff54:"5757",bbb8ec1d:"5838","69d616f2":"5903",e3536031:"5985","2fed9fb3":"6108",ef9aa223:"6224","6888b60e":"6256",cce672fb:"6311",a7b545c5:"6329","290c78e6":"6459",f13693f0:"6513","719cba95":"6538","7431813e":"6559","81bb6a5c":"6601",acefda8b:"6801",d5ec984b:"6999",a7bd4aaa:"7098","7996108c":"7118","5d9d4350":"7243","2ea623f2":"7356",ad01e028:"7484",e4400415:"7498","1a547ad8":"7502","4c09a7b3":"7512","4545d55b":"7567","2b91b6ca":"7705","3bfbe7c9":"7720","1a8a0a64":"7807","2b56b65e":"7824","7c27dc91":"7829","593d9d00":"7859","619c7267":"7902",ff35961a:"7964","9b0af131":"7968","6e85978c":"8090","0102a83b":"8240","02f8077b":"8267",a4b6c971:"8268",c7f91cbe:"8269",f2bedfce:"8294",e7fd9095:"8336","147f5874":"8381","10dd1586":"8508",da1ad91e:"8571","681e5335":"8607","0c23d011":"8611","3a9e0e6c":"8625","7de42fc9":"8649","42962acd":"8702","8a484c94":"8750","1a2eaade":"8765","614cb771":"8786","555ae514":"8822",e87b52ac:"8862","56c23a02":"8963","5f1a63c6":"8990","9f55b2fc":"9033",a94703ab:"9048","62d1268c":"9213","7e40e6b3":"9227",c7f32161:"9264","16faf8bf":"9315",ffcd190c:"9331",f3312674:"9363","97254d1d":"9459",a9c1003f:"9482","85dc2a2b":"9522","453ae64a":"9610","3b25a2ae":"9640","5e95c892":"9647",feac1fba:"9674",d8c8efb9:"9712","439d880a":"9758",aece522a:"9763",b796be74:"9781",f0eeb72e:"9897","230d5fdc":"9976",d1f3cfe5:"9986"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var b=new Promise((f,b)=>d=e[a]=[f,b]);f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}},"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,[c,t,o]=f,n=0;if(c.some(a=>0!==e[a])){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n
-
+
diff --git a/bundles-agentics.html b/bundles-agentics.html
index d2d148a4c9..1be93ba30b 100644
--- a/bundles-agentics.html
+++ b/bundles-agentics.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-aiml.html b/bundles-aiml.html
index 2bc7bd014d..a25ae674bf 100644
--- a/bundles-aiml.html
+++ b/bundles-aiml.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-altk.html b/bundles-altk.html
index 32e5c64a2d..a9f4eea4e5 100644
--- a/bundles-altk.html
+++ b/bundles-altk.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-amazon.html b/bundles-amazon.html
index af0637f22d..a0d87513b1 100644
--- a/bundles-amazon.html
+++ b/bundles-amazon.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-anthropic.html b/bundles-anthropic.html
index 23f498ef32..57695d5b45 100644
--- a/bundles-anthropic.html
+++ b/bundles-anthropic.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-apify.html b/bundles-apify.html
index f73b6328f7..a282117505 100644
--- a/bundles-apify.html
+++ b/bundles-apify.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-arxiv.html b/bundles-arxiv.html
index f6ff583bc5..bd1b08b17e 100644
--- a/bundles-arxiv.html
+++ b/bundles-arxiv.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-assemblyai.html b/bundles-assemblyai.html
index 7cb93fd56f..95de69298b 100644
--- a/bundles-assemblyai.html
+++ b/bundles-assemblyai.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-azure.html b/bundles-azure.html
index 0d6d61b6b3..7cbceb88e4 100644
--- a/bundles-azure.html
+++ b/bundles-azure.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-baidu.html b/bundles-baidu.html
index dd53e8d5cb..0bdb9848c2 100644
--- a/bundles-baidu.html
+++ b/bundles-baidu.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-bing.html b/bundles-bing.html
index aa6960ee47..dd93ac33bf 100644
--- a/bundles-bing.html
+++ b/bundles-bing.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-cassandra.html b/bundles-cassandra.html
index 2359bfb073..82a36af852 100644
--- a/bundles-cassandra.html
+++ b/bundles-cassandra.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-chroma.html b/bundles-chroma.html
index 722b9bb821..42f093ea88 100644
--- a/bundles-chroma.html
+++ b/bundles-chroma.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-cleanlab.html b/bundles-cleanlab.html
index 21a40feb16..6bd7c9880b 100644
--- a/bundles-cleanlab.html
+++ b/bundles-cleanlab.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-clickhouse.html b/bundles-clickhouse.html
index 7b8e8ff3a9..497496a241 100644
--- a/bundles-clickhouse.html
+++ b/bundles-clickhouse.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-cloudflare.html b/bundles-cloudflare.html
index 09abe9d7cb..9b62929aa3 100644
--- a/bundles-cloudflare.html
+++ b/bundles-cloudflare.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-cohere.html b/bundles-cohere.html
index 0bfc8d167e..77058564b1 100644
--- a/bundles-cohere.html
+++ b/bundles-cohere.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-cometapi.html b/bundles-cometapi.html
index d01f8b69f8..cd8419540d 100644
--- a/bundles-cometapi.html
+++ b/bundles-cometapi.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-composio.html b/bundles-composio.html
index 6a2d272d21..e7e48e494d 100644
--- a/bundles-composio.html
+++ b/bundles-composio.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-couchbase.html b/bundles-couchbase.html
index fb8df8d7b2..ab88a06219 100644
--- a/bundles-couchbase.html
+++ b/bundles-couchbase.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-cuga.html b/bundles-cuga.html
index 563cdfaefe..d7e385dca0 100644
--- a/bundles-cuga.html
+++ b/bundles-cuga.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-datastax.html b/bundles-datastax.html
index da78ce0ec0..37c9e3b757 100644
--- a/bundles-datastax.html
+++ b/bundles-datastax.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-deepseek.html b/bundles-deepseek.html
index ff65e874b1..5edb920ae6 100644
--- a/bundles-deepseek.html
+++ b/bundles-deepseek.html
@@ -25,7 +25,7 @@
-
+
diff --git a/bundles-docling.html b/bundles-docling.html
index 48ae9465bb..bf438ee765 100644
--- a/bundles-docling.html
+++ b/bundles-docling.html
@@ -25,7 +25,7 @@
-
+
@@ -65,16 +65,23 @@ You might need to restart your computer or Langflow to apply the change.
The Docling dependency is required to use the Docling components in Langflow.
-
Langflow version 1.6 and later: The Docling dependency is included by default for all operating systems except macOS Intel (x86_64).
Earlier versions: Langflow versions earlier than 1.6 don't include the Docling dependency.
-For Langflow OSS, install the Docling extra with uv pip install 'langflow[docling]'.
-For Langflow Desktop, add the Docling dependency to Langflow Desktop's requirements.txt.
-For more information, see Install custom dependencies.
+
Langflow OSS:
+
+
If you installed langflow (uv pip install langflow), Docling is included automatically through bundled extras.
+
If you installed langflow-base directly, install Docling with an extra, for example uv pip install "langflow-base[docling]".
Open a new GitHub pull request with your patch against the main branch.
-
Ensure the PR title follows semantic commit conventions. For example, features are feat: add new feature and fixes are fix: correct issue with X.
+
+
Open a GitHub pull request against the active release-X.Y.Z release candidate branch.
+Do not target main.
+For example, if the latest released version is 1.8.0, your pull request should target the release-1.9.0 branch.
+Include a clear title and description.
+
+
+
Ensure the PR title follows semantic commit conventions. For example, features are feat: add new feature and fixes are fix: correct issue with X.
A systemd service configuration file configures Linux system services.
To add environment variables, create or edit a service configuration file and add an override.conf file. This file allows you to override the default environment variables for the service.
Environment variables set in your terminal aren't automatically available to GUI-based applications like Langflow Desktop when you launch them from the Windows or macOS GUI.
-
For Windows, this means any GUI-based app launched from the Start menu, desktop shortcuts, or Windows Explorer.
-
For macOS, this means any GUI-based app launched from Finder, Spotlight, Launchpad, or the Dock.
-
To set environment variables for Langflow Desktop, you need to use specific commands or files, depending on your OS.
-
macOS
Window System Properties
Powershell
Langflow Desktop for macOS cannot automatically use variables set in your terminal, such as those in.zshrc or .bash_profile, when launched from the macOS GUI.
To make environment variables available to GUI apps on macOS, you need to use launchctl with a plist file:
+
To modify environment variables for Langflow Desktop, set environment variables in a Desktop .env file, and then restart the app.
+
macOS
Windows .env file
Windows user environment variables
To modify the macOS .env file, do the following:
-
Create the LaunchAgents directory if it doesn't exist:
-
_10
mkdir -p ~/Library/LaunchAgents
+
Create or edit ~/.langflow/data/.env.
-
In the LaunchAgents directory, create a .plist file called dev.langflow.env.
+
Add your Langflow environment variables, for example:
+
_10
LANGFLOW_LOG_LEVEL=info
_10
LANGFLOW_DOCLING=true
-
Add the following content to dev.langflow.env.plist, and then add, change, or remove Langflow environment variables as needed for your configuration.
-
This example sets multiple environmental variables for all GUI apps launched from the macOS GUI.
-
_21
<?xml version="1.0" encoding="UTF-8"?>
_21
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Langflow Desktop for Windows cannot automatically use variables set in your terminal, such as those defined with set in cmd or $env:VAR=... in PowerShell, when launched from the Windows GUI.
To make environment variables available to the Langflow Desktop app, you must set them at the user or system level using the System Properties interface or the Terminal.
To set environment variables using the System Properties interface, do the following:
+
To modify the Windows .env file, do the following:
-
Press Win + R, enter SystemPropertiesAdvanced, and then press Enter.
+
Create or edit %APPDATA%\com.LangflowDesktop\data\.env.
-
Click Environment Variables.
+
Add your Langflow environment variables, for example:
+
_10
LANGFLOW_LOG_LEVEL=info
_10
LANGFLOW_DOCLING=true
-
Under User variables, click New.
-
tip
To apply the setting to all users, select System variables.
+
Save the file.
-
Enter the name of the Langflow variable you want to set, such as LANGFLOW_CONFIG_DIR, and the desired value, such as C:\Users\your_user\.langflow_config.
-
-
-
Click OK to save the variable.
-
-
-
Repeat until you have set all necessary Langflow environment variables.
-
-
-
Launch or restart Langflow Desktop to apply the environment variables.
-
-
To define environment variables for Windows using PowerShell, do the following:
-
-
Enter the name of the Langflow variable you want to set, such as LANGFLOW_CONFIG_DIR, and the desired value, such as C:\Users\your_user\.langflow_config.
-
To set an environment variable for the current user:
Repeat until you have set all necessary Langflow environment variables.
-
-
-
Launch or restart Langflow Desktop to apply the environment variables.
+
Restart Langflow Desktop.
+
Windows supports two sources for Langflow Desktop environment variables: a Langflow application .env file, and Windows user environment variables.
The .env file at %APPDATA%\com.LangflowDesktop\data\.env is the recommended approach, but
+Windows user variables are useful for single-sourcing API keys between Langflow and other Windows applications.
+If the same variable is defined in both the Langflow application .env file and as a Windows user environment variable, the .env file takes precedence.
To modify the Windows user environment variables, do the following:
+
Press Win + R, enter sysdm.cpl, and then press Enter.
+
Click the Advanced tab, and then click Environment Variables.
+
In User variables, click New.
+
Enter the variable name, such as OPENAI_API_KEY, and its value.
Tool calling is temporarily disabled for the following Google Gemini 3 preview models:
+gemini-3.1-pro-preview, gemini-3-pro-preview, gemini-3-flash-preview, and gemini-3-pro-image-preview.
+
+
+
Docling installation behavior differs between Desktop and OSS
+
In Langflow 1.8.0, Docling behavior depends on how Langflow is installed.
+
For Langflow Desktop installations, you need to set LANGFLOW_DOCLING=True in your .env file to enable Docling dependency installation. For more information, see Set environment variables for Langflow Desktop.
+
For Langflow OSS installations with uv pip install langflow, Docling is included with the Langflow package.
+
For Langflow OSS installations with uv pip install langflow-base, install Docling explicitly as an extra with uv pip install "langflow-base[docling]".