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"}}}]},{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"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">dev.langflow.env",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">ProgramArguments",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"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"string",props:{style:{color:"#7EE787"}}},{content:">-c",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"}}}]},{tokens:[{content:" ",props:{style:{color:"#C9D1D9"}}}]},{tokens:[{content:" <",props:{style:{color:"#C9D1D9"}}},{content:"key",props:{style:{color:"#7EE787"}}},{content:">RunAtLoad",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"}}}]},{tokens:[{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).

    -

    For macOS Intel (x86_64), use the Docling installation guide to install the Docling dependency.

    +

    Langflow Desktop: Set LANGFLOW_DOCLING=True in your .env file to enable Docling dependency installation. For more information, see Set environment variables for Langflow Desktop.

  • -

    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]".
    • +
    +
  • +
  • +

    macOS Intel (x86_64): Use the Docling installation guide to install the Docling dependency.

    +
  • +
  • +

    Earlier versions: Langflow versions earlier than 1.6 don't include the Docling dependency by default.

+

For more information, see Install custom dependencies.

    diff --git a/bundles-duckduckgo.html b/bundles-duckduckgo.html index 7c4ec19974..8bf4b009a3 100644 --- a/bundles-duckduckgo.html +++ b/bundles-duckduckgo.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-elastic.html b/bundles-elastic.html index 7ef4de7519..04d0815009 100644 --- a/bundles-elastic.html +++ b/bundles-elastic.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-exa.html b/bundles-exa.html index 9930bedc80..bb3221f1ed 100644 --- a/bundles-exa.html +++ b/bundles-exa.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-faiss.html b/bundles-faiss.html index c3c9061672..9584085c10 100644 --- a/bundles-faiss.html +++ b/bundles-faiss.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-glean.html b/bundles-glean.html index 295edafcc8..ee616aa5f8 100644 --- a/bundles-glean.html +++ b/bundles-glean.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-google.html b/bundles-google.html index 53588f9e30..f1f28a3b5e 100644 --- a/bundles-google.html +++ b/bundles-google.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-groq.html b/bundles-groq.html index 3c978a9297..3ccd331c1b 100644 --- a/bundles-groq.html +++ b/bundles-groq.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-huggingface.html b/bundles-huggingface.html index 830ed2bf8d..5897478fef 100644 --- a/bundles-huggingface.html +++ b/bundles-huggingface.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-ibm.html b/bundles-ibm.html index 713b28bbbe..9670212ab7 100644 --- a/bundles-ibm.html +++ b/bundles-ibm.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-icosacomputing.html b/bundles-icosacomputing.html index 5ae8d77c86..c9a04804db 100644 --- a/bundles-icosacomputing.html +++ b/bundles-icosacomputing.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-langchain.html b/bundles-langchain.html index bd420b3a9d..44ec6b3265 100644 --- a/bundles-langchain.html +++ b/bundles-langchain.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-lite-llm.html b/bundles-lite-llm.html index f046f4b071..0ae8bb4cde 100644 --- a/bundles-lite-llm.html +++ b/bundles-lite-llm.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-lmstudio.html b/bundles-lmstudio.html index fa40e3aaa9..c6637136ca 100644 --- a/bundles-lmstudio.html +++ b/bundles-lmstudio.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-maritalk.html b/bundles-maritalk.html index 016021d2ee..53198ba105 100644 --- a/bundles-maritalk.html +++ b/bundles-maritalk.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-mem0.html b/bundles-mem0.html index ad7e2c8471..6620dfec09 100644 --- a/bundles-mem0.html +++ b/bundles-mem0.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-milvus.html b/bundles-milvus.html index 43f02a95ee..0541b86e5f 100644 --- a/bundles-milvus.html +++ b/bundles-milvus.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-mistralai.html b/bundles-mistralai.html index ee84fd7c3a..97196d6b67 100644 --- a/bundles-mistralai.html +++ b/bundles-mistralai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-mongodb.html b/bundles-mongodb.html index ecf030f706..bae5a0d7ed 100644 --- a/bundles-mongodb.html +++ b/bundles-mongodb.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-notion.html b/bundles-notion.html index ce75f721f8..333d985f36 100644 --- a/bundles-notion.html +++ b/bundles-notion.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-novita.html b/bundles-novita.html index f9aa501385..74baf8248d 100644 --- a/bundles-novita.html +++ b/bundles-novita.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-nvidia.html b/bundles-nvidia.html index 06759eff46..e7483eee02 100644 --- a/bundles-nvidia.html +++ b/bundles-nvidia.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-ollama.html b/bundles-ollama.html index a5f925d194..6e65cf621b 100644 --- a/bundles-ollama.html +++ b/bundles-ollama.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-openai.html b/bundles-openai.html index a4c619667e..71e92159d6 100644 --- a/bundles-openai.html +++ b/bundles-openai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-openrouter.html b/bundles-openrouter.html index 86842573de..0a4ec7d8b7 100644 --- a/bundles-openrouter.html +++ b/bundles-openrouter.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-perplexity.html b/bundles-perplexity.html index aba8734018..d9630f900e 100644 --- a/bundles-perplexity.html +++ b/bundles-perplexity.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-pgvector.html b/bundles-pgvector.html index 7a578c51d1..cf557deb48 100644 --- a/bundles-pgvector.html +++ b/bundles-pgvector.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-pinecone.html b/bundles-pinecone.html index 2fee402ec8..9ae0822575 100644 --- a/bundles-pinecone.html +++ b/bundles-pinecone.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-qdrant.html b/bundles-qdrant.html index 329191a31e..4f4560d761 100644 --- a/bundles-qdrant.html +++ b/bundles-qdrant.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-redis.html b/bundles-redis.html index 908eb37ecb..293c5c1d15 100644 --- a/bundles-redis.html +++ b/bundles-redis.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-sambanova.html b/bundles-sambanova.html index 9548f3bb6a..7ef5a3c5f4 100644 --- a/bundles-sambanova.html +++ b/bundles-sambanova.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-searchapi.html b/bundles-searchapi.html index c98e8b72eb..76b36a397c 100644 --- a/bundles-searchapi.html +++ b/bundles-searchapi.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-serper.html b/bundles-serper.html index f4378da801..ab27f3ae6e 100644 --- a/bundles-serper.html +++ b/bundles-serper.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-supabase.html b/bundles-supabase.html index 3b8ad34f00..bb3555c874 100644 --- a/bundles-supabase.html +++ b/bundles-supabase.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-upstash.html b/bundles-upstash.html index 526eee5f5a..920d44de33 100644 --- a/bundles-upstash.html +++ b/bundles-upstash.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-vectara.html b/bundles-vectara.html index 66b0d6fd9e..dc6b9eb8a8 100644 --- a/bundles-vectara.html +++ b/bundles-vectara.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-vertexai.html b/bundles-vertexai.html index 965d9dc294..177b3d2658 100644 --- a/bundles-vertexai.html +++ b/bundles-vertexai.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-vllm.html b/bundles-vllm.html index 349798c827..12d073f054 100644 --- a/bundles-vllm.html +++ b/bundles-vllm.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-weaviate.html b/bundles-weaviate.html index bba3145182..487fa9f624 100644 --- a/bundles-weaviate.html +++ b/bundles-weaviate.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-wikipedia.html b/bundles-wikipedia.html index f15a81fd1d..24aa2b21d3 100644 --- a/bundles-wikipedia.html +++ b/bundles-wikipedia.html @@ -25,7 +25,7 @@ - + diff --git a/bundles-xai.html b/bundles-xai.html index 6cfa44484c..a1d9dbdb8a 100644 --- a/bundles-xai.html +++ b/bundles-xai.html @@ -25,7 +25,7 @@ - + diff --git a/calculator.html b/calculator.html index 9e949874fa..f23f7c647c 100644 --- a/calculator.html +++ b/calculator.html @@ -25,7 +25,7 @@ - + diff --git a/chat-input-and-output.html b/chat-input-and-output.html index e242ffc099..b8160733b9 100644 --- a/chat-input-and-output.html +++ b/chat-input-and-output.html @@ -25,7 +25,7 @@ - + diff --git a/chat-with-files.html b/chat-with-files.html index 1e3f18107c..85f97edc3a 100644 --- a/chat-with-files.html +++ b/chat-with-files.html @@ -25,7 +25,7 @@ - + diff --git a/chat-with-rag.html b/chat-with-rag.html index cdf8f30bdf..6e397eb214 100644 --- a/chat-with-rag.html +++ b/chat-with-rag.html @@ -25,7 +25,7 @@ - + diff --git a/component-webhook.html b/component-webhook.html index f78d4080b8..2754416f7d 100644 --- a/component-webhook.html +++ b/component-webhook.html @@ -25,7 +25,7 @@ - + diff --git a/components-agents.html b/components-agents.html index 5bfabaeafd..e224a74fbf 100644 --- a/components-agents.html +++ b/components-agents.html @@ -25,7 +25,7 @@ - + diff --git a/components-bundle-components.html b/components-bundle-components.html index d5f676e3c4..b3f12ec4df 100644 --- a/components-bundle-components.html +++ b/components-bundle-components.html @@ -25,7 +25,7 @@ - + diff --git a/components-custom-components.html b/components-custom-components.html index 3a7ad0682b..8287151357 100644 --- a/components-custom-components.html +++ b/components-custom-components.html @@ -25,7 +25,7 @@ - + diff --git a/components-embedding-models.html b/components-embedding-models.html index 5360735ad5..82738ec6fc 100644 --- a/components-embedding-models.html +++ b/components-embedding-models.html @@ -25,7 +25,7 @@ - + diff --git a/components-models.html b/components-models.html index 32ae6c6f3b..a86e9ad3bd 100644 --- a/components-models.html +++ b/components-models.html @@ -25,7 +25,7 @@ - + diff --git a/components-prompts.html b/components-prompts.html index 62dc7bf8c0..40bc420fff 100644 --- a/components-prompts.html +++ b/components-prompts.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-components.html b/concepts-components.html index 680c5b0eee..7692926961 100644 --- a/concepts-components.html +++ b/concepts-components.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-file-management.html b/concepts-file-management.html index 0fc41ba66d..1fecf3875b 100644 --- a/concepts-file-management.html +++ b/concepts-file-management.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-flows-import.html b/concepts-flows-import.html index 748724ae24..5833291b04 100644 --- a/concepts-flows-import.html +++ b/concepts-flows-import.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-flows.html b/concepts-flows.html index 8dc25d5b58..c35a7e4e01 100644 --- a/concepts-flows.html +++ b/concepts-flows.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-overview.html b/concepts-overview.html index a77a17f014..400ac90e09 100644 --- a/concepts-overview.html +++ b/concepts-overview.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-playground.html b/concepts-playground.html index 43e7ee3a6f..f0112b07d3 100644 --- a/concepts-playground.html +++ b/concepts-playground.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-publish.html b/concepts-publish.html index ad882e7fe1..d7785ff1f6 100644 --- a/concepts-publish.html +++ b/concepts-publish.html @@ -25,7 +25,7 @@ - + diff --git a/concepts-voice-mode.html b/concepts-voice-mode.html index 3bf142fbbc..eede1b86c4 100644 --- a/concepts-voice-mode.html +++ b/concepts-voice-mode.html @@ -25,7 +25,7 @@ - + diff --git a/configuration-cli.html b/configuration-cli.html index ba464bd9d7..6e070bf09e 100644 --- a/configuration-cli.html +++ b/configuration-cli.html @@ -25,7 +25,7 @@ - + diff --git a/configuration-custom-database.html b/configuration-custom-database.html index d171037540..68c19fd60a 100644 --- a/configuration-custom-database.html +++ b/configuration-custom-database.html @@ -25,7 +25,7 @@ - + diff --git a/configuration-global-variables.html b/configuration-global-variables.html index e09851dc3d..8f26d61013 100644 --- a/configuration-global-variables.html +++ b/configuration-global-variables.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-bundles.html b/contributing-bundles.html index b33722ad6d..e236c48c50 100644 --- a/contributing-bundles.html +++ b/contributing-bundles.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-community.html b/contributing-community.html index 201771bb15..1d6b946ba5 100644 --- a/contributing-community.html +++ b/contributing-community.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-component-tests.html b/contributing-component-tests.html index 999bdeb368..2c1d6c0a2e 100644 --- a/contributing-component-tests.html +++ b/contributing-component-tests.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-components.html b/contributing-components.html index 7c7514f50b..ec6ce73d48 100644 --- a/contributing-components.html +++ b/contributing-components.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-github-issues.html b/contributing-github-issues.html index 9af1384e47..03e7c7e0d1 100644 --- a/contributing-github-issues.html +++ b/contributing-github-issues.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-how-to-contribute.html b/contributing-how-to-contribute.html index 9c4fa2aee0..0e93bb3e64 100644 --- a/contributing-how-to-contribute.html +++ b/contributing-how-to-contribute.html @@ -25,7 +25,7 @@ - + @@ -242,8 +242,15 @@ This can help you find broken links before creating a PR.

    Open a pull request​

    To submit a pull request, do the following:

      -
    1. Open a new GitHub pull request with your patch against the main branch.
    2. -
    3. Ensure the PR title follows semantic commit conventions. For example, features are feat: add new feature and fixes are fix: correct issue with X.
    4. +
    5. +

      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.

      +
    6. +
    7. +

      Ensure the PR title follows semantic commit conventions. For example, features are feat: add new feature and fixes are fix: correct issue with X.

      +

    Some additional guidance on pull request titles:

      diff --git a/contributing-telemetry.html b/contributing-telemetry.html index 213da437ae..aa93e93bbb 100644 --- a/contributing-telemetry.html +++ b/contributing-telemetry.html @@ -25,7 +25,7 @@ - + diff --git a/contributing-templates.html b/contributing-templates.html index ed7868dcde..d015d2be01 100644 --- a/contributing-templates.html +++ b/contributing-templates.html @@ -25,7 +25,7 @@ - + diff --git a/current-date.html b/current-date.html index d467148f5b..7479745382 100644 --- a/current-date.html +++ b/current-date.html @@ -25,7 +25,7 @@ - + diff --git a/data-operations.html b/data-operations.html index b294f656a7..36e6060318 100644 --- a/data-operations.html +++ b/data-operations.html @@ -25,7 +25,7 @@ - + diff --git a/data-types.html b/data-types.html index 2ec5354b58..89f85a7226 100644 --- a/data-types.html +++ b/data-types.html @@ -25,7 +25,7 @@ - + diff --git a/dataframe-operations.html b/dataframe-operations.html index daa9bed9ec..c8f9445a41 100644 --- a/dataframe-operations.html +++ b/dataframe-operations.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-architecture.html b/deployment-architecture.html index 55fb60d845..1628fd9a6d 100644 --- a/deployment-architecture.html +++ b/deployment-architecture.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-caddyfile.html b/deployment-caddyfile.html index a906e7da86..07764ac026 100644 --- a/deployment-caddyfile.html +++ b/deployment-caddyfile.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-docker.html b/deployment-docker.html index a9669fa339..8bc9d44c8b 100644 --- a/deployment-docker.html +++ b/deployment-docker.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-gcp.html b/deployment-gcp.html index 088ec7ffe4..eb139259bd 100644 --- a/deployment-gcp.html +++ b/deployment-gcp.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-hugging-face-spaces.html b/deployment-hugging-face-spaces.html index bede0c8ab0..98da1e7325 100644 --- a/deployment-hugging-face-spaces.html +++ b/deployment-hugging-face-spaces.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-kubernetes-dev.html b/deployment-kubernetes-dev.html index febcf35021..65e953b940 100644 --- a/deployment-kubernetes-dev.html +++ b/deployment-kubernetes-dev.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-kubernetes-prod.html b/deployment-kubernetes-prod.html index 457eb20d02..07400aff29 100644 --- a/deployment-kubernetes-prod.html +++ b/deployment-kubernetes-prod.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-nginx-ssl.html b/deployment-nginx-ssl.html index 31b43263ca..3b27435ee9 100644 --- a/deployment-nginx-ssl.html +++ b/deployment-nginx-ssl.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-overview.html b/deployment-overview.html index 345409e6d9..e02c2e3a4a 100644 --- a/deployment-overview.html +++ b/deployment-overview.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-prod-best-practices.html b/deployment-prod-best-practices.html index a64d467501..ff894ae751 100644 --- a/deployment-prod-best-practices.html +++ b/deployment-prod-best-practices.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-public-server.html b/deployment-public-server.html index fcb7906185..c116193251 100644 --- a/deployment-public-server.html +++ b/deployment-public-server.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-railway.html b/deployment-railway.html index 4bdd682dea..812497c49b 100644 --- a/deployment-railway.html +++ b/deployment-railway.html @@ -25,7 +25,7 @@ - + diff --git a/deployment-render.html b/deployment-render.html index 6cd96bc7b8..f103499bd3 100644 --- a/deployment-render.html +++ b/deployment-render.html @@ -25,7 +25,7 @@ - + diff --git a/develop-application.html b/develop-application.html index 177d58c938..247662540f 100644 --- a/develop-application.html +++ b/develop-application.html @@ -25,7 +25,7 @@ - + diff --git a/directory.html b/directory.html index e3ae30e41a..27923bf070 100644 --- a/directory.html +++ b/directory.html @@ -25,7 +25,7 @@ - + diff --git a/dynamic-create-data.html b/dynamic-create-data.html index f23afe1328..c6e9387170 100644 --- a/dynamic-create-data.html +++ b/dynamic-create-data.html @@ -25,7 +25,7 @@ - + diff --git a/enterprise-database-guide.html b/enterprise-database-guide.html index 020ab0a701..1d23a73200 100644 --- a/enterprise-database-guide.html +++ b/enterprise-database-guide.html @@ -25,7 +25,7 @@ - + diff --git a/environment-variables.html b/environment-variables.html index eb6b18148e..8067bace2c 100644 --- a/environment-variables.html +++ b/environment-variables.html @@ -25,7 +25,7 @@ - + @@ -109,63 +109,43 @@ If it detects a supported environment variable, then it automatically adopts the

      The .env file is a text file that contains key-value pairs of environment variables.

      Create or edit a .env file in the root directory of your application or Langflow environment, and then add your configuration variables to the file:

      Example: .env

      _29
      DO_NOT_TRACK=True
      _29
      LANGFLOW_AUTO_LOGIN=False
      _29
      LANGFLOW_AUTO_SAVING=True
      _29
      LANGFLOW_AUTO_SAVING_INTERVAL=1000
      _29
      LANGFLOW_BACKEND_ONLY=False
      _29
      LANGFLOW_BUNDLE_URLS=["https://github.com/user/repo/commit/hash"]
      _29
      LANGFLOW_CACHE_TYPE=async
      _29
      LANGFLOW_COMPONENTS_PATH=/path/to/components/
      _29
      LANGFLOW_CONFIG_DIR=/path/to/config/
      _29
      LANGFLOW_DATABASE_URL=postgresql://user:password@localhost:5432/langflow
      _29
      LANGFLOW_DEV=False
      _29
      LANGFLOW_FALLBACK_TO_ENV_VAR=False
      _29
      LANGFLOW_HEALTH_CHECK_MAX_RETRIES=5
      _29
      LANGFLOW_HOST=localhost
      _29
      LANGFLOW_LANGCHAIN_CACHE=InMemoryCache
      _29
      LANGFLOW_MAX_FILE_SIZE_UPLOAD=10000
      _29
      LANGFLOW_MAX_ITEMS_LENGTH=100
      _29
      LANGFLOW_MAX_TEXT_LENGTH=1000
      _29
      LANGFLOW_LOG_LEVEL=error
      _29
      LANGFLOW_OPEN_BROWSER=False
      _29
      LANGFLOW_PORT=7860
      _29
      LANGFLOW_REMOVE_API_KEYS=False
      _29
      LANGFLOW_SAVE_DB_IN_CONFIG_DIR=True
      _29
      LANGFLOW_SECRET_KEY=somesecretkey
      _29
      LANGFLOW_STORE_ENVIRONMENT_VARIABLES=True
      _29
      LANGFLOW_SUPERUSER=adminuser
      _29
      LANGFLOW_SUPERUSER_PASSWORD=adminpass
      _29
      LANGFLOW_WORKER_TIMEOUT=60000
      _29
      LANGFLOW_WORKERS=3

      Set environment variables for Langflow Desktop​

      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.

      -

      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.

        +

        To modify the macOS .env file, do the following:

        1. -

          Create the LaunchAgents directory if it doesn't exist:

          -

          _10
          mkdir -p ~/Library/LaunchAgents

          +

          Create or edit ~/.langflow/data/.env.

        2. -

          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

        3. -

          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">
          _21
          <plist version="1.0">
          _21
          <dict>
          _21
          <key>Label</key>
          _21
          <string>dev.langflow.env</string>
          _21
          <key>ProgramArguments</key>
          _21
          <array>
          _21
          <string>/bin/sh</string>
          _21
          <string>-c</string>
          _21
          <string>
          _21
          launchctl setenv LANGFLOW_CONFIG_DIR /Users/your_user/custom/config ;
          _21
          launchctl setenv LANGFLOW_PORT 7860 ;
          _21
          launchctl setenv LANGFLOW_HOST localhost ;
          _21
          launchctl setenv ARIZE_API_KEY ak-...
          _21
          </string>
          _21
          </array>
          _21
          <key>RunAtLoad</key>
          _21
          <true/>
          _21
          </dict>
          _21
          </plist>

          +

          Save the file.

        4. -

          Load the file with launchctl:

          -

          _10
          launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/dev.langflow.env.plist

          +

          Restart Langflow Desktop.

        5. -

        Supported environment variables​

        The following sections provide information about specific Langflow environment variables.

        diff --git a/get-started-installation.html b/get-started-installation.html index ae883669fc..b9b70f7689 100644 --- a/get-started-installation.html +++ b/get-started-installation.html @@ -25,7 +25,7 @@ - + diff --git a/get-started-quickstart.html b/get-started-quickstart.html index c4b2987697..35b3bdda88 100644 --- a/get-started-quickstart.html +++ b/get-started-quickstart.html @@ -25,7 +25,7 @@ - + diff --git a/guardrails.html b/guardrails.html index a49b78d1b9..ab06199eb9 100644 --- a/guardrails.html +++ b/guardrails.html @@ -25,7 +25,7 @@ - + diff --git a/if-else.html b/if-else.html index 19ecec55a1..850f6b7084 100644 --- a/if-else.html +++ b/if-else.html @@ -25,7 +25,7 @@ - + diff --git a/img/langflow-logo-color-black-solid.svg b/img/langflow-logo-color-black-solid.svg new file mode 100644 index 0000000000..2dae875821 --- /dev/null +++ b/img/langflow-logo-color-black-solid.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/img/langflow-logo-color-blue-bg.svg b/img/langflow-logo-color-blue-bg.svg new file mode 100644 index 0000000000..ef967c6bde --- /dev/null +++ b/img/langflow-logo-color-blue-bg.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index 91a09ba921..d1674ba03b 100644 --- a/index.html +++ b/index.html @@ -25,7 +25,7 @@ - + diff --git a/install-custom-dependencies.html b/install-custom-dependencies.html index c67f777d91..5bdf437a3b 100644 --- a/install-custom-dependencies.html +++ b/install-custom-dependencies.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-arize.html b/integrations-arize.html index 42f3551317..5f1d3cff62 100644 --- a/integrations-arize.html +++ b/integrations-arize.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-instana-traceloop.html b/integrations-instana-traceloop.html index 6414fa6bb3..2bef4bfd58 100644 --- a/integrations-instana-traceloop.html +++ b/integrations-instana-traceloop.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-langfuse.html b/integrations-langfuse.html index c6e893a157..b28a4032eb 100644 --- a/integrations-langfuse.html +++ b/integrations-langfuse.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-langsmith.html b/integrations-langsmith.html index 62da06e359..738eb741af 100644 --- a/integrations-langsmith.html +++ b/integrations-langsmith.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-langwatch.html b/integrations-langwatch.html index 595fc50ed6..2c1b5b4224 100644 --- a/integrations-langwatch.html +++ b/integrations-langwatch.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-openlayer.html b/integrations-openlayer.html index 68ed11d563..f9cd46fbcc 100644 --- a/integrations-openlayer.html +++ b/integrations-openlayer.html @@ -25,7 +25,7 @@ - + diff --git a/integrations-opik.html b/integrations-opik.html index 68fffaebab..f439d750bb 100644 --- a/integrations-opik.html +++ b/integrations-opik.html @@ -25,7 +25,7 @@ - + diff --git a/jwt-authentication.html b/jwt-authentication.html index 4b5931d45a..f4568750c5 100644 --- a/jwt-authentication.html +++ b/jwt-authentication.html @@ -25,7 +25,7 @@ - + diff --git a/knowledge-base.html b/knowledge-base.html index f9c628abc6..4a599b0173 100644 --- a/knowledge-base.html +++ b/knowledge-base.html @@ -25,7 +25,7 @@ - + diff --git a/knowledge.html b/knowledge.html index 7b6eec6614..8b58b2313d 100644 --- a/knowledge.html +++ b/knowledge.html @@ -25,7 +25,7 @@ - + diff --git a/legacy-core-components.html b/legacy-core-components.html index 92c271f53b..ce9511f54e 100644 --- a/legacy-core-components.html +++ b/legacy-core-components.html @@ -25,7 +25,7 @@ - + diff --git a/llm-selector.html b/llm-selector.html index d0be236792..1455b29b07 100644 --- a/llm-selector.html +++ b/llm-selector.html @@ -25,7 +25,7 @@ - + diff --git a/logging.html b/logging.html index ecdd97bb77..79d857a29e 100644 --- a/logging.html +++ b/logging.html @@ -25,7 +25,7 @@ - + diff --git a/loop.html b/loop.html index bc996997fb..80a157a1df 100644 --- a/loop.html +++ b/loop.html @@ -25,7 +25,7 @@ - + diff --git a/luna-for-langflow.html b/luna-for-langflow.html index 3dcb3424aa..fdefa23603 100644 --- a/luna-for-langflow.html +++ b/luna-for-langflow.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-client.html b/mcp-client.html index fe47a7af99..0d0cfb2900 100644 --- a/mcp-client.html +++ b/mcp-client.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-component-astra.html b/mcp-component-astra.html index 1056fc1e7f..41f36bcf65 100644 --- a/mcp-component-astra.html +++ b/mcp-component-astra.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-server.html b/mcp-server.html index 1fab25741c..92eda9240b 100644 --- a/mcp-server.html +++ b/mcp-server.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-tools.html b/mcp-tools.html index f7dbfe8ebf..14613efc8e 100644 --- a/mcp-tools.html +++ b/mcp-tools.html @@ -25,7 +25,7 @@ - + diff --git a/mcp-tutorial.html b/mcp-tutorial.html index b2d2003eb5..917366408d 100644 --- a/mcp-tutorial.html +++ b/mcp-tutorial.html @@ -25,7 +25,7 @@ - + diff --git a/memory.html b/memory.html index 932ec54ad4..cfb7a19246 100644 --- a/memory.html +++ b/memory.html @@ -25,7 +25,7 @@ - + diff --git a/message-history.html b/message-history.html index 624ebf9a11..df0a315960 100644 --- a/message-history.html +++ b/message-history.html @@ -25,7 +25,7 @@ - + diff --git a/mock-data.html b/mock-data.html index 943a76b5b5..c7b2412380 100644 --- a/mock-data.html +++ b/mock-data.html @@ -25,7 +25,7 @@ - + diff --git a/notify-and-listen.html b/notify-and-listen.html index 9101d26554..e26b777ade 100644 --- a/notify-and-listen.html +++ b/notify-and-listen.html @@ -25,7 +25,7 @@ - + diff --git a/parser.html b/parser.html index 17a9aedf68..66bd39ce77 100644 --- a/parser.html +++ b/parser.html @@ -25,7 +25,7 @@ - + diff --git a/python-interpreter.html b/python-interpreter.html index eb4c0a39b6..a3b170e79e 100644 --- a/python-interpreter.html +++ b/python-interpreter.html @@ -25,7 +25,7 @@ - + diff --git a/read-file.html b/read-file.html index e854c88eef..5de1cf8228 100644 --- a/read-file.html +++ b/read-file.html @@ -25,7 +25,7 @@ - + diff --git a/release-notes.html b/release-notes.html index 1e683f9395..25d03db279 100644 --- a/release-notes.html +++ b/release-notes.html @@ -25,7 +25,7 @@ - + @@ -136,6 +136,18 @@ This means that MCP server configurations, including the default Langflow MCP se

      For more information, see Upgrade the Langflow Docker image.

      +
    • +

      Disabled tool calling for Gemini 3 preview models

      +

      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]".

      +

    New features and enhancements​

      @@ -331,7 +343,7 @@ This is expected behavior. -

      Breaking changes​

      +

      Breaking changes​

      • Authentication enforced for Langflow API requests by default

        diff --git a/run-flow.html b/run-flow.html index a9c4e8bd5b..0137efc4de 100644 --- a/run-flow.html +++ b/run-flow.html @@ -25,7 +25,7 @@ - + diff --git a/search.html b/search.html index b57bea4988..2e9a2b7610 100644 --- a/search.html +++ b/search.html @@ -25,7 +25,7 @@ - + diff --git a/security.html b/security.html index 79ec9d3c37..80fed333a6 100644 --- a/security.html +++ b/security.html @@ -25,7 +25,7 @@ - + diff --git a/session-id.html b/session-id.html index b63d9b42e9..0650631f12 100644 --- a/session-id.html +++ b/session-id.html @@ -25,7 +25,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index 9e6daec2a0..9683d9ec99 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.langflow.org/apihttps://docs.langflow.org/api/openapi.jsonhttps://docs.langflow.org/api/workflowhttps://docs.langflow.org/searchhttps://docs.langflow.org/agent-tutorial2026-03-17T16:22:57.000Zhttps://docs.langflow.org/agents2026-03-17T16:22:57.000Zhttps://docs.langflow.org/agents-tools2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-build2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-files2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-flows2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-flows-run2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-keys-and-authentication2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-logs2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-monitor2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-openai-responses2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-projects2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-reference-api-examples2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-request2026-03-17T16:22:57.000Zhttps://docs.langflow.org/api-users2026-03-17T16:22:57.000Zhttps://docs.langflow.org/batch-run2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-agentics2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-aiml2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-altk2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-amazon2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-anthropic2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-apify2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-arxiv2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-assemblyai2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-azure2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-baidu2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-bing2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-cassandra2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-chroma2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-cleanlab2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-clickhouse2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-cloudflare2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-cohere2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-cometapi2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-composio2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-couchbase2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-cuga2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-datastax2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-deepseek2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-docling2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-duckduckgo2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-elastic2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-exa2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-faiss2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-glean2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-google2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-groq2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-huggingface2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-ibm2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-icosacomputing2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-langchain2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-lite-llm2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-lmstudio2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-maritalk2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-mem02026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-milvus2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-mistralai2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-mongodb2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-notion2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-novita2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-nvidia2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-ollama2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-openai2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-openrouter2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-perplexity2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-pgvector2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-pinecone2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-qdrant2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-redis2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-sambanova2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-searchapi2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-serper2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-supabase2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-upstash2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-vectara2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-vertexai2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-vllm2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-weaviate2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-wikipedia2026-03-17T16:22:57.000Zhttps://docs.langflow.org/bundles-xai2026-03-17T16:22:57.000Zhttps://docs.langflow.org/calculator2026-03-17T16:22:57.000Zhttps://docs.langflow.org/chat-input-and-output2026-03-17T16:22:57.000Zhttps://docs.langflow.org/chat-with-files2026-03-17T16:22:57.000Zhttps://docs.langflow.org/chat-with-rag2026-03-17T16:22:57.000Zhttps://docs.langflow.org/component-webhook2026-03-17T16:22:57.000Zhttps://docs.langflow.org/components-agents2026-03-17T16:22:57.000Zhttps://docs.langflow.org/components-bundle-components2026-03-17T16:22:57.000Zhttps://docs.langflow.org/components-custom-components2026-03-17T16:22:57.000Zhttps://docs.langflow.org/components-embedding-models2026-03-17T16:22:57.000Zhttps://docs.langflow.org/components-models2026-03-17T16:22:57.000Zhttps://docs.langflow.org/components-prompts2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-components2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-file-management2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-flows2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-flows-import2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-overview2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-playground2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-publish2026-03-17T16:22:57.000Zhttps://docs.langflow.org/concepts-voice-mode2026-03-17T16:22:57.000Zhttps://docs.langflow.org/configuration-cli2026-03-17T16:22:57.000Zhttps://docs.langflow.org/configuration-custom-database2026-03-17T16:22:57.000Zhttps://docs.langflow.org/configuration-global-variables2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-bundles2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-community2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-component-tests2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-components2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-github-issues2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-how-to-contribute2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-telemetry2026-03-17T16:22:57.000Zhttps://docs.langflow.org/contributing-templates2026-03-17T16:22:57.000Zhttps://docs.langflow.org/current-date2026-03-17T16:22:57.000Zhttps://docs.langflow.org/data-operations2026-03-17T16:22:57.000Zhttps://docs.langflow.org/data-types2026-03-17T16:22:57.000Zhttps://docs.langflow.org/dataframe-operations2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-architecture2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-caddyfile2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-docker2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-gcp2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-kubernetes-dev2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-kubernetes-prod2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-nginx-ssl2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-overview2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-prod-best-practices2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-public-server2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-railway2026-03-17T16:22:57.000Zhttps://docs.langflow.org/deployment-render2026-03-17T16:22:57.000Zhttps://docs.langflow.org/develop-application2026-03-17T16:22:57.000Zhttps://docs.langflow.org/directory2026-03-17T16:22:57.000Zhttps://docs.langflow.org/dynamic-create-data2026-03-17T16:22:57.000Zhttps://docs.langflow.org/enterprise-database-guide2026-03-17T16:22:57.000Zhttps://docs.langflow.org/environment-variables2026-03-17T16:22:57.000Zhttps://docs.langflow.org/get-started-installation2026-03-17T16:22:57.000Zhttps://docs.langflow.org/get-started-quickstart2026-03-17T16:22:57.000Zhttps://docs.langflow.org/guardrails2026-03-17T16:22:57.000Zhttps://docs.langflow.org/if-else2026-03-17T16:22:57.000Zhttps://docs.langflow.org/install-custom-dependencies2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-arize2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-instana-traceloop2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-langfuse2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-langsmith2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-langwatch2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-openlayer2026-03-17T16:22:57.000Zhttps://docs.langflow.org/integrations-opik2026-03-17T16:22:57.000Zhttps://docs.langflow.org/jwt-authentication2026-03-17T16:22:57.000Zhttps://docs.langflow.org/knowledge2026-03-17T16:22:57.000Zhttps://docs.langflow.org/knowledge-base2026-03-17T16:22:57.000Zhttps://docs.langflow.org/legacy-core-components2026-03-17T16:22:57.000Zhttps://docs.langflow.org/llm-selector2026-03-17T16:22:57.000Zhttps://docs.langflow.org/logging2026-03-17T16:22:57.000Zhttps://docs.langflow.org/loop2026-03-17T16:22:57.000Zhttps://docs.langflow.org/luna-for-langflow2026-03-17T16:22:57.000Zhttps://docs.langflow.org/mcp-client2026-03-17T16:22:57.000Zhttps://docs.langflow.org/mcp-component-astra2026-03-17T16:22:57.000Zhttps://docs.langflow.org/mcp-server2026-03-17T16:22:57.000Zhttps://docs.langflow.org/mcp-tools2026-03-17T16:22:57.000Zhttps://docs.langflow.org/mcp-tutorial2026-03-17T16:22:57.000Zhttps://docs.langflow.org/memory2026-03-17T16:22:57.000Zhttps://docs.langflow.org/message-history2026-03-17T16:22:57.000Zhttps://docs.langflow.org/mock-data2026-03-17T16:22:57.000Zhttps://docs.langflow.org/notify-and-listen2026-03-17T16:22:57.000Zhttps://docs.langflow.org/parser2026-03-17T16:22:57.000Zhttps://docs.langflow.org/python-interpreter2026-03-17T16:22:57.000Zhttps://docs.langflow.org/read-file2026-03-17T16:22:57.000Zhttps://docs.langflow.org/release-notes2026-03-17T16:22:57.000Zhttps://docs.langflow.org/run-flow2026-03-17T16:22:57.000Zhttps://docs.langflow.org/security2026-03-17T16:22:57.000Zhttps://docs.langflow.org/session-id2026-03-17T16:22:57.000Zhttps://docs.langflow.org/smart-router2026-03-17T16:22:57.000Zhttps://docs.langflow.org/smart-transform2026-03-17T16:22:57.000Zhttps://docs.langflow.org/split-text2026-03-17T16:22:57.000Zhttps://docs.langflow.org/sql-database2026-03-17T16:22:57.000Zhttps://docs.langflow.org/structured-output2026-03-17T16:22:57.000Zhttps://docs.langflow.org/text-input-and-output2026-03-17T16:22:57.000Zhttps://docs.langflow.org/traces2026-03-17T16:22:57.000Zhttps://docs.langflow.org/troubleshoot2026-03-17T16:22:57.000Zhttps://docs.langflow.org/type-convert2026-03-17T16:22:57.000Zhttps://docs.langflow.org/typescript-client2026-03-17T16:22:57.000Zhttps://docs.langflow.org/url2026-03-17T16:22:57.000Zhttps://docs.langflow.org/web-search2026-03-17T16:22:57.000Zhttps://docs.langflow.org/webhook2026-03-17T16:22:57.000Zhttps://docs.langflow.org/workflow-api2026-03-17T16:22:57.000Zhttps://docs.langflow.org/write-file2026-03-17T16:22:57.000Zhttps://docs.langflow.org/2026-03-17T16:22:57.000Z \ No newline at end of file +https://docs.langflow.org/apihttps://docs.langflow.org/api/openapi.jsonhttps://docs.langflow.org/api/workflowhttps://docs.langflow.org/searchhttps://docs.langflow.org/agent-tutorial2026-04-01T21:11:41.000Zhttps://docs.langflow.org/agents2026-04-01T21:11:41.000Zhttps://docs.langflow.org/agents-tools2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-build2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-files2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-flows2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-flows-run2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-keys-and-authentication2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-logs2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-monitor2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-openai-responses2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-projects2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-reference-api-examples2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-request2026-04-01T21:11:41.000Zhttps://docs.langflow.org/api-users2026-04-01T21:11:41.000Zhttps://docs.langflow.org/batch-run2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-agentics2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-aiml2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-altk2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-amazon2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-anthropic2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-apify2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-arxiv2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-assemblyai2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-azure2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-baidu2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-bing2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-cassandra2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-chroma2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-cleanlab2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-clickhouse2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-cloudflare2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-cohere2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-cometapi2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-composio2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-couchbase2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-cuga2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-datastax2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-deepseek2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-docling2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-duckduckgo2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-elastic2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-exa2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-faiss2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-glean2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-google2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-groq2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-huggingface2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-ibm2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-icosacomputing2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-langchain2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-lite-llm2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-lmstudio2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-maritalk2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-mem02026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-milvus2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-mistralai2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-mongodb2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-notion2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-novita2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-nvidia2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-ollama2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-openai2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-openrouter2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-perplexity2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-pgvector2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-pinecone2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-qdrant2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-redis2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-sambanova2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-searchapi2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-serper2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-supabase2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-upstash2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-vectara2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-vertexai2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-vllm2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-weaviate2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-wikipedia2026-04-01T21:11:41.000Zhttps://docs.langflow.org/bundles-xai2026-04-01T21:11:41.000Zhttps://docs.langflow.org/calculator2026-04-01T21:11:41.000Zhttps://docs.langflow.org/chat-input-and-output2026-04-01T21:11:41.000Zhttps://docs.langflow.org/chat-with-files2026-04-01T21:11:41.000Zhttps://docs.langflow.org/chat-with-rag2026-04-01T21:11:41.000Zhttps://docs.langflow.org/component-webhook2026-04-01T21:11:41.000Zhttps://docs.langflow.org/components-agents2026-04-01T21:11:41.000Zhttps://docs.langflow.org/components-bundle-components2026-04-01T21:11:41.000Zhttps://docs.langflow.org/components-custom-components2026-04-01T21:11:41.000Zhttps://docs.langflow.org/components-embedding-models2026-04-01T21:11:41.000Zhttps://docs.langflow.org/components-models2026-04-01T21:11:41.000Zhttps://docs.langflow.org/components-prompts2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-components2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-file-management2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-flows2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-flows-import2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-overview2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-playground2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-publish2026-04-01T21:11:41.000Zhttps://docs.langflow.org/concepts-voice-mode2026-04-01T21:11:41.000Zhttps://docs.langflow.org/configuration-cli2026-04-01T21:11:41.000Zhttps://docs.langflow.org/configuration-custom-database2026-04-01T21:11:41.000Zhttps://docs.langflow.org/configuration-global-variables2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-bundles2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-community2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-component-tests2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-components2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-github-issues2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-how-to-contribute2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-telemetry2026-04-01T21:11:41.000Zhttps://docs.langflow.org/contributing-templates2026-04-01T21:11:41.000Zhttps://docs.langflow.org/current-date2026-04-01T21:11:41.000Zhttps://docs.langflow.org/data-operations2026-04-01T21:11:41.000Zhttps://docs.langflow.org/data-types2026-04-01T21:11:41.000Zhttps://docs.langflow.org/dataframe-operations2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-architecture2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-caddyfile2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-docker2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-gcp2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-hugging-face-spaces2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-kubernetes-dev2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-kubernetes-prod2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-nginx-ssl2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-overview2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-prod-best-practices2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-public-server2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-railway2026-04-01T21:11:41.000Zhttps://docs.langflow.org/deployment-render2026-04-01T21:11:41.000Zhttps://docs.langflow.org/develop-application2026-04-01T21:11:41.000Zhttps://docs.langflow.org/directory2026-04-01T21:11:41.000Zhttps://docs.langflow.org/dynamic-create-data2026-04-01T21:11:41.000Zhttps://docs.langflow.org/enterprise-database-guide2026-04-01T21:11:41.000Zhttps://docs.langflow.org/environment-variables2026-04-01T21:11:41.000Zhttps://docs.langflow.org/get-started-installation2026-04-01T21:11:41.000Zhttps://docs.langflow.org/get-started-quickstart2026-04-01T21:11:41.000Zhttps://docs.langflow.org/guardrails2026-04-01T21:11:41.000Zhttps://docs.langflow.org/if-else2026-04-01T21:11:41.000Zhttps://docs.langflow.org/install-custom-dependencies2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-arize2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-instana-traceloop2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-langfuse2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-langsmith2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-langwatch2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-openlayer2026-04-01T21:11:41.000Zhttps://docs.langflow.org/integrations-opik2026-04-01T21:11:41.000Zhttps://docs.langflow.org/jwt-authentication2026-04-01T21:11:41.000Zhttps://docs.langflow.org/knowledge2026-04-01T21:11:41.000Zhttps://docs.langflow.org/knowledge-base2026-04-01T21:11:41.000Zhttps://docs.langflow.org/legacy-core-components2026-04-01T21:11:41.000Zhttps://docs.langflow.org/llm-selector2026-04-01T21:11:41.000Zhttps://docs.langflow.org/logging2026-04-01T21:11:41.000Zhttps://docs.langflow.org/loop2026-04-01T21:11:41.000Zhttps://docs.langflow.org/luna-for-langflow2026-04-01T21:11:41.000Zhttps://docs.langflow.org/mcp-client2026-04-01T21:11:41.000Zhttps://docs.langflow.org/mcp-component-astra2026-04-01T21:11:41.000Zhttps://docs.langflow.org/mcp-server2026-04-01T21:11:41.000Zhttps://docs.langflow.org/mcp-tools2026-04-01T21:11:41.000Zhttps://docs.langflow.org/mcp-tutorial2026-04-01T21:11:41.000Zhttps://docs.langflow.org/memory2026-04-01T21:11:41.000Zhttps://docs.langflow.org/message-history2026-04-01T21:11:41.000Zhttps://docs.langflow.org/mock-data2026-04-01T21:11:41.000Zhttps://docs.langflow.org/notify-and-listen2026-04-01T21:11:41.000Zhttps://docs.langflow.org/parser2026-04-01T21:11:41.000Zhttps://docs.langflow.org/python-interpreter2026-04-01T21:11:41.000Zhttps://docs.langflow.org/read-file2026-04-01T21:11:41.000Zhttps://docs.langflow.org/release-notes2026-04-01T21:11:41.000Zhttps://docs.langflow.org/run-flow2026-04-01T21:11:41.000Zhttps://docs.langflow.org/security2026-04-01T21:11:41.000Zhttps://docs.langflow.org/session-id2026-04-01T21:11:41.000Zhttps://docs.langflow.org/smart-router2026-04-01T21:11:41.000Zhttps://docs.langflow.org/smart-transform2026-04-01T21:11:41.000Zhttps://docs.langflow.org/split-text2026-04-01T21:11:41.000Zhttps://docs.langflow.org/sql-database2026-04-01T21:11:41.000Zhttps://docs.langflow.org/structured-output2026-04-01T21:11:41.000Zhttps://docs.langflow.org/text-input-and-output2026-04-01T21:11:41.000Zhttps://docs.langflow.org/traces2026-04-01T21:11:41.000Zhttps://docs.langflow.org/troubleshoot2026-04-01T21:11:41.000Zhttps://docs.langflow.org/type-convert2026-04-01T21:11:41.000Zhttps://docs.langflow.org/typescript-client2026-04-01T21:11:41.000Zhttps://docs.langflow.org/url2026-04-01T21:11:41.000Zhttps://docs.langflow.org/web-search2026-04-01T21:11:41.000Zhttps://docs.langflow.org/webhook2026-04-01T21:11:41.000Zhttps://docs.langflow.org/workflow-api2026-04-01T21:11:41.000Zhttps://docs.langflow.org/write-file2026-04-01T21:11:41.000Zhttps://docs.langflow.org/2026-04-01T21:11:41.000Z \ No newline at end of file diff --git a/smart-router.html b/smart-router.html index acccb0aa98..9f20e100a5 100644 --- a/smart-router.html +++ b/smart-router.html @@ -25,7 +25,7 @@ - + diff --git a/smart-transform.html b/smart-transform.html index bbdb35bf55..705644ad6e 100644 --- a/smart-transform.html +++ b/smart-transform.html @@ -25,7 +25,7 @@ - + diff --git a/split-text.html b/split-text.html index 8ae0ca8e17..8d149721c7 100644 --- a/split-text.html +++ b/split-text.html @@ -25,7 +25,7 @@ - + diff --git a/sql-database.html b/sql-database.html index c1fa78101c..1f0097eb3f 100644 --- a/sql-database.html +++ b/sql-database.html @@ -25,7 +25,7 @@ - + diff --git a/structured-output.html b/structured-output.html index 8e3f43a507..b95d17d8ee 100644 --- a/structured-output.html +++ b/structured-output.html @@ -25,7 +25,7 @@ - + diff --git a/text-input-and-output.html b/text-input-and-output.html index 03985a2aa7..0455c77b55 100644 --- a/text-input-and-output.html +++ b/text-input-and-output.html @@ -25,7 +25,7 @@ - + diff --git a/traces.html b/traces.html index c702633fbe..7349d2056c 100644 --- a/traces.html +++ b/traces.html @@ -25,7 +25,7 @@ - + diff --git a/troubleshoot.html b/troubleshoot.html index eba5ca080e..c68a6bd984 100644 --- a/troubleshoot.html +++ b/troubleshoot.html @@ -25,7 +25,7 @@ - + diff --git a/type-convert.html b/type-convert.html index 62e78e4cf5..b0b16764aa 100644 --- a/type-convert.html +++ b/type-convert.html @@ -25,7 +25,7 @@ - + diff --git a/typescript-client.html b/typescript-client.html index 4109ed8282..367500b282 100644 --- a/typescript-client.html +++ b/typescript-client.html @@ -25,7 +25,7 @@ - + diff --git a/url.html b/url.html index d7ca4b608a..e8a9363043 100644 --- a/url.html +++ b/url.html @@ -25,7 +25,7 @@ - + diff --git a/web-search.html b/web-search.html index 2fa8b8f221..b39e700786 100644 --- a/web-search.html +++ b/web-search.html @@ -25,7 +25,7 @@ - + diff --git a/webhook.html b/webhook.html index 22fa5b785e..8834527cd8 100644 --- a/webhook.html +++ b/webhook.html @@ -25,7 +25,7 @@ - + diff --git a/workflow-api.html b/workflow-api.html index 67fd1cba77..efe0cbbf30 100644 --- a/workflow-api.html +++ b/workflow-api.html @@ -25,7 +25,7 @@ - + diff --git a/write-file.html b/write-file.html index ee385e66a6..ff01a01117 100644 --- a/write-file.html +++ b/write-file.html @@ -25,7 +25,7 @@ - +