config.json and reused on subsequent launches to avoid re-entering credentials.
Login flow
Enter credentials
The login form presents username and password fields, and a “Remember me” checkbox. All network operations run on a background thread; the UI remains responsive throughout.
Send login request
The app sends a
GET /auth/user request with HTTP Basic Auth (username and password). VRChat returns the auth cookie in the Set-Cookie response header and a JSON user profile in the body.Check for 2FA requirement
If the response body contains a
requiresTwoFactorAuth array, the app switches to the 2FA entry screen. The auth cookie from step 2 is retained in memory and used to verify the code.Verify 2FA code (if required)
The user enters the TOTP code from their authenticator app, or a code from their email if VRChat returns
emailOtp. The app posts the code to the appropriate endpoint:Session validation on startup
Ifconfig.json contains a non-empty auth_cookie and remember_me is true, the app immediately sends a VerifyCookie request on startup — no credentials are required. This calls GET /auth/user with the stored cookie:
Config file
The session state is persisted inconfig.json in the application directory:
| Field | Type | Description |
|---|---|---|
auth_cookie | String | The VRChat auth cookie value (without the auth= prefix) |
user_id | String | The authenticated user’s VRChat ID (usr_...) |
last_login | String | null | RFC 3339 timestamp of the last successful login; null if remember-me was not used |
remember_me | bool | Whether to persist the auth cookie across sessions |
Cookie persistence
When “Remember me” is checked,auth_cookie and user_id are written to config.json after every successful login or 2FA verification. When unchecked, both fields are cleared from the file — even if a previous session was stored.
Ending a session
The app does not have an explicit logout button. To end your session:- Disable “Remember me”: If you log in without “Remember me” checked, the auth cookie and user ID are cleared from
config.jsonwhen a newLoginSuccessresponse is received. The fields are wiped as part of thepersist_logincall. - Delete
config.json: Remove the file to force the login screen on next launch. - Clear
auth_cookie: Editconfig.jsonand setauth_cookieto an empty string.
The VRChat API logout endpoint (
DELETE /auth/user/logout) is not called by the app. The session is abandoned client-side only — the cookie may remain valid on VRChat’s servers until it expires naturally.API endpoints reference
| Method | Endpoint | Purpose |
|---|---|---|
GET | /auth/user | Login with Basic Auth; also used to verify an existing cookie |
POST | /auth/twofactorauth/totp/verify | Verify a TOTP 2FA code |
POST | /auth/twofactorauth/emailotp/verify | Verify an email OTP code |