Setup & Running
Datagrunt Studio is open source on GitHub and MIT-licensed. There are two ways to run it: directly on your machine (best for day-to-day development), or as prod-like container images with a single make up.
Prerequisites
- Node.js 22+
- uv — manages Python 3.10+ for you; no separate Python install needed
Clone the repository first:
git clone https://github.com/pmgraham/datagrunt-studio.git
cd datagrunt-studioRun Locally
Studio is two processes: a FastAPI backend sidecar (Datagrunt + DuckDB) and a Next.js frontend.
1. Backend (first terminal):
cd backend
uv sync --extra dev
uv run uvicorn app.main:app --reload2. Frontend (second terminal):
npm ci
npm run dev3. Open http://localhost:3000. The UI proxies API calls to the backend at BACKEND_URL (default http://127.0.0.1:8000).
The backend is deliberately a single-user, loopback-only companion process — it has no authentication because it is designed to run on and serve only your machine. Don’t expose it to a network.
Run with Containers
For a prod-like run of the built app, use the Makefile. make up works on any machine: it uses Apple Container when its container CLI is installed (macOS), and Docker Compose otherwise.
make up # build images as needed (slow the first time; cached after),
# stage credentials, start backend & frontend; UI at http://localhost:3000
make logs # print logs
make down # stop and remove
make status # list containers
make build # build the images without starting anythingmacOS / Apple Container one-time setup: run container system start (add --enable-kernel-install if it reports no kernel is configured). After the first build, startup takes only a few seconds — the images boot as lightweight VMs. Backend data persists in .container-data/ between runs.
Docker hosts: prefer make up over raw docker compose up so Google Cloud credentials get staged — a raw docker compose up mounts an empty /secrets, and GCS import stays disabled until you run make up (or make stage-adc). The same docker-compose.yml doubles as the deploy config for a generic Docker host; the images are standard OCI: backend/Dockerfile (FastAPI, port 8000) and Dockerfile (Next.js standalone, port 3000, expects BACKEND_URL).
Configuration
All configuration is optional — Studio works out of the box for local files. Copy the template and fill in only what you use:
cp .env.example .env| Setting | Needed for | Notes |
|---|---|---|
GEMINI_API_KEY |
AI PDF rationalization via Gemini | See AI PDF Extraction. Not needed for Vertex AI or Ollama. |
| Application Default Credentials | GCS import/export, Vertex AI | No .env entry needed — run gcloud auth application-default login once. Under make up, credentials are automatically staged into the gitignored .container-secrets/ (refreshed on every make up). |
GOOGLE_ADC_FILE |
GCS under containers | Only if your ADC file lives somewhere non-standard. |
OLLAMA_HOST |
Local LLM at a non-default address | Only if your Ollama daemon isn’t at the default address. |
Local Ollama under containers
The AI PDF Extractor’s Use local LLM (Ollama) option talks to your host’s Ollama daemon. make up points the backend container at the host automatically — but from inside a container, localhost is the container itself, so the host daemon must listen on a non-loopback interface:
OLLAMA_HOST=0.0.0.0 ollama serveNative (non-container) runs need no such step.