Personal investigative research desktop app for building evidence-based case maps.
Sherlock is a macOS app built with Tauri + React, backed by a local FastAPI + SQLite service. It supports entities/relationships, evidence tracking, timeline analysis, file attachments, and optional Claude-powered synthesis.
- Investigation workspace with graph, entities, evidence, timeline, and files tabs.
- Local backend auto-bootstrap on app launch (creates a private virtualenv and installs backend dependencies).
- Local-mode fallback in UI if backend is temporarily unavailable.
- Local SQLite storage by default.
- Optional AI analysis (Claude) when
ANTHROPIC_API_KEYis available.
- Desktop: Tauri 2 (Rust)
- Frontend: React 18 + TypeScript + Tailwind
- Backend: FastAPI + SQLAlchemy + SQLite
- Graph: Cytoscape.js
sherlock/
├── backend/
│ ├── main.py
│ ├── database.py
│ ├── models.py
│ └── requirements.txt
├── src/
│ ├── api/
│ ├── components/
│ ├── hooks/
│ └── pages/
└── src-tauri/
- macOS
- Node.js 18+
- Rust toolchain (
rustup) - Python 3.x available as
python3(required for backend bootstrap)
Install frontend dependencies:
npm installRun desktop app in dev mode:
npm run tauri devOptional browser-only loop:
# terminal 1
cd backend
python3 -m pip install -r requirements.txt
python3 -m uvicorn main:app --host 127.0.0.1 --port 8000 --reload
# terminal 2
npm run devnpm run tauri buildArtifacts:
src-tauri/target/release/bundle/macos/Sherlock.appsrc-tauri/target/release/bundle/dmg/Sherlock_0.1.0_aarch64.dmg
On app launch, Tauri backend bootstrap does the following:
- Resolves backend source directory (bundled resources in production, local
backend/in dev). - Creates runtime directory under app data.
- Creates/reuses a local Python virtualenv.
- Installs
backend/requirements.txt(only when requirements hash changes). - Starts
uvicornon127.0.0.1:8000.
If backend startup fails, the UI switches to local mode and continues with local storage fallback for core CRUD.
- SQLite DB:
~/Library/Application Support/sherlock/sherlock.db - Attachments:
~/Library/Application Support/sherlock/attachments/ - Backend runtime venv:
~/Library/Application Support/com.sherlock.app/backend-runtime/ - UI fallback cache (when backend unavailable): browser localStorage key
sherlock:localdb:v1
ANTHROPIC_API_KEY(optional): enables AI analysis endpoint usage.
Notes:
- Backend reads environment variables from the process environment.
- For local dev, export in your shell before launching.
- Wait ~10–30 seconds on first launch (dependency install can take time).
- Ensure
python3is installed and available on PATH. - Relaunch the app after updates.
- Confirm backend health manually:
curl http://127.0.0.1:8000/health
Expected response:
{"status":"ok"}- Ensure
ANTHROPIC_API_KEYis set in the environment used to launch the app.
Private/internal use.