cp packages/app/.env.example packages/app/.env
# configure packages/app/.env (see GitHub OAuth Setup below)
bun clean [--lockfiles]
bun install
bun devOpen http://127.0.0.1:3000 in your browser (use 127.0.0.1, not localhost — required for GitHub OAuth).
To run on a custom port: PORT=4000 bun dev. Next.js serves the UI and API routes on the same port. Update
NEXT_PUBLIC_GITHUB_REDIRECT_URI and URL in your .env to match.
Sign-in is required to edit metadata and create PRs. To set up OAuth for local development:
Option A: Shared dev OAuth app — ask webops for the dev OAuth app client ID and secret.
Option B: Create your own GitHub OAuth app:
- Go to GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
- Set the authorization callback URL to
http://127.0.0.1/api/auth/github/callback(no port) - Copy the client ID and generated secret into your
.env
Configure packages/app/.env:
NEXT_PUBLIC_GITHUB_CLIENT_ID = <your client id>
GITHUB_CLIENT_SECRET = <your client secret>
NEXT_PUBLIC_GITHUB_REDIRECT_URI = http://127.0.0.1:3000/api/auth/github/callback
URL = http://127.0.0.1:3000
NEXT_PUBLIC_GITHUB_REDIRECT_URI tells GitHub to redirect to your local dev server port. GitHub allows any port
on 127.0.0.1 as long as the registered callback URL uses the same host. Leave it unset in production.
The Add token logo action on /tokens prepares the SVG, generates the required PNG sizes, and opens a pull
request against yearn/tokenAssets. Override that target with TOKEN_ASSETS_REPO_OWNER and
TOKEN_ASSETS_REPO_NAME when testing against another repository.
act -j sync-vaults
# see https://github.com/nektos/act
or
bun packages/app/scripts/sync-vaults.ts
bun packages/app/scripts/sync-strategies.ts
bun packages/app/scripts/sync-tokens.ts
git add packages/app/cdn/vaults
git add packages/app/cdn/strategies
git add packages/app/cdn/tokens
git commit -m 'Sync vaults strategies and tokens'
git push
During bun dev, same-origin /cdn/* requests read directly from packages/cdn, so local metadata edits are
available without publishing them. Production requests use the API proxy and a commit-pinned jsDelivr URL.
https://cdn.jsdelivr.net/gh/yearn/cms@main/packages/cdn