Get started

Install

Install Personify locally with Docker Postgres, npm setup scripts, a Python venv, and the vault CLI.

Personify runs entirely on your machine. The local install has four moving parts, and the repo's npm scripts wire them together:

  1. Postgres 17 + pgvector in one Docker container.
  2. A generated local .env file with a database password.
  3. A Python 3.11+ virtualenv with the personify package installed editable.
  4. The Svelte UI + FastAPI backend, started together for local use.

Prerequisites

RequirementWhy
Docker Desktop or Docker Engine + compose pluginRuns the Postgres + pgvector container
Node.js 20+ with npmRuns the setup/start scripts
Python 3.11 or newerThe backend package and CLI
gitTo clone the repo
~2 GB free disk for a small vaultGrows with your exports, raw files, and database volume

Verify the basics:

bash
docker --version
node --version
npm --version
python --version
git --version

1. Clone and run setup

bash
git clone https://github.com/trigga6006/personify.git
cd personify
npm run setup

The setup script is intentionally boring:

  • npm run setup:env writes .env if it does not exist, using a generated local database password.
  • .venv is created if missing.
  • Python dependencies are installed with pip install -e ".[dev]".
  • Frontend dependencies are installed under frontend/node_modules.
  • docker compose up -d starts the personify-db container.
  • vault init initializes the default personal vault.

The setup command is safe to rerun. It will not overwrite an existing .env unless you explicitly run npm run setup:env -- --force.

2. Start the local app

bash
npm start

This starts the full local stack:

  • Docker/Postgres stays up or is started if needed.
  • FastAPI runs at http://127.0.0.1:18765.
  • The Vite UI runs at http://localhost:18766.

Open http://localhost:18766.

Press Ctrl-C in the terminal to stop FastAPI and Vite. The Postgres container keeps running so your data remains available next time.

Docker/Postgres details

The shipped docker-compose.yml uses pgvector/pgvector:pg17. Postgres is published only on 127.0.0.1:5544, not all network interfaces.

The container is named personify-db. One Docker container can hold multiple vault databases:

Vault namePostgres databaseFilesystem root
personalpersonify./vault
code-corpuspersonify_code_corpus./vaults/code-corpus
workpersonify_work./vaults/work

The postgres database is used briefly as the admin database when Personify checks for or creates a vault database.

Warning

docker compose down -v removes the named volume that backs Postgres. Your database rows will be gone. Use docker compose stop or plain docker compose down when you only want to stop the container.

Optional embeddings

The base setup gives you full-text search. Semantic search requires the optional embeddings extra:

bash
.\.venv\Scripts\python -m pip install -e ".[embeddings]"   # Windows PowerShell
python -m pip install -e ".[embeddings]"                   # activated venv on macOS/Linux

The default model is sentence-transformers/all-MiniLM-L6-v2 (384 dimensions). It downloads on first use into your Hugging Face cache.

Environment variables

Personify reads configuration from the environment or .env in the repo root. The generated .env matches the Docker Compose setup.

VariableExample/defaultWhat it controls
PERSONIFY_DB_USERpersonifyPostgres user created for fresh Docker volumes
PERSONIFY_DB_PASSWORDgenerated by npm run setup:envLocal Postgres password
PERSONIFY_DB_NAMEpersonifyInitial database for fresh Docker volumes
PERSONIFY_DB_URLpostgresql+psycopg://personify:<generated>@127.0.0.1:5544/personifyActive vault connection string
PERSONIFY_VAULT_DIR./vaultOn-disk directory for the default vault
PERSONIFY_VAULT_NAMEpersonalName of the default vault
PERSONIFY_VAULTS_DIR./vaultsParent directory for named vaults
PERSONIFY_API_HOST127.0.0.1FastAPI bind host
PERSONIFY_API_PORT18765FastAPI bind port
PERSONIFY_EMBED_MODELsentence-transformers/all-MiniLM-L6-v2Embedding model id
PERSONIFY_EMBED_DIM384Embedding dimension

Next