> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devperform.io/llms.txt
> Use this file to discover all available pages before exploring further.

# How DevPerform Works

> Where your data comes from, what's stored, and how often it refreshes.

DevPerform is a **data pipeline plus an analytics layer**. Instead of calling your code host's API every time you open a dashboard, it ingests your delivery data into its own database and computes metrics from that store. That's what makes dashboards fast and lets history accumulate for trends. It works the same across **GitHub, GitLab, and Bitbucket** — a provider abstraction normalizes each host's data into one shape.

## The pipeline

```
GitHub / GitLab ──(sync: hourly + on repo-add)──►  DevPerform database  ──►  metrics  ──►  dashboards
 / Bitbucket    pull/merge requests, reviews,        (fast queries,
                comments, commits, files,             history retained)
                deploys, incidents
```

* **Ingestion** pulls PRs/MRs with their reviews, comments, commits, and per-file line counts (GitHub via GraphQL + a REST fallback; GitLab via REST v4; Bitbucket via REST 2.0) — all normalized into the same shape.
* **Sync runs hourly** and immediately when you add a repo, so new PRs show up without you doing anything.
* For the Pro **rework** metric, DevPerform additionally fetches recent commit diffs over a rolling \~21-day window to measure how much code is rewritten. Only the aggregate churn numbers are kept.

## What's stored — and what isn't

<CardGroup cols={2}>
  <Card title="Stored" icon="database">
    PR titles, authors, timestamps, review/comment events, merge state, file paths, and additions/deletions counts — plus the metrics computed from them.
  </Card>

  <Card title="Not stored" icon="shield-check">
    Your source code. Commit diffs are fetched transiently to compute rework and are not retained as source.
  </Card>
</CardGroup>

## Connecting your code host

You sign in with **GitHub, GitLab, or Bitbucket** — and the same connection lets DevPerform read your delivery data. Setup is per-host: see [GitHub Org Setup](/github-org-setup), [GitLab Setup](/gitlab-setup), or [Bitbucket Setup](/bitbucket-setup).

For GitHub, DevPerform can also operate as a **GitHub App** installed on your org — scoped, server-to-server access tokens that scale to larger orgs instead of relying on one person's OAuth token. GitLab and Bitbucket connect via OAuth (the org stores an encrypted, auto-refreshed token). If you're evaluating DevPerform for a bigger organization, ask us about the options.

## Multi-tenant by design

Every piece of data is scoped to your organization. Metrics queries always filter by your org, so one customer's data is never visible to another.

## Freshness

Because metrics come from the synced store, a brand-new PR appears at the next sync (within the hour, or immediately when you add its repo). If you've just connected a repo, give the first sync a minute to backfill history before the dashboards fill in.
