Langflow with Docker: visual AI workflows and agents (Linux, Windows, Mac)
Before you start
- 20 min read
- 15 to run in terminal
- 7 file contents
Boxes marked Run in terminal are what you type; plain text explains why. Check what you need first

What you get in one minute#
Langflow is a free, open-source tool where you build AI workflows and agents by dragging blocks onto a canvas, testing them in a chat panel, and then calling them from your own apps through an API.
Logo: the official Langflow project (github.com/langflow-ai/langflow)
It suits a chatbot over your own documents, an agent that uses tools, or a quick test of an idea before you write code. Each flow can be exported as JSON or served as an API, and it can use cloud models or a model on your own computer. Be careful: flows run Python code, and the project has a long list of serious security advisories. This guide starts with login on, the image pinned, and the database kept off the network.
| What | Value (official docs, read October 2026) |
|---|---|
| Current version | Langflow 1.13.0, released 22 October 2026 (marked "Latest") |
| Image to pin | langflowai/langflow:1.13.0 (tag checked on Docker Hub, amd64 and arm64) |
| Time needed | About 20 minutes (our estimate, not measured) |
| Hardware | Docs: at least a dual-core CPU and 2 GB RAM, 4 GB or more recommended. The image is about 785 MB to download. We did not measure the running stack. |
| Port | 7860 (Langflow). PostgreSQL stays inside Docker. |
| Licence | MIT (LICENSE in the repository) |
| Official docs | docs.langflow.org and the repository |
At a glance:
- What it is: a visual builder plus a runtime. Build in the browser, test in the Playground, call the flow with an API key.
- Login is the point of this guide. Official Docker images ship with automatic login off, and you must set an admin password. Never turn automatic login on for a server.
- Platforms: Linux server, or Windows and Mac with Docker Desktop. The same Compose file works on all three. (Langflow Desktop for Windows and macOS also exists; this guide covers Docker.)
- Local models: works with Ollama. Prompts then stay on your network.
- Privacy: anonymous usage telemetry is on unless you set
DO_NOT_TRACK. Prompts go to whichever model provider you configure. - Coming from Flowise? See the short note below.
How it fits together#
You reach Langflow through HTTPS, Langflow stores flows in PostgreSQL and its secret key in a folder on the host, and sends prompts to the model you choose.
Drawn for this guide from the official Docker docs. The Caddy step is optional (dashed). Only prompts sent to a cloud model leave your network.
Moving from Flowise? The Flowise team announced on GitHub that the project would be wound down: code freeze on 29 July 2026, repository archived on 13 August 2026, end of life on 31 August 2026 (the announcement). The Apache 2.0 code stays online and anyone may fork it, but the original team will no longer fix security problems. Langflow is a different, actively released project written in Python. We found no official tool that converts Flowise chatflows, so plan to rebuild your flows by hand and rewrite any custom Node.js code. Do not expect a one-click move.
Before you start#
You need Docker with Compose, a few free GB, and an admin password you choose.
Linux server: Docker Engine with the Compose plugin (x86_64 or arm64). Windows and Mac: Docker Desktop, with PowerShell or Terminal. Check Docker on every system:
docker --version docker compose version
Checklist:
- [ ] Docker and Compose installed (the two commands above print versions)
- [ ] At least 2 GB RAM free for the containers (docs minimum; 4 GB recommended)
- [ ] Port 7860 free on the machine
- [ ] A password manager ready for the admin password
- [ ] Config backed up if you already run Langflow (see "Updates and backups")
- [ ] For the HTTPS section only: a domain, DNS pointing at the server, ports 80 and 443 free
Tested by DIY Lab Hub: not yet. The commands come from the official Docker docs, the example Compose file and the release files, read in October 2026. We did not run them.
Step 1: Create the folders#
Langflow keeps its secret key and uploaded files in one config folder. The flows live in PostgreSQL. We use ~/docker_volumes/langflow, as all DIY Lab Hub guides do.
Linux#
On Linux, Docker creates a missing bind-mount folder owned by root and Langflow then fails with a PermissionError. The docs say to create it first and give it to user 1000:
mkdir -p ~/docker_volumes/langflow/{data,backups}
sudo chown -R 1000:0 ~/docker_volumes/langflow/data
cd ~/docker_volumes/langflow
Windows (PowerShell)#
New-Item -ItemType Directory -Force "$HOME\docker_volumes\langflow\data", "$HOME\docker_volumes\langflow\backups" Set-Location "$HOME\docker_volumes\langflow"
Mac (Terminal)#
Same commands as Linux, without the sudo chown line (the docs only ask for it on Linux):
mkdir -p ~/docker_volumes/langflow/{data,backups}
cd ~/docker_volumes/langflow
Check it worked. The folder data exists inside langflow. On Linux, ls -ld data shows owner 1000.
Tip: Docker Desktop on Windows and Mac only shares some folders. Keep this folder under your home directory, as the docs advise for backups.
Step 2: Create the .env file with your passwords#
The Compose file reads three secrets from .env: the admin password, a secret key that encrypts the API keys you save inside Langflow, and the PostgreSQL password. Langflow's docs recommend setting the secret key yourself. Without the admin password, Langflow refuses to start.
Linux#
cd ~/docker_volumes/langflow
umask 077
printf 'LANGFLOW_SUPERUSER=langflow\nLANGFLOW_SUPERUSER_PASSWORD=<CHOOSE_A_LONG_PASSWORD>\n' > .env
python3 -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')" >> .env
python3 -c "from secrets import token_hex; print(f'POSTGRES_PASSWORD={token_hex(16)}')" >> .env
nano .env
Replace <CHOOSE_A_LONG_PASSWORD> with a long password from your password manager, save, and leave nano. The secret-key command is the one from the docs.
Windows (PowerShell)#
Set-Location "$HOME\docker_volumes\langflow"
"LANGFLOW_SUPERUSER=langflow", "LANGFLOW_SUPERUSER_PASSWORD=<CHOOSE_A_LONG_PASSWORD>" | Set-Content -Encoding ascii .env
python -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')" | Add-Content -Encoding ascii .env
python -c "from secrets import token_hex; print(f'POSTGRES_PASSWORD={token_hex(16)}')" | Add-Content -Encoding ascii .env
notepad .env
If python is missing, install it from python.org or make two random strings of at least 32 letters and digits in your password manager and paste them after LANGFLOW_SECRET_KEY= and POSTGRES_PASSWORD=. Edit the password line in Notepad and save.
Mac (Terminal)#
Same commands as Linux, with python3 (it comes with Apple's command line tools). Use open -e .env instead of nano .env if you prefer a text editor window.
Check it worked. No placeholder is left, and (on Linux and Mac) only you can read the file:
grep -c CHOOSE .env chmod 600 .env
The first command should print 0. On Windows, your profile folder is private to your account by default; run Select-String CHOOSE .env and expect no output.
Tip: Use letters and digits in the PostgreSQL password. It goes into a connection URL, where characters such as
@or/break the address. Thetoken_hexcommand above is safe.
Step 3: Write the Compose file and start Langflow#
This is based on the official docker_example file, with five changes: the image is pinned to 1.13.0, the config lives in ./data, port 7860 is published on the local machine only, the PostgreSQL port is not published (the official example publishes 5432 to everyone), and telemetry is switched off. Save it as docker-compose.yml in the langflow folder.
services:
langflow:
image: langflowai/langflow:1.13.0
container_name: langflow
restart: unless-stopped
depends_on:
- postgres
ports:
- "127.0.0.1:7860:7860"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- LANGFLOW_DATABASE_URL=postgresql://langflow:${POSTGRES_PASSWORD}@postgres:5432/langflow
- LANGFLOW_CONFIG_DIR=/app/langflow
- LANGFLOW_AUTO_LOGIN=false
- LANGFLOW_SUPERUSER=${LANGFLOW_SUPERUSER:-langflow}
- LANGFLOW_SUPERUSER_PASSWORD=${LANGFLOW_SUPERUSER_PASSWORD:?set it in .env}
- LANGFLOW_SECRET_KEY=${LANGFLOW_SECRET_KEY:?set it in .env}
- LANGFLOW_ENABLE_SIGNUP=false
- LANGFLOW_NEW_USER_IS_ACTIVE=false
- DO_NOT_TRACK=true
volumes:
- ./data:/app/langflow
postgres:
image: postgres:16-trixie
container_name: langflow-postgres
restart: unless-stopped
environment:
POSTGRES_USER: langflow
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: langflow
volumes:
- langflow-postgres:/var/lib/postgresql/data
volumes:
langflow-postgres:
Notes on the file:
LANGFLOW_ENABLE_SIGNUP=falseandLANGFLOW_NEW_USER_IS_ACTIVE=falsecome from the docs' "authentication enabled" example. Only the superuser adds users, through the API.- PostgreSQL uses a Docker named volume, as in the official example. The backup section dumps it.
postgres:16-trixieis the tag the official file pins.extra_hostslets the container reach a program on the Docker host. Step 4 uses it for Ollama.
Start it:
Linux#
cd ~/docker_volumes/langflow docker compose up -d docker compose ps docker compose logs --tail=50 langflow
Windows (PowerShell)#
Set-Location "$HOME\docker_volumes\langflow" docker compose up -d docker compose ps docker compose logs --tail=50 langflow
Mac (Terminal)#
Same commands as Linux.
Check it worked. The docs say Langflow can take a few minutes to start the first time. Then the health endpoint answers. The docs show this expected answer:
curl http://127.0.0.1:7860/health_check
{"status":"ok","chat":"ok","db":"ok"}
(Expected output from the official API docs, not captured by us. On Windows use curl.exe.) Open http://localhost:7860; you should see a sign-in page, not the builder.
Tip: Use
docker compose up -dto apply changes. If the log saysLANGFLOW_SUPERUSER_PASSWORDis not set,.envis in the wrong folder or has a typo.
Step 4: Sign in and run your first flow#
Sign in as langflow with the password from .env.
- Click New Flow and choose the Simple Agent template: an Agent block connected to chat input and output, a Calculator and a URL tool.
- In the Agent block, click Setup Provider. The docs say to open your profile icon, then Settings, then Model Providers, pick a provider and save. To use a model on your own machine, choose the Ollama provider.
- Click Playground and ask: "I want to add 4 and 4." The Playground shows the agent choosing the Calculator.
Using Ollama. If you do not have it yet, follow our Ollama guide. Inside the Langflow container, localhost means the container itself, so enter the Ollama address as http://host.docker.internal:11434. We combined the rest from the Ollama FAQ and Docker's host-gateway docs and did not test it.
Linux#
Ollama listens only on 127.0.0.1 by default, and the container cannot reach that. The Ollama FAQ says to change the bind address with the OLLAMA_HOST variable. Once it listens beyond the loopback address, your firewall decides who can reach it, so allow only the Docker network.
Windows (PowerShell)#
Docker Desktop resolves host.docker.internal itself. Run Ollama on Windows as usual and enter the address above.
Mac (Terminal)#
Same as Windows: Docker Desktop resolves host.docker.internal. Run Ollama on the Mac and enter the address above.
Check it worked. The model list fills in and the agent answers "8". A reply that names Calculator or evaluate_expression in the Playground means the tool call worked.
Tip: Cloud model keys you paste into Langflow are stored encrypted with
LANGFLOW_SECRET_KEY. If you lose that key, the saved keys cannot be decrypted. Back up thedatafolder.
Step 5: Call your flow from an app with an API key#
Langflow API calls need a key. Create one in Settings then Langflow API Keys then Add New, and copy it; it is shown once. The docs' example:
Linux#
export LANGFLOW_API_KEY="<YOUR_KEY>"
curl --request POST \
--url "http://localhost:7860/api/v1/run/<FLOW_ID>" \
--header "Content-Type: application/json" \
--header "x-api-key: $LANGFLOW_API_KEY" \
--data '{"output_type": "chat", "input_type": "chat", "input_value": "Hello"}'
Windows (PowerShell)#
$env:LANGFLOW_API_KEY = "<YOUR_KEY>"
Invoke-RestMethod -Method Post -Uri "http://localhost:7860/api/v1/run/<FLOW_ID>" `
-Headers @{ "x-api-key" = $env:LANGFLOW_API_KEY } -ContentType "application/json" `
-Body '{"output_type": "chat", "input_type": "chat", "input_value": "Hello"}'
Mac (Terminal)#
Same commands as Linux.
Check it worked. You get a JSON answer. Without the header you get an error: the docs say requests that run a flow need the x-api-key header or query parameter whenever login is on. Find the flow ID in the browser address bar of the flow, or in the flow's API pane.
Tip: Keep the API key in your app's environment, never inside the flow JSON you export or share.
Put it behind HTTPS (with or without Traefik)#
The docs warn: never expose Langflow ports directly to the internet; use a reverse proxy. This section is for a server with a domain. If you only use Langflow on your own computer, skip it. Both routes need a DNS record pointing at the server.
With Traefik#
On a server that already runs Traefik v3 with the Docker provider, add labels and drop the host port.
This assumes an external Docker network called proxy and an entrypoint named https (use yours). Create the network once:
docker network create proxy
In the langflow service of docker-compose.yml, delete the ports: block, add the network and the labels, and declare the network at the bottom of the file:
networks:
- default
- proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.langflow.rule=Host(`langflow.<your-domain>`)"
- "traefik.http.routers.langflow.entrypoints=https"
- "traefik.http.routers.langflow.tls=true"
- "traefik.http.services.langflow.loadbalancer.server.port=7860"
networks:
proxy:
external: true
Then run docker compose up -d.
Check it worked. curl -I https://langflow.<your-domain>/ returns an HTTP status line over HTTPS and the sign-in page opens with a valid certificate.
Without Traefik: Caddy#
Choose this if you have no Traefik. Caddy gets and renews its own certificates.
Caddy's docs describe automatic Let's Encrypt certificates for a public name, and a local certificate (tls internal) for names that only work at home. Run Caddy as a container on every system. First put Langflow on the shared network: add proxy to the langflow service as above (without the labels), delete its ports: block, and run docker network create proxy.
mkdir -p ~/docker_volumes/caddy/{data,config}
cd ~/docker_volumes/caddy
On Windows use New-Item -ItemType Directory -Force "$HOME\docker_volumes\caddy\data", "$HOME\docker_volumes\caddy\config" and Set-Location "$HOME\docker_volumes\caddy". Save this as docker-compose.yml there (caddy:2.11.7 is the latest Caddy release read in October 2026):
services:
caddy:
image: caddy:2.11.7
container_name: caddy
restart: unless-stopped
ports:
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./data:/data
- ./config:/config
networks:
- proxy
networks:
proxy:
external: true
Save this as Caddyfile next to it, for a public domain:
langflow.example.com {
reverse_proxy langflow:7860
}
For a name that only works at home (it must resolve to the server through your router's DNS or a hosts-file entry), use Caddy's own certificate:
langflow.home.arpa {
tls internal
reverse_proxy langflow:7860
}
Start both stacks with docker compose up -d in each folder. A tls internal certificate is trusted only where Caddy's root certificate is installed. Copy it out and install it on each device:
docker exec caddy find /data -name root.crt docker cp caddy:<path-from-find> ./caddy-root.crt
Installing it is OS-specific and not from the Langflow or Caddy docs: on Windows use "Trusted Root Certification Authorities"; on macOS use Keychain Access with "Always Trust"; on Linux use your distribution's CA store.
Check it worked. curl -I https://langflow.example.com/ returns an HTTP status line over HTTPS (use curl.exe on Windows). For a home-only name the browser shows a padlock only after the root certificate is trusted.
Tip: Let's Encrypt needs ports 80 and 443 to reach the server. A certificate error usually means the name in the Caddyfile differs from the DNS record.
Security and testing#
Langflow executes flows that can contain Python code. Treat anyone who can sign in as someone who can run code on the server.
| Control | How |
|---|---|
| Login on | LANGFLOW_AUTO_LOGIN=false plus a long LANGFLOW_SUPERUSER_PASSWORD. With auto-login on, everyone who can reach the server acts as the superuser. |
| Version | Run a current release. 1.13.0 is newer than the fixed version of every advisory listed below. Keep updating; new advisories appeared as late as September 2026. |
| Secret key | Set LANGFLOW_SECRET_KEY to a long random value (the command in Step 2 gives 43 characters) and back it up. |
| Accounts | LANGFLOW_ENABLE_SIGNUP=false; only the superuser adds users, through the Users API. |
| Ports | 7860 on 127.0.0.1 only, or no host port behind a proxy. PostgreSQL has no host port. |
| Files | .env mode 600; backups hold the secret key, so treat them as secrets. |
| Reverse proxy | Set LANGFLOW_RATE_LIMIT_TRUST_PROXY=true only when Langflow sits behind a proxy you control. Docs: never when users can reach Langflow directly. |
The advisories that matter, from the project's GitHub security page (read 30 October 2026):
| Advisory | What went wrong | Fixed in |
|---|---|---|
| CVE-2025-3248 | Unauthenticated code injection in /api/v1/validate/code | 1.3.0 |
| GHSA-vwmf-pq79-vjvx | Unauthenticated remote code execution through the public flow build endpoint | 1.9.0 |
| GHSA-cf6m-vc3m-7cgm | Flows could be run without a key through the webhook | 1.9.1 |
| GHSA-v5ff-9q35-q26f | Unauthenticated code execution through Shareable Playgrounds | 1.9.2 |
| GHSA-w794-rj3p-xv45 | Any user could run commands through the tool-server settings | 1.10.3 |
| GHSA-jxw3-mjmx-3pqm | Weak encryption key when the secret key had under 32 characters | 1.10.1 |
We read the patched versions of these and a few others, not every advisory. Never run a version below 1.10.3.
Quick tests after each change:
cd ~/docker_volumes/langflow docker compose ps docker compose logs --tail=100 langflow curl -I http://127.0.0.1:7860/
On Windows use curl.exe. To prove login is on, call the API without a key; it must refuse.
What leaves the machine. Prompts and any text you feed a flow go to the model provider you configure: nowhere with Ollama on your own network, to the provider's servers with a cloud key. Components such as URL fetch contact the sites you point them at. Langflow sends anonymous usage telemetry through Segment (flow runs, version, platform, database type, auto-login state); the compose file above turns it off with DO_NOT_TRACK=true. Pulling images contacts Docker Hub, and Caddy contacts Let's Encrypt for certificates.
Common mistakes#
These come from the project's security advisories, its issue tracker, the docs' own warnings, and common AI assistant answers.
| Mistake | Why it happens | Do this instead |
|---|---|---|
| Running an old version on a reachable port | Advisory GHSA-vwmf-pq79-vjvx: versions up to 1.8.2 allow unauthenticated code execution; CVE-2025-3248 hit versions below 1.3.0 | Pin 1.13.0 and update when a new release lands |
| Turning on auto-login "to skip the sign-in" | Older tutorials set LANGFLOW_AUTO_LOGIN=true; the docs say everyone who reaches the server then acts as the superuser | Leave it false and set LANGFLOW_SUPERUSER_PASSWORD |
| Publishing PostgreSQL port 5432 | The official docker_example file maps 5432:5432 and uses the password langflow | Do not publish the port; the file in Step 3 keeps it internal |
| Recreating the container and losing flows | Without LANGFLOW_DATABASE_URL or LANGFLOW_SAVE_DB_IN_CONFIG_DIR=true, the SQLite database lives inside the container (docs warning) | Keep PostgreSQL on a volume and LANGFLOW_CONFIG_DIR on a mount, as above |
PermissionError on a Linux bind mount | Docker creates the missing folder as root; Langflow runs as user 1000 | sudo chown -R 1000:0 data before the first start |
| Upgrading an auto-login install to 1.13 and being locked out | 1.13 disables auto-login; the old account has a generated password you never saw | Follow the docs' "Upgrade from auto-login" steps before upgrading, and back up first |
| A short or lost secret key | Advisory GHSA-jxw3-mjmx-3pqm: keys under 32 characters gave weak encryption (fixed in 1.10.1). Without the original key saved credentials cannot be decrypted | Set a 32+ character key, keep it in .env, and back it up |
An unpinned postgres image | Issue 9608: the base system changed under an existing database and PostgreSQL logged a collation mismatch | Use postgres:16-trixie, as the official file now does |
Entering http://localhost:11434 as the Ollama address inside Docker | localhost is the Langflow container, not your computer. Issue 12093 (open) also reports trouble with a non-localhost Ollama address | Use http://host.docker.internal:11434 and check the model list loads |
AI assistants: a docker run line with :latest, LANGFLOW_AUTO_LOGIN=true and admin/admin, or pip install langflow-base followed by a langflow-base command | Assistants copy older tutorials; the docs say 1.12 langflow-base has no langflow-base executable and that images disable auto-login | Use the Compose file in this guide; check any command against docs.langflow.org |
Tip: Before you paste a Langflow command from a forum or a chatbot, look for
AUTO_LOGIN=true,latestand a published 5432. Each one weakens this setup.
Tip: After a start, run
docker compose logs --tail=100 langflow. The sign-in and database errors print there with the exact text.
Tip: Import only flows and components you have read. A component is Python code that runs with the server's rights.
Troubleshooting#
| Problem | Solution |
|---|---|
Page does not load right after up -d | The docs say Langflow can take a few minutes to start. Watch docker compose logs -f langflow. |
| Startup fails about the superuser password | Set LANGFLOW_SUPERUSER_PASSWORD in .env (same folder as the compose file) and run docker compose up -d again. |
PermissionError in the log (Linux) | sudo chown -R 1000:0 ~/docker_volumes/langflow/data, then docker compose up -d. |
| Cannot sign in after an upgrade from auto-login | Do not delete anything. Use the docs' "Recover access after upgrading" steps with a database backup. |
JWSSignatureError or "JWT decoding error" in the log | Reported in issue 9023 (open). The docs say to set the secret key explicitly so every start uses the same key; check LANGFLOW_SECRET_KEY has not changed. |
| Port 7860 already in use | Change the left side of the port mapping, for example 127.0.0.1:7861:7860. |
| Ollama model list stays empty | Test from inside the container: docker compose exec langflow curl -s http://host.docker.internal:11434/api/tags (adjust the host if your Ollama is elsewhere). |
Diagnostic commands: docker compose ps, docker compose logs --tail=200 langflow, docker inspect langflow, and docker stats --no-stream.
Known bugs (open, October 2026)#
- Issue 12093: the Ollama component cannot fetch the model list from a non-localhost address in Docker. Use
host.docker.internalas in Step 4. - Issue 9023: a JWT signature error in a Docker deployment. See the table above.
Updates and backups#
Update. Langflow ships a new version almost every week. Read the release notes, back up first, change the tag in docker-compose.yml, then:
cd ~/docker_volumes/langflow docker compose pull docker compose up -d docker compose logs --tail=100 langflow
On Windows run the same three commands in PowerShell after Set-Location "$HOME\docker_volumes\langflow". A newer version can migrate the database on startup, so the docs say to keep a database backup until the new version passes your checks, and to restore it if you roll back.
Back up. Two things matter: the PostgreSQL database and the data folder (it holds the secret key). The dump runs inside the container and is copied out:
cd ~/docker_volumes/langflow D=$(date +%F) docker compose exec -T postgres sh -c "pg_dump -U langflow langflow | gzip > /tmp/db.sql.gz" docker compose cp postgres:/tmp/db.sql.gz "backups/langflow-db-$D.sql.gz" sudo tar -czf "backups/langflow-data-$D.tar.gz" data sudo chmod 600 backups/*
To run it nightly at 03:00 on Linux or Mac, put these lines in a script backup.sh and add a crontab entry with crontab -e: 0 3 * * * /home/<you>/docker_volumes/langflow/backup.sh (use your own path; on Mac, /Users/<you>/...).
Windows (PowerShell)#
Set-Location "$HOME\docker_volumes\langflow" $d = Get-Date -Format "yyyy-MM-dd" docker compose exec -T postgres sh -c "pg_dump -U langflow langflow | gzip > /tmp/db.sql.gz" docker compose cp postgres:/tmp/db.sql.gz "backups\langflow-db-$d.sql.gz" tar -czf "backups\langflow-data-$d.tar.gz" data
Save those lines as backup.ps1 and schedule it at 03:00 in Task Scheduler, or with schtasks /Create /SC DAILY /ST 03:00 /TN "Langflow backup" /TR "powershell -File $HOME\docker_volumes\langflow\backup.ps1".
Mac (Terminal)#
Same commands as Linux. Replace sudo tar and sudo chmod with plain tar and chmod if you own the folder.
Restore test. Restore the dump into a scratch database, never over the live one:
docker compose cp "backups/langflow-db-<date>.sql.gz" postgres:/tmp/restore.sql.gz docker compose exec -T postgres createdb -U langflow restoretest docker compose exec -T postgres sh -c "gunzip -c /tmp/restore.sql.gz | psql -U langflow -d restoretest -q" docker compose exec -T postgres psql -U langflow -d restoretest -c "\dt" docker compose exec -T postgres dropdb -U langflow restoretest
The \dt line should list Langflow's tables.
Performance and resources#
The docs give a minimum of a dual-core CPU and 2 GB RAM, with 4 GB or more recommended. They publish no figure for the Docker stack, so we give none; measure your own with docker stats. The download is about 785 MB (amd64) or 710 MB (arm64) per Docker Hub for the 1.13.0 tag.
- Smaller image: the docs describe a
baseprofile (langflowai/langflow:base-1.13.0, about 670 MB on Docker Hub, without provider extensions) and an extendedlangflow-allimage. Pick the smallest one that holds the components your flows use. - Monitor:
docker stats langflow langflow-postgres. - Local models: large models need their own memory. Langflow's Ollama page says an error like "model requires more system memory than is available" means you need a smaller model.
- Dev tags: Docker Hub also lists
1.14.0.dev10and similar. Those are development builds; do not use them.
FAQ#
Is Langflow free to use? Yes. The code is MIT licensed. Cloud model providers charge for their own APIs.
Does it need a GPU? No. The docs list no GPU. A GPU matters only for local models in Ollama.
Does it send my data anywhere? Prompts go to the model provider you set. Anonymous telemetry is on unless DO_NOT_TRACK=true. See "What leaves the machine" above.
Why not leave automatic login on at home? Anyone who can reach the page would be the superuser and could run Python inside the container.
What about Langflow Desktop? The docs offer it for Windows and macOS with dependencies included. Some features, such as Shareable Playground and Voice Mode, are missing there. This guide covers the server route.
Sources#
- Langflow release 1.13.0, README, LICENSE, docker_example compose file and image Dockerfile - read October 2026
- Langflow docs (version 1.13.x): Install, Deploy on Docker, Choose a Docker image, API keys and authentication, Quickstart, Environment variables, Telemetry, Ollama bundle, API examples - read October 2026
- Langflow image on Docker Hub (tag
1.13.0checked) - October 2026 - Langflow security advisories - read October 2026
- GitHub issues #9608, #9023, #12093 - read October 2026
- The Future of Flowise - read October 2026
- Caddy release v2.11.7, automatic HTTPS, command line and install - read October 2026
- Ollama FAQ and docker run reference (
--add-host) - read October 2026
Checked against the official docs on 2026-10-30.