| Permission | Scope | Why |
|---|---|---|
| Repository contents | Read-only | To read file trees, file contents, and parse imports/exports for visualization |
| Repository metadata | Read-only | To list repo names and detect default branches |
We use GitHub OAuth to learn your username and avatar. That's it. No repository scope is requested at this step. We can't see any of your repos from sign-in alone.
You install the Nebulayer GitHub App and choose exactly which repos to share. This happens on GitHub's own interface — we can't see repos you don't select.
You can modify or revoke access anytime from your GitHub Settings → Applications → Installed GitHub Apps.
App JWT (signed with RSA private key) → exchanged for installation access token → 1-hour expiry → never stored in database. Generated fresh per API request.
All traffic over HTTPS/TLS. Database encrypted at rest via Neon (AES-256).
Hosted on Vercel (SOC 2 compliant). Database on Neon (SOC 2 compliant). Sessions are stateless signed JWTs — no session store, no stored credentials.
The database is reachable only from the server. Every query is scoped to the signed-in user's GitHub identity, verified from a signed session token on each request — the browser never talks to the database directly.
Questions? Open an issue on GitHub
Last updated: July 2026