Configuration
Configuration is optional. All services start with sensible defaults. To customize seed data, create emulate.config.yaml in your project root (or pass --seed):
tokens:
gho_test_token_admin:
login: admin
scopes:
- repo
- user
- admin:org
- admin:repo_hook
gho_test_token_user1:
login: octocat
scopes:
- repo
- userVercel Seed Config
vercel:
users:
- username: developer
name: Developer
email: dev@example.com
teams:
- slug: my-team
name: My Team
projects:
- name: my-app
team: my-team
framework: nextjs
envVars:
- key: DATABASE_URL
value: postgres://localhost
target: [production, preview]Vercel Integrations
Register Vercel OAuth integrations for strict client validation:
vercel:
integrations:
- client_id: "oac_abc123"
client_secret: "secret_abc123"
name: "My Vercel App"
redirect_uris:
- "http://localhost:3000/api/auth/callback/vercel"GitHub Seed Config
github:
users:
- login: octocat
name: The Octocat
email: octocat@github.com
bio: I am the Octocat
company: GitHub
location: San Francisco
orgs:
- login: my-org
name: My Organization
description: A test organization
repos:
- owner: octocat
name: hello-world
description: My first repository
language: JavaScript
topics: [hello, world]
auto_init: true
- owner: my-org
name: org-repo
description: An organization repository
language: TypeScript
auto_init: trueGitHub OAuth Apps
Register OAuth applications so the emulator validates client_id, client_secret, and redirect_uri during the OAuth flow:
github:
oauth_apps:
- client_id: "Iv1.abc123"
client_secret: "secret_abc123"
name: "My Web App"
redirect_uris:
- "http://localhost:3000/api/auth/callback/github"If no oauth_apps are configured, the emulator accepts any client_id (backward-compatible). With apps configured, strict validation is enforced.
GitHub Apps
Full GitHub App support with JWT authentication and installation access tokens:
github:
apps:
- app_id: 12345
slug: "my-github-app"
name: "My GitHub App"
private_key: |
-----BEGIN RSA PRIVATE KEY-----
...your PEM key...
-----END RSA PRIVATE KEY-----
permissions:
contents: read
issues: write
events: [push, pull_request]
installations:
- installation_id: 100
account: my-org
repository_selection: all
permissions:
contents: readEndpoints:
GET /app- get authenticated app (JWT required)GET /app/installations- list app installationsGET /app/installations/:id- get installationPOST /app/installations/:id/access_tokens- create installation access tokenGET /repos/:owner/:repo/installation- find repo installationGET /orgs/:org/installation- find org installationGET /users/:username/installation- find user installation
JWT authentication: sign a JWT with { iss: "<app_id>" } using the app's private key (RS256). The emulator verifies the signature and resolves the app.