Skip to main content
This page describes a self-hosted PipesHub started with the Docker Compose files in the PipesHub repository. You run every service, so your data stays on infrastructure you control, except for the outbound calls listed under What leaves your deployment.

Where data is stored

Secrets and credentials at rest

  • Settings in the key-value store, including AI model API keys, connector credentials and the token signing secrets, are encrypted with AES-256-GCM. The key is the SHA-256 hash of the SECRET_KEY environment variable. A few non-secret settings, such as service endpoints, are stored as plain text. Storage credentials, such as S3 keys, are encrypted on their own before they are saved.
  • SECRET_KEY is required: the services don’t start without it. Set it to a long random value, keep it safe, and keep it the same across upgrades. Without it, PipesHub can’t decrypt its stored settings.
  • The .env file. Values you set for Docker Compose, such as database passwords, are kept in the .env file on the host as plain text, outside the encrypted key-value store. Restrict access to that file and to any backup that contains it.
  • Passwords are stored as bcrypt hashes. One-time sign-in codes are hashed the same way.
  • OAuth and personal access tokens are stored as hashes, not as the tokens themselves.

Sign-in sessions and tokens

  • After sign-in, the web app receives an access token and a refresh token, which it keeps in the browser’s local storage.
  • Access tokens expire after 24 hours and refresh tokens after 30 days (720 hours) by default. Set ACCESS_TOKEN_EXPIRY and REFRESH_TOKEN_EXPIRY to change this.
  • The signing secrets are generated with 32 random bytes on first start and stored, encrypted, in the key-value store. To rotate them on an existing install, run ./install.sh --rotate-signing-secrets. This signs everyone out.
  • For API and MCP access, use personal access tokens or OAuth 2.0 apps. Both limit what a token can do with scopes.
Search, chat and agents only use records the signed-in user is allowed to see. PipesHub checks the user’s permissions in the graph database before it returns results. If it can’t check them, it shows no results and says why, instead of showing everything. For a connected app, PipesHub syncs each item’s permissions from the source and matches them to PipesHub users by email address. Use the same email for a connector account as for PipesHub. See Connectors.

What leaves your deployment

PipesHub makes outbound calls for the services you set up, for telemetry, and for the few other requests listed here:
  • AI models. Chat sends your question and the content it retrieved to the chat model you configured. Indexing sends file content to your embedding model, and to your chat model to add summaries, topics and categories and to read images and scanned pages. If those models are hosted by a provider, that provider receives the content. Self-hosted models keep it on your network. See AI models.
  • File storage. If you set up S3 or Azure Blob storage, uploaded files go to that bucket or container. You own and control it, so its location sets where those files are held.
  • Connectors. Each connector calls the API of the app it syncs, with the credentials you gave it.
  • Web search. When chat or an agent searches the web, the query goes to the search provider in use, and page reads go to the sites in the results. See Web search.
  • Telemetry. See below.
  • GitHub star count. The workspace menu fetches the PipesHub repository’s star count from api.github.com. This request comes from the user’s browser.
  • Fonts and icons. The web app loads its font and icon font from Google Fonts (fonts.googleapis.com, fonts.gstatic.com). These requests come from the user’s browser.
  • Model downloads. An image without the models built in downloads the default embedding model from Hugging Face on first use. On a host with no internet access, use an image with the models cached and set HF_HUB_OFFLINE=1 and TRANSFORMERS_OFFLINE=1.
The demo data is bundled with PipesHub. Loading it contacts no external service, though indexing it uses your AI models like any other data.

Telemetry

Telemetry is on by default. Every 5 minutes, each PipesHub service sends usage metrics and product events to PipesHub’s metrics collector over HTTPS. Some events identify people:
  • Sign-up and sign-in events include the user’s email address, user ID and organization ID.
  • Workspace creation includes the admin’s email address and full name.
  • Usage metrics, such as user counts and API request counts, are labelled with the organization ID and email domain.
To turn telemetry off, set TELEMETRY_COLLECTION_FLAG=false in your .env file and restart PipesHub. No telemetry code runs in any service while it is off. An admin can also stop sending telemetry from the app: in Workspace → General, under Data collection settings, turn off Enable. The environment variable is the stronger switch, because with it off no telemetry code runs at all.