# GitHub Integration (/docs/integrations/github)



Two layers of GitHub integration:

* **Sign-in OAuth** — personal identity, used at sign-up / sign-in.
* **Layers GitHub App** — repo access used by App Machina (SDK
  orchestrator) and project analysis.

## Installing the GitHub App [#installing-the-github-app]

1. From Layers, click **Install GitHub app** (from project setup or
   from your user settings).
2. GitHub redirects you to the App install page.
3. Pick "All repositories" or "Selected repositories" — this is
   enforced by GitHub at install time.
4. GitHub redirects back to Layers; the installation is linked to your
   user, and can be shared with Layers Orgs you belong to.

## What the App can do [#what-the-app-can-do]

Permissions are whatever the GitHub App manifest requests — check the
GitHub App install dialog for the current exact set. In practice the
App uses read access on repository contents and metadata to analyze
your code (for App Machina SDK instrumentation and related features).
Write operations (e.g., opening a PR) are gated by the feature using
the App.

## Webhooks Layers consumes [#webhooks-layers-consumes]

The Layers GitHub App subscribes to:

* `installation.deleted` — tears down the installation and cached
  repos.
* `installation.suspend` / `installation.unsuspend` — updates status.
* `installation_repositories.added` / `removed` — refreshes the cached
  repo list.

Signatures are verified with `x-hub-signature-256` against the
configured webhook secret.

## Multiple orgs, one installation [#multiple-orgs-one-installation]

A GitHub installation is owned by the user who installed it.
Permission to use that installation from a given Layers Org is granted
via `github_installation_access` — so one install can be shared with
multiple Layers Orgs without re-installing.

## Private repos [#private-repos]

Fully supported. Layers only sees what you granted during install.

## Partner API [#partner-api]

Partners can list repos visible to the installation backing a project
via [`GET /v1/projects/:projectId/github/repos`](/docs/api/reference/github/list-repos).

## Uninstalling [#uninstalling]

From GitHub → **Settings → Applications → Layers → Uninstall**, or
from the Layers UI. On uninstall, GitHub fires `installation.deleted`
and Layers drops the cached repos for that installation.
