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

  1. Credentials: add your model provider API key once (it’s stored encrypted).
  2. New chatflow: add a Chat Model (OpenAI, Anthropic, Gemini, Ollama, or any OpenAI-compatible endpoint such as LocalAI).
  3. Add a Document Loader (PDF, website, folder) and a Text Splitter.
  4. Add Embeddings and a Vector Store (in-memory for tests; Qdrant, Chroma, Pinecone or Postgres pgvector for real use). See vector databases.
  5. Connect them to a Conversational Retrieval QA Chain (or a Tool Agent with a retriever tool), then upsert the documents.
  6. 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.

  • AI
  • Self-Hosting
  • Docker