golain stores credentials per profile at ~/.config/golain/profiles/{name}.json (mode 0600). Legacy profiles under ~/.config/platform-tui/profiles/ are still read.
Device authorization login
It prints a user code, opens the verification URL, and polls until you approve. Only the access token is persisted — re-run login when it expires.
Check identity:
Zitadel application setup
Create a Native or User Agent application with Device Authorization enabled (not Web + client secret).- Zitadel console → Projects → create or select project.
- New Application → type Native / User Agent.
- Enable Device Authorization grant.
- Scopes:
openid,profile,email. - Copy Client ID into the login prompt.
Dev and bypass modes
Local vm-edge stack defaults (frominfra/deploy/vm-edge/env/apis.vm.env):
Override with env vars:
GOLAIN_API_URL, GOLAIN_ZITADEL_ENDPOINT, GOLAIN_ZITADEL_CLIENT_ID (legacy PLATFORM_* aliases work).
When apis runs with AUTH_BYPASS=true, any bearer token works: