Bluesky Account Migration Locks Original Repository: How to Confirm
🔍 WiseChecker

Bluesky Account Migration Locks Original Repository: How to Confirm

When you migrate your Bluesky account to a different hosting provider, Bluesky locks the original repository to prevent data conflicts. This lock stops you from posting, replying, or liking from the old account. The lock is automatic and permanent for that repository after migration completes. This article explains why Bluesky locks the original repository, how to verify the lock is active, and what to do if the migration did not finish correctly.

Key Takeaways: Confirming the Bluesky Repository Lock

  • Settings > Account > Migration: Shows the current migration status and whether the repository is locked.
  • Bluesky AT Protocol API endpoint com.atproto.repo.describeRepo: Returns a repoLocked field that confirms the lock server-side.
  • Third-party tools like Bluesky Debug: Lets you inspect repository metadata without writing code.

Why Bluesky Locks the Original Repository After Migration

Bluesky uses the AT Protocol, which treats each account as a repository of signed data records. When you migrate your account to a different Personal Data Server, the protocol must ensure that only one repository is authoritative at any time. If both the old and new repositories accepted writes, the same account could publish conflicting content from two locations.

To prevent this, the migration process sends a signed command to the old repository that sets the repoLocked flag to true. Once set, the old repository rejects all write operations. The lock is final and cannot be reversed by the account owner. The only way to write to the account again is through the new repository.

The lock applies to the repository, not the user handle. Your handle moves to the new provider during migration. The old repository remains locked even if you later delete the account or change providers again.

How to Confirm the Repository Lock

You can confirm the lock through the Bluesky app interface or by inspecting the repository data directly. Both methods give you the same information. Use the app method first because it is faster and requires no technical setup.

Method 1: Check Migration Status in the App

  1. Open Bluesky Settings
    Tap your profile picture in the top-left corner of the web app or the bottom navigation bar on mobile. Select Settings from the menu.
  2. Navigate to Account Settings
    In the Settings page, tap Account to open the account management section.
  3. Open the Migration Section
    Scroll down and tap Migration. This page shows your current Personal Data Server and migration history.
  4. Verify the Lock Status
    Look for a line that says Original repository locked or Repository status: locked. If this text appears, the lock is active. If the text says Not locked or nothing appears, the migration may not have completed.

Method 2: Inspect Repository Metadata with the AT Protocol

This method is useful if you cannot access the app or want to confirm the lock programmatically. You need a tool that can make HTTP GET requests, such as a browser with developer tools or a command-line client like curl.

  1. Get Your DID
    In Bluesky, go to Settings > Account. Your DID is a long string starting with did:plc: or did:web:. Copy it exactly.
  2. Construct the API URL
    Replace YOUR_DID in this URL: https://plc.directory/YOUR_DID. For example, if your DID is did:plc:abc123, the URL is https://plc.directory/did:plc:abc123.
  3. Open the URL in a Browser
    Paste the URL into a browser address bar and press Enter. The page displays a JSON object with repository metadata.
  4. Find the repoLocked Field
    Look for a key called repoLocked in the JSON. If the value is true, the repository is locked. If the value is false or missing, the lock is not active.

Method 3: Use the Bluesky Debug Tool

The Bluesky Debug tool provides a graphical interface for inspecting repository data. It requires no command-line knowledge.

  1. Open Bluesky Debug
    Go to bsky-debug.vercel.app in your browser.
  2. Enter Your Handle or DID
    Type your Bluesky handle or DID into the search box and click Lookup.
  3. Review the Repository Info
    The tool shows a table with repository properties. Look for the repoLocked row. A green checkmark or true means the repository is locked.

If Bluesky Still Has Issues After the Main Fix

Migration Status Shows ‘In Progress’ for Days

If the migration status in Settings still says In progress after 24 hours, the lock may not have been applied. This usually happens when the migration command did not reach the old repository or the new repository rejected the handshake. Contact Bluesky support through the Help Center and provide your DID and the timestamp of the migration attempt.

You Can Still Post From the Old Account

If you can still post, reply, or like from the old account after the migration screen says Complete, the lock has not been applied. Do not use the old account for new posts, because those posts will not transfer to the new repository. Go to Settings > Account > Migration and tap Retry migration. If the button is missing, log out and log in using the new provider credentials, then check the migration page again.

The Debug Tool Shows repoLocked: false After Migration

A false value means the old repository is still writable. This is a rare edge case that can occur if the old repository ignored the lock command due to a protocol version mismatch. The only reliable fix is to migrate again from the new repository. Go to the new provider’s migration page and initiate a new migration using the same DID. The second migration attempt usually forces the lock.

Bluesky Account Migration: Lock Status Comparison

Item Lock Active Lock Not Active
App Settings display Shows “Original repository locked” Shows “Not locked” or no status text
API repoLocked field true false or missing
Ability to post from old account Blocked Allowed
Debug tool indicator Green checkmark or “true” Red X or “false”

Confirming the lock status after a Bluesky account migration takes less than a minute using the app settings. If the lock is not active, retry the migration from the new provider or contact support. Always verify the lock before assuming the old account is safe to abandon. As an advanced tip, you can automate the API check by writing a script that calls com.atproto.repo.describeRepo and alerts you if repoLocked is false.