-
Notifications
You must be signed in to change notification settings - Fork 1
Installation
Three scenarios covered:
- Mac — native installation (recommended, maximum LLM performance)
- Linux — Docker with Ollama as a separate container
- Windows — Docker with llama.cpp server as a separate container
- One-liner — guided installation from scratch with Docker (AI option included, recommended for non-technical users)
The LLM backend, server URL, API keys and model are configured from within the app on the ⚙️ Settings page — no external config files needed.
The configuration is saved in the database (user_settings) and persists across restarts. On first launch the app uses Ollama on localhost:11434 as default.
Yes, once. The app does not download models automatically — the LLM server must have the model available before starting operations that require it (categorisation, description cleaning).
Note: the app works without an active LLM. Import, ledger, rules, analytics and reports are always available. If the LLM is unreachable, transactions receive the category "Other" and
to_review=True.
Ollama on Mac uses Metal (Apple Silicon) or OpenCL (Intel) acceleration. Inside Docker this acceleration is not available → inference is 5-10x slower.
git clone https://github.com/drake69/spendify.git spendify
cd spendifycurl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.zshrc # or reopen the terminaluv synccp .env.example .env
# Default values work as-is — no changes needed# Install Ollama (once)
brew install ollama
# or download from https://ollama.com
# Start the Ollama server in the background
ollama serve &
# Download the model (once — ~8 GB for gemma3:12b, ~2 GB for gemma3:4b)
ollama pull gemma3:12b
# Lighter version for Macs with < 16 GB RAM:
# ollama pull gemma3:4bThe model is downloaded only once into
~/.ollama/models/and reused on every subsequent launch.
uv run streamlit run app.pyThe app is available at http://localhost:8501
Go to ⚙️ Settings → LLM Backend section:
- Backend:
Ollama (local) - URL:
http://localhost:11434 - Model:
gemma3:12b(or the model you downloaded)
ollama serve & # if not already running
uv run streamlit run app.pyThis configuration starts two containers:
-
spendify_app— the web application -
spendify_ollama— the Ollama LLM server
git clone https://github.com/drake69/spendify.git spendify
cd spendifycp .env.example .env
# Default values work as-is — no changes neededInstall the toolkit and uncomment the GPU lines in docker-compose.yml under the ollama section:
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart dockerThen in docker-compose.yml uncomment:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]docker compose --profile ollama up -dWith the one-liner installation (
install.sh) the model is downloaded automatically — this step is not required. The command above is for repository-based installations.
Note: if you used
install.shwith local AI, the download is already running in the background via theollama-initcontainer. Check with:docker compose --project-directory ~/spendify logs -f ollama-init
# ~8 GB download, a few minutes of waiting
docker compose exec ollama ollama pull gemma3:12b
# Lighter version:
# docker compose exec ollama ollama pull gemma3:4bThe model is saved in the Docker volume
spendify_ollama_modelsand persists across restarts. No need to download it again.
Go to ⚙️ Settings → LLM Backend section:
- Backend:
Ollama (local) - URL:
http://ollama:11434← Docker service name, notlocalhost - Model:
gemma3:12b
docker compose --profile ollama down # stop
docker compose --profile ollama up -d # restart
docker compose logs -f # logs
docker compose exec ollama ollama list # downloaded modelsOn Windows we use llama.cpp server as the LLM backend because it works in Docker without complex GPU configuration and is compatible with the OpenAI API (already supported by Spendify).
- Docker Desktop installed and running (WSL2 backend)
- Git for Windows: https://git-scm.com/download/win
Open PowerShell or Git Bash:
git clone https://github.com/drake69/spendify.git spendify
cd spendifyDownload a GGUF file from HuggingFace. Recommended for CPU:
| Model | Size | Required RAM |
|---|---|---|
| gemma-3-4b-it-Q4_K_M.gguf | ~2.5 GB | 6 GB |
| gemma-3-12b-it-Q4_K_M.gguf | ~7.5 GB | 12 GB |
Create the models folder and place the downloaded file there:
mkdir models
# Move the .gguf file into the models\ foldercopy .env.example .envOpen .env and uncomment the LLAMA_MODEL line with the name of the downloaded file:
LLAMA_MODEL=gemma-3-4b-it-Q4_K_M.ggufdocker compose --profile llama-cpp up -dThe first launch takes a few minutes (Docker downloads the images).
Go to ⚙️ Settings → LLM Backend section:
- Backend:
OpenAI-compatible - URL:
http://llama-cpp:8080/v1← Docker service name, notlocalhost - API Key:
none - Model: GGUF filename without
.gguf, e.g.gemma-3-4b-it-Q4_K_M
docker compose --profile llama-cpp down # stop
docker compose --profile llama-cpp up -d # restart
docker compose logs -f # logs
docker compose ps # container status- Download LM Studio: https://lmstudio.ai
- In the Discover tab search for and download
gemma-3-4b-it - Go to Local Server → press Start Server (port
1234) - Start Spendify with standard Docker (without profile):
docker compose up -d - In the app ⚙️ Settings → LLM Backend:
- Backend:
OpenAI-compatible - URL:
http://host.docker.internal:1234/v1 - API Key:
lm-studio - Model:
gemma-3-4b-it(or the name shown in LM Studio)
- Backend:
The database is saved in the Docker volume spendify_data and persists across restarts and app updates.
For backup, restore, moving to another computer and direct inspection → Database guide.
| Scenario | Command |
|---|---|
| Native Mac | uv run streamlit run app.py |
| Linux + Ollama Docker | docker compose --profile ollama up -d |
| Windows + llama.cpp Docker | docker compose --profile llama-cpp up -d |
| Windows + external LM Studio | docker compose up -d |
Does the model need to be re-downloaded on every launch? No. It is saved only once:
- Native Ollama →
~/.ollama/models/ - Ollama Docker → volume
spendify_ollama_models - llama.cpp →
./models/folder
Can I change the model after the first launch?
Yes. Go to ⚙️ Settings, change the model name and save. For Ollama, download the model first: ollama pull <model> (native) or docker compose exec ollama ollama pull <model> (Docker).
Can I use OpenAI or Anthropic instead of a local LLM?
Yes. In ⚙️ Settings select OpenAI or Anthropic and enter the API key. No LLM container required.
Does the LLM server URL change between native and Docker installation? Yes:
- LLM running natively on the host →
http://localhost:11434(or1234for LM Studio) - LLM in a Docker container → use the service name (
http://ollama:11434orhttp://llama-cpp:8080) - LLM on the host, app in Docker →
http://host.docker.internal:11434
Can I make a backup with the one-liner installation too?
Yes. The one-liner installation uses the same Docker volume spendify_data. → Database guide
Can I move my data to another computer? Yes. → Moving the database
How do I completely uninstall Spendify? Use the interactive uninstall script:
curl -fsSL https://raw.githubusercontent.com/drake69/spendify/main/installer/uninstall.sh | bash
# Windows:
# irm https://raw.githubusercontent.com/drake69/spendify/main/installer/uninstall.ps1 | iexThe script asks separately whether to remove: database, Ollama models, llama.cpp image + GGUF files, Docker images, installation folder, and shows instructions for uninstalling Docker Desktop.