GitHub App Setup

Builds a GitHub App manifest for one of the apps below, walks through registration on github.com, and exchanges the manifest code for the new App's credentials client-side.

Why does redirect URL have to be this page?

GitHub creates the app, then redirects to the URL you give it with a ?code=… query parameter. That code is good for ~1 hour and can be exchanged once for the new app's ID, private key, and webhook secret. This page exchanges it client-side via POST /app-manifests/{code}/conversions and shows you the credentials to copy.

If you'd rather host this page elsewhere, copy pages/index.html into any HTTPS-served location and use that URL here. file:// won't work — GitHub requires HTTPS.

Detailed setup walkthrough

What's a GitHub App manifest, and what does the page do?

The page builds a JSON manifest declaring the new app's name, redirect URL, default permissions, and webhook events — then POSTs it to github.com/organizations/<org>/settings/apps/new. GitHub creates the app and redirects back to this page with a temporary code. The page then calls POST https://api.github.com/app-manifests/<code>/conversions from your browser to retrieve the new app's ID, private key, and webhook secret.

Reference: Registering a GitHub App from a manifest.

How do I host this page so it works as the redirect URL?

For nsheaps repos this page is auto-deployed via GitHub Pages from nsheaps/github-actions/pages/. For your own host:

cp pages/index.html docs/index.html
# Settings → Pages → Source: GitHub Actions (or branch /docs)

Then use https://<your-org>.github.io/<repo>/ as the redirect. Any other HTTPS static host (Vercel, Netlify, etc.) works equally well.

I get "Manifest is invalid" from GitHub after clicking the button

Open DevTools, find the manifest payload in the form before submission, and validate it against GitHub's manifest schema. Common gotchas:

I lost the code. Can I get the private key again?

No — GitHub only shows the private key once via the manifest exchange. Regenerate one from the app settings: Private keys → Generate a private key. The old key is invalidated; update the secret.

Manual install (no manifest flow)
  1. Go to Org SettingsDeveloper settingsGitHub AppsNew GitHub App.
  2. Name it (anything globally unique). Homepage URL: https://github.com/<org> works.
  3. Uncheck "Active" under Webhook unless your preset needs webhooks.
  4. Set permissions matching the preset's What permissions does this app grant? section.
  5. Where can this be installed: Only on this account (or Any account if shareable).
  6. Create. Note the App ID, generate a private key.
  7. Install it on the repos you want to manage.
How do query-param prefills work?

Any form field on this page can be prefilled by appending matching query parameters to the URL. Field names are listed under each input.

Examples:

The mechanism is generic: every <input> / <select> / <textarea> with a name attribute is candidate. Adding new fields later auto-supports the same prefill pattern.