Client side atproto account migrator in your web browser, along with services for backups and adversarial migrations. pdsmoover.com
pds atproto migrations moo cow

Files
README.md

PDS MOOver (OAuth edition) #

moo

A no frills client side PDS account migrator for ATProto. For more info check out pdsmoover.com

This fork signs in to your current account with atproto OAuth (granular scopes, no password) and only asks for a password for the new account on the new PDS. It cannot deactivate the old account, since OAuth sessions are not allowed to do that.

Dev #

bun install
bun run dev

Open http://127.0.0.1:5173 (not localhost). Local dev uses an atproto loopback OAuth client whose redirect URI is 127.0.0.1.

This deployment is served from https://pds-moover-oauth.exe.xyz and uses public/client-metadata.json as the OAuth client id. If you change the requested scopes, update both src/oauth.js and that JSON file.

Captcha / signup gates #

Some PDSs (for example selfhosted.social) report phoneVerificationRequired from describeServer and refuse createAccount without a verification code. When that's the case the new PDS's captcha page (<pds>/gate/signup) is shown in an iframe before the MOOve starts. The gate redirects the iframe back to /captcha-callback.html, which posts the code to the main page. That page is kept free of OAuth code on purpose: the OAuth client would otherwise treat the code/state params as an OAuth callback.