A client-side migration tool for the AT Protocol ecosystem, allowing users to transfer their accounts between different Personal Data Servers (PDS) while preserving all data and identity information.
This migration service provides a fully client-side solution for transferring AT Protocol accounts (like Bluesky accounts) between different providers. It handles all aspects of the migration process:
- Repository migration (posts, follows, etc.)
- Blob migration (images and other attachments)
- User preferences migration
- PLC identity operations
- Account activation/deactivation
- Fully Client-Side: No server component needed - all operations happen directly in the browser
- Resumable Migrations: Can resume interrupted migrations from various checkpoints
- Cross-PDS Support: Migrate between any compliant AT Protocol servers
- DNS-over-HTTPS: Uses secure DNS-over-HTTPS for handle resolution
- Progress Tracking: Detailed progress monitoring for long-running migrations
- Secure Credential Handling: Proper handling of authentication tokens
- Custom Domain Support: Handles FQDN migration with instructions for DNS updates
The application is built with a modern Rust + WebAssembly stack:
- UI Layer: Dioxus (Rust-based React-like framework)
- State Management: Signal-based state with action dispatching
- Storage: Multiple storage backends (LocalStorage, OPFS) with fallback strategy
- Networking: Direct PDS API calls with client-side HTTP
- Rust toolchain (1.70+ recommended)
- Dioxus CLI
-
Clone the repository:
git clone https://github.com/username/atproto-migration-service.git cd atproto-migration-service -
Install the Dioxus CLI:
cargo install dioxus-cli
-
Build and run:
dx serve
-
Access the application at
http://localhost:8080
The migration process consists of four main steps:
- Login to Current PDS: Authenticate with your current server
- Select New PDS: Choose the destination server (defaults to BlackSky)
- Migration Details: Configure your new account settings
- PLC Verification: Complete the identity transfer with email verification
- Enter your existing handle or DID and password
- Select "Migrate to BlackSky" or enter a custom PDS URL
- Configure your new handle, password, and email
- Start the migration and wait for data transfer
- Check your email for the PLC verification code
- Enter the code to complete the migration
.
├── Cargo.toml # Workspace configuration
├── ui/ # Shared UI components
│ ├── src/
│ │ ├── app/ # Main application components
│ │ ├── components/ # Reusable UI components
│ │ ├── features/ # Feature modules (migration, etc.)
│ │ ├── services/ # Client-side services (DNS, PDS, etc.)
│ │ └── utils/ # Utility functions
├── web/ # Web application entry point
dx build --releaseProduction files will be output to the dist directory.
We ❤️ thoughtful contributions! Help us keep the diff small and the community safe.
Rules
- We may decline or delay PRs that are too large to maintain.
- We reserve the right to lock heated threads to protect contributors’ time.
Guidelines
- Open an issue first – give the community time to discuss scope & maintenance.
- Prefer small patches – anything that touches lots of upstream code is hard to carry.
- Put opinionated changes behind toggles.
- Avoid PRs that…
- Rename common terms (e.g., “Post” → “Skeet”)
- Add entirely new features with no prior discussion
If your idea isn’t a fit, feel free to fork – that’s the beauty of open source!
- Re-brand clearly so users don’t confuse your fork with blacksky.community.
- Point analytics / error reporting to your endpoints.
- Update support links (feedback, email, terms, etc.) to your own.
Found a vulnerability?
Email rudy@blacksky.app – we will respond
promptly.
MIT – see ./LICENSE.
Blacksky exists because of contributors like you.
Thank you for helping us build safer, community-owned social media!