Flowise is an open-source, drag-and-drop builder for LLM applications. You connect nodes (chat models, prompts, memory, document loaders, vector stores, tools) on a canvas to build chatflows (RAG chatbots, Q&A over documents) and agentflows (multi-step agents that use tools). Each flow is instantly available as an API and an embeddable chat widget. It runs comfortably on a small VPS when the models are hosted elsewhere.
Similar tools: Dify (more of a full platform), n8n (general automation with AI nodes).
Requirements
- 1–2 vCPU and 2 GB RAM for Flowise itself, using hosted model APIs.
- More resources if you also run local models or a vector database on the same server.
- Docker. See install Docker.
Install with Docker Compose
# /opt/flowise/compose.yaml
services:
flowise:
image: flowiseai/flowise:latest
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
PORT: 3000
DATABASE_TYPE: postgres
DATABASE_HOST: db
DATABASE_PORT: 5432
DATABASE_NAME: flowise
DATABASE_USER: flowise
DATABASE_PASSWORD: change-me
SECRETKEY_PATH: /root/.flowise
LOG_PATH: /root/.flowise/logs
BLOB_STORAGE_PATH: /root/.flowise/storage
volumes:
- ./flowise:/root/.flowise
depends_on: [db]
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: flowise
POSTGRES_USER: flowise
POSTGRES_PASSWORD: change-me
volumes:
- ./pgdata:/var/lib/postgresql/data
cd /opt/flowise && docker compose up -d
Without the database settings, Flowise uses SQLite in ~/.flowise, which is fine for one user. Either way, mount /root/.flowise: it holds the encryption key for stored credentials. Lose it, and saved API keys can’t be decrypted.
Secure the login
Recent Flowise versions ask you to create an admin account on first visit. Do that immediately after starting. Older versions used FLOWISE_USERNAME and FLOWISE_PASSWORD environment variables. Check the docs for your version. Never leave the editor reachable without authentication: flows contain your API keys, and custom tool nodes can run code.
HTTPS with Nginx
server {
server_name flowise.example.com;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_read_timeout 300s;
}
# listen 443 ssl; certbot --nginx -d flowise.example.com
}
See Nginx reverse proxy and Let’s Encrypt.
Build a first RAG chatflow
- Credentials: add your model provider API key once (it’s stored encrypted).
- New chatflow: add a Chat Model (OpenAI, Anthropic, Gemini, Ollama, or any OpenAI-compatible endpoint such as LocalAI).
- Add a Document Loader (PDF, website, folder) and a Text Splitter.
- Add Embeddings and a Vector Store (in-memory for tests; Qdrant, Chroma, Pinecone or Postgres pgvector for real use). See vector databases.
- Connect them to a Conversational Retrieval QA Chain (or a Tool Agent with a retriever tool), then upsert the documents.
- Test in the chat panel.
Use it from your app
Each flow has an API endpoint:
curl https://flowise.example.com/api/v1/prediction/<flow-id> \
-H "Authorization: Bearer <flow API key>" -H "Content-Type: application/json" \
-d '{"question": "What is our refund policy?"}'
Assign an API key to the flow so the endpoint isn’t public. For websites, the embed snippet adds a chat bubble. Set allowed domains and rate limits for public chatbots, so bots can’t run up your model bill. See rate limiting.
Backups and updates
- Back up
./flowise(key, uploads, logs) and the PostgreSQL database (pg_dump). You can also export flows as JSON from the UI. See pg_dump. - Update with
docker compose pull && docker compose up -d. Back up first, and read the release notes. See updating self-hosted apps.
Quick reference
| Item | Value |
|---|---|
| Port | 3000 |
| Data + encryption key | /root/.flowise (mount it) |
| Database | SQLite (default) or DATABASE_TYPE=postgres |
| Flow API | /api/v1/prediction/<id> |
| Streaming via Nginx | proxy_buffering off |
Related: AnythingLLM and API security.