···3636- `script/perlsky-admin create-invite` can mint invite codes locally on the server without needing an existing user session.
3737- The invite-only bootstrap flow is documented with copy-pasteable commands in `docs/DEPLOYMENT.md`.
3838- Browser clients such as `bsky.app` can talk to `perlsky` directly because XRPC and DID-document responses include CORS headers and answer OPTIONS preflight requests.
3939+- Unknown `app.bsky.*` requests are proxied to `https://api.bsky.app` by default, and unknown `chat.bsky.*` requests are proxied to `https://api.bsky.chat` by default using per-account service-auth JWTs.
4040+- Set `bsky_appview_url` / `bsky_appview_did` or `chat_service_url` / `chat_service_did` in your config if you want different upstream services.
39414042Relay / crawler discovery:
4143
+5
docs/DEPLOYMENT.md
···6363 "jwt_secret": "REPLACE_WITH_A_RANDOM_SECRET",
6464 "admin_password": "REPLACE_WITH_A_RANDOM_SECRET",
6565 "metrics_token": "REPLACE_WITH_A_RANDOM_SECRET",
6666+ "bsky_appview_url": "https://api.bsky.app",
6767+ "bsky_appview_did": "did:web:api.bsky.app",
6868+ "chat_service_url": "https://api.bsky.chat",
6969+ "chat_service_did": "did:web:api.bsky.chat",
6670 "crawlers": ["https://bsky.network"],
6771 "crawler_notify_interval": 1200,
6872 "data_dir": "/var/lib/perlsky/data",
···7983- `invite_code_required`: if true, `createAccount` requires a valid invite code
8084- `account_did_method`: set to `did:plc` if you want PLC-backed user DIDs
8185- `plc_rotation_private_key_hex`: required for `did:plc` account creation
8686+- `bsky_appview_*` / `chat_service_*`: upstream AppView and chat services for unknown `app.bsky.*` and `chat.bsky.*` calls. The public Bluesky services are the normal defaults.
8287- `crawlers`: relay/crawler origins to notify after repo activity
83888489## Launcher