App ID
appId is a UUID the Drop wallet uses to look up per-dApp configuration at the edge. It controls three things:
- Which parent origins may embed the wallet. The Drop wallet edge function sets a dynamic
Content-Security-Policy: frame-ancestors <your-origins>header on every response. A dApp trying to iframe the wallet from an unregistered origin is blocked by the browser before any code runs. - Feature flags. Individual dApps can opt into or out of features (additional chains, extra assets, etc.) without affecting other integrations.
- Analytics scope. Storage, analytics and per-partner state are keyed by
appIdso your integration is cleanly isolated.
INFO
appId is optional in local development. You can omit it or pass any UUID and the wallet will fall back to a localhost-only CSP. It becomes required once you deploy to a public origin.
Register an App ID
There is no self-service portal today — registration is a PR against the partner database.
Generate a UUID v4 (e.g.
uuidgenorcrypto.randomUUID()).Open a pull request against
apps/web/shared/partners.tsadding an entry for your dApp:tsconst PARTNERS: Record<string, AppConfig> = { // ... existing entries '<your-uuid>': { domains: ['your-app.com', '*.your-app.com'], assets: { additionalEnabled: [] }, }, }Once the PR is merged and the wallet redeploys, the entry is live.
domains
Strings are matched against the browser-reported frame-ancestors origin using wildcard-match. You can list bare hostnames (your-app.com), wildcards (*.your-app.com), or full origins including protocol (https://your-app.com). When you pass a hostname, both http:// and https:// variants are accepted.
localhost and 127.0.0.1 are always allowed regardless of domains, so you can develop against an unregistered or empty-domain appId without extra ceremony.
assets.additionalEnabled
A list of extra chain IDs to surface in the wallet UI beyond the default set. Leave as [] if you only need the defaults.
Using your App ID
Pass the UUID as appId when creating the wallet:
const wallet = createWallet({
appId: '424306bd-e3ae-40c0-902b-dffb1f18c7cc',
providers: {
solana: true,
},
})The SDK forwards it to the iframe as ?appId=<uuid> — there is no runtime handshake you need to perform.
What happens if the App ID is wrong?
- Unknown UUID — the edge function falls back to
NO_APP_CONFIG, which only allowslocalhostand127.0.0.1. The wallet will fail to load on your production origin with a CSP violation in the browser console. - Wrong domains — same as above: the browser blocks the iframe before any wallet code executes.
- Missing UUID — same as "unknown UUID" above. Intentional, so dropping the
appIdcannot accidentally broaden your allow-list.