Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Browse GitHub issues across repositories selected during GitHub App installation, then create stable public issue snapshots with one click. Snapshots include the issue body, labels, assignees, milestone, comments, and—when selected—sub-issues.
Create a public GitHub App at https://github.com/settings/apps/new with these settings:
- Homepage URL: the live URL for
index.ts - Callback URL:
<LIVE_URL>/auth/github/callback - Request user authorization (OAuth) during installation: optional
- Repository permissions → Issues: Read-only
- Repository permissions → Metadata: Read-only
- Webhooks: disabled
- Where can this GitHub App be installed?: Any account
After creating the app:
- Generate a client secret.
- Copy the app's Client ID (not App ID), client secret, and app slug.
- Add the environment variables below in Val Town.
- Generate a strong random
SESSION_SECRET(at least 32 bytes).
Required environment variables:
GITHUB_CLIENT_IDGITHUB_CLIENT_SECRETGITHUB_APP_SLUGSESSION_SECRET
Public-view feedback also requires a Cloudflare Turnstile widget restricted to
the live *.val.run hostname:
TURNSTILE_SITE_KEYTURNSTILE_SECRET_KEY
- GitHub login uses OAuth state validation and PKCE.
- GitHub tokens are AES-GCM encrypted at rest using
SESSION_SECRET. - Session cookies are
HttpOnly,Secure, andSameSite=Lax. - Public links use 96-bit random slugs and contain a stored snapshot, never a GitHub token.
- Only repositories selected in each GitHub App installation are listed.
- Creating a public link intentionally copies the selected private issue data into this Val's SQLite database.
- Public-view feedback is private between its author and the view owner. Anonymous authors are associated through a signed browser cookie; raw IP addresses are never stored.
- Every feedback submission is validated server-side with Cloudflare Turnstile and subject to keyed, privacy-preserving rate limits.
/— authenticated issue browser/s/:slug— public issue snapshot/auth/github— GitHub App OAuth login/api/repos— installations and selected repositories/api/repos/:owner/:repo/issues— issues grouped by selected repository/api/shares— create a public snapshot/api/public-view/:slug/comments— private viewer feedback/api/view-comments— owner feedback inbox/source— view and remix the Val
GitHub's REST Issues endpoints can include pull requests, so the app filters
entries with a pull_request field. Issues, comments, repositories per
installation, and sub-issues are fetched across GitHub's paginated responses.