Skip to content

Data Flow

This page describes the data flows for common operations.

When a user searches for code:

┌──────┐ ┌─────────┐ ┌────────┐ ┌───────┐
│ User │───▶│ Web UI │───▶│ API │───▶│ Zoekt │
│ │ │ │ │ Server │ │ │
└──────┘ └─────────┘ └────────┘ └───────┘
┌──────────────────────────────────────────┘
┌───────┐ ┌─────────┐ ┌──────┐
│ Zoekt │───▶│ API │───▶│ User │
│ │ │ Server │ │ │
└───────┘ └─────────┘ └──────┘
  1. User Input: User enters query in Web UI
  2. API Request: Web UI sends GET /api/search?q=...
  3. Query Parsing: API parses query and filters
  4. Zoekt Search: API forwards to Zoekt
  5. Index Lookup: Zoekt searches trigram index
  6. Results: Matching files and lines returned
  7. Formatting: API formats response
  8. Display: Web UI renders results
StepTypical Time
API parsing<1ms
Zoekt search5-50ms
Result formatting<5ms
Total10-60ms

When a connection syncs repositories:

┌───────────┐ ┌──────────┐ ┌───────────┐
│ Scheduler │───▶│ Queue │───▶│ Worker │
│ │ │ (Redis) │ │ │
└───────────┘ └──────────┘ └───────────┘
┌───────────┐
│ Code Host │
│ (API) │
└───────────┘
┌──────────────────────────────────┘
┌───────────┐ ┌──────────┐
│PostgreSQL │◀───│ Worker │
│ │ │ │
└───────────┘ └──────────┘
  1. Schedule Trigger: Scheduler detects sync due
  2. Job Creation: Sync job queued in Redis
  3. Worker Pickup: Worker dequeues job
  4. API Discovery: Worker calls code host API
  5. Repository List: Code host returns repos
  6. Filter: Apply include/exclude patterns
  7. Database Update: Update repo metadata
  8. Index Jobs: Queue index jobs for new repos
StepTypical Time
Job queue<10ms
API discovery1-10s
Database update<100ms
Total2-15s

When a repository is indexed:

┌──────────┐ ┌──────────┐ ┌──────────┐
│ Queue │───▶│ Worker │───▶│ Git │
│ (Redis) │ │ │ │ Clone │
└──────────┘ └──────────┘ └──────────┘
┌───────────┐
│ Disk │
│ (Git Repo)│
└───────────┘
┌─────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐
│ File │───▶│ Index │───▶│ Zoekt │
│ Analysis │ │ Build │ │ Index │
└──────────┘ └──────────┘ └──────────┘
┌─────────────────────────────────┘
┌──────────┐
│PostgreSQL│
│ (Status) │
└──────────┘
  1. Job Pickup: Worker dequeues index job
  2. Git Clone: Clone or fetch repository
  3. File Analysis: Enumerate and analyze files
  4. Language Detection: Detect file languages
  5. Index Build: Create Zoekt trigram index
  6. Index Write: Write index to disk
  7. Status Update: Update database status
StepTypical Time
Git clone10s-5min
File analysis1-30s
Index build5s-2min
Total30s-10min

When creating a merge request with changes:

┌──────┐ ┌──────────┐ ┌──────────┐
│ CLI │───▶│ API │───▶│ Search │
│ │ │ Server │ │ │
└──────┘ └──────────┘ └──────────┘
┌─────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Matches │───▶│ Changes │───▶│ Code Host│
│ │ │ Applied │ │ API │
└──────────┘ └──────────┘ └──────────┘
┌─────────────────────────────────┘
┌──────────┐
│ MR │
│ Created │
└──────────┘
  1. Query: CLI sends search/replace query
  2. Search: Find all matches
  3. Preview: Show changes to user
  4. Confirm: User confirms changes
  5. Clone Repos: Clone affected repos
  6. Apply Changes: Apply find/replace
  7. Commit: Create commits
  8. Push: Push branches
  9. Create MR: Create merge requests
StepTypical Time
Search<1s
Clone (per repo)10-60s
Apply changes<1s
Push & MR2-10s
Total20s-2min per repo

When testing a new connection:

┌──────┐ ┌──────────┐ ┌───────────┐
│ Web │───▶│ API │───▶│ Code Host │
│ UI │ │ Server │ │ API │
└──────┘ └──────────┘ └───────────┘
┌─────────────────────────────┘
┌──────────┐ ┌──────────┐
│ Validate │───▶│ Return │
│ Token │ │ Result │
└──────────┘ └──────────┘
  1. Submit: User submits connection details
  2. API Call: API tests against code host
  3. Validate: Verify token and permissions
  4. Discover: Test repository discovery
  5. Return: Return success/failure