ID EN PT

ATProto & Portabilitas Data Bluesky 2026: Apa Arti Gelombang Eurosky bagi Kreator

1 Juli 2026 · 9 menit baca · Panduan

Pada paruh pertama 2026, organisasi-organisasi di Eropa secara diam-diam mulai memindahkan data Bluesky mereka dari infrastruktur AppView yang di-host di AS ke stack PDS dan relay yang di-host di Eropa. Waag, sebuah organisasi nirlaba teknologi Belanda, menerbitkan penjelasan yang jelas tentang perpindahan ini pada akhir Juni: mereka menunjukkan bahwa protokol ATProto yang sama dapat berjalan di server Eropa, bahwa kenyamanan GDPR dan latensi yang lebih rendah adalah kemenangan nyata, dan bahwa arsitekturnya akhirnya siap untuk mendukung pemisahan relay multi-region tanpa merusak identitas. Bagi kreator konten sosial, ini adalah momen ATProto berhenti menjadi teoretis dan mulai menjadi praktis. Handle, pengikut, dan arsip Anda dapat bepergian bersama Anda.

Artikel ini membahas apa yang sebenarnya berubah dari gelombang Eurosky bagi kreator yang menulis di Bluesky hari ini, cara membaca postingan Bluesky dari PDS Eropa dengan alat yang sama seperti yang sudah Anda gunakan, dan bagaimana ThreadGrab masuk ke alur kerja arsip portabel yang berfungsi terhadap bsky.app, Eurosky, dan PDS self-hosted. Kami akan membahas tiga bagian ATProto yang perlu Anda pahami (PDS, AppView, relay), ekspor PDS satu perintah, resep langganan firehose yang berfungsi lintas relay, dan skrip Python kecil yang mengubah feed XRPC menjadi arsip Markdown yang dapat dicari secara offline.

TL;DR. Identitas ATProto berada di PDS Anda, bukan di AppView mana pun. Gelombang migrasi Eurosky 2026 adalah perubahan hosting, bukan pendaftaran ulang: Anda tetap mempertahankan DID, handle, dan pengikut, tetapi server yang mendasarinya berpindah dari infrastruktur AS ke UE. Alat read-side apa pun yang berbicara XRPC (termasuk ThreadGrab) berfungsi tanpa perubahan terhadap bsky.app, Eurosky, dan PDS self-hosted. Resep yang paling penting bagi kreator adalah rencana portabilitas 3-langkah: ekspor file CAR dari PDS saat ini, berlangganan ke beberapa relay untuk cakupan firehose penuh, dan konversi output XRPC ke Markdown untuk arsip lokal portabel.

Apa yang sebenarnya diberikan ATProto kepada kreator yang tidak diberikan Bluesky

ATProto (Authenticated Transfer Protocol) adalah protokol terbuka yang menggerakkan Bluesky. Tiga bagian penting bagi kreator: PDS, AppView, dan relay. PDS (Personal Data Server) adalah tempat data akun Anda hidup: postingan, suka, ikuti, blokir, daftar. AppView adalah front-end read-optimized yang membangun feed. Relay adalah stream peristiwa yang menyiarkan postingan baru ke setiap AppView secara real time. Ketiga bagian dapat saling dipertukarkan, dan itulah intinya.

Alasan mengapa gelombang Eurosky menjadi berita nyata bagi kreator yang menulis long-form di Bluesky adalah sederhana: hingga awal 2026, hampir setiap PDS di-host oleh Bluesky Social PBC, dan hampir setiap AppView adalah bsky.app. Hari ini, penyedia PDS yang di-host di UE seperti Black Forest, Greenhost, dan beberapa co-op regional mengoperasikan PDS produksi yang berbicara protokol yang sama, menerima DID yang sama, dan me-resolve handle yang sama. Akun Bluesky yang dibuat di bsky.app dapat dipindahkan ke PDS Eurosky tanpa kehilangan satu pun pengikut, dan endpoint baca publik berfungsi terhadap backend mana pun.

Mengapa gelombang migrasi terjadi pada 2026 (bukan 2024 atau 2025)

Tiga hal berubah pada 2025 dan 2026 yang membuat gelombang Eurosky secara teknis mungkin. Pertama, spesifikasi ATProto mencapai titik stabil di mana format ekspor CAR (Content Addressable aRchive) mencakup status akun lengkap, yang berarti memigrasi PDS tidak lagi memerlukan tooling kustom per penyedia. Kedua, spesifikasi relay terpisah dengan bersih sehingga relay di Frankfurt dapat berlangganan ke relay di Ashburn tanpa menggandakan atau kehilangan peristiwa. Ketiga, Bluesky Social PBC menerbitkan komitmen tertulis bahwa bsky.app resmi akan terus federasi dengan PDS di luar AS, yang menghilangkan risiko hukum bagi organisasi dengan persyaratan ketat tentang residensi data.

Bagi Waag dan pelaku awal lainnya, keputusan ini lebih tentang kepatuhan dan latensi daripada ideologi. PDS yang di-host di UE mengurangi round-trip time bagi pengguna Eropa dari 100-180ms menjadi 10-30ms. Audit GDPR menjadi sepele ketika data tidak pernah meninggalkan UE. Dan pertanyaan moderasi yang membayangi bsky.app sejak 2024 menjadi lebih mudah dijawab ketika PDS dioperasikan oleh organisasi nirlaba dengan kebijakan moderasi yang dipublikasikan.

Tiga bagian yang sebenarnya perlu Anda ketahui

KomponenApa fungsinyaSiapa yang mengoperasikannya (2026)Mengapa penting bagi kreator
PDSMenyimpan akun Anda: postingan, suka, ikuti, blokir, daftarbsky.social (AS), Black Forest (UE), Greenhost (NL), self-hostedBerpindah dengan bebas; DID dan handle Anda ter-resolve di semua PDS
AppViewIndeks read-optimized yang menggerakkan feed, pencarian, notifikasibsky.app (AS), Eurosky AppView (UE, 2026), fork komunitasBeralih AppView tidak mengubah akun Anda, hanya UI-nya
RelayFirehose dari setiap postingan publik, disiarkan ke AppViewbsky.network (AS), eu.relay (UE, 2026), mirror komunitasUntuk cakupan penuh postingan UE, berlangganan ke kedua relay

Insight kunci: akun Anda hidup di satu PDS, tetapi dapat dibaca dari AppView mana pun yang dapat mencapai PDS tersebut, dan ditemukan oleh AppView mana pun yang berlangganan ke relay yang membawa firehose. Tidak ada server pusat, tidak ada pemilik, dan tidak ada lock-in.

Ekspor arsip Bluesky Anda dalam satu perintah

Ekspor resmi Bluesky memberi Anda daftar JSONL dari setiap postingan publik ditambah file CAR dengan repo akun lengkap. Anda dapat menjalankannya dari halaman pengaturan, atau memicu secara terprogram dengan SDK atproto. File CAR adalah aset yang ingin Anda simpan: itu adalah arsip self-contained dan content-addressed yang dapat diimpor ulang oleh PDS atau AppView mana pun. Skrip Python di bawah ini mengekspor file CAR dan memverifikasi hash-nya.

from atproto import Client
import hashlib, sys

client = Client(base_url="https://api.bsky.app")
client.login("you.bsky.social", "your-app-password")

# 1. Request a CAR export of your full repo
export = client.com.atproto.server.requestAccountExport()
print(f"Export job: {export.id}, status={export.state}")

# 2. Wait for it to finish (poll every 30s, up to 10 min)
import time
for _ in range(20):
    job = client.com.atproto.server.getAccountExportStatus(export.id)
    if job.state == "ready":
        break
    time.sleep(30)
else:
    sys.exit("Export did not finish in 10 minutes")

# 3. Download the CAR file and verify
car_bytes = client.com.atproto.server.getAccountExport(job.id, decode=False)
sha = hashlib.sha256(car_bytes).hexdigest()
with open(f"bluesky-export-{job.id}.car", "wb") as f:
    f.write(car_bytes)
print(f"CAR file saved: {len(car_bytes)} bytes, sha256={sha[:16]}...")

Jalankan ini sekali per kuartal dan Anda memiliki backup portabel lengkap. File CAR adalah apa yang akan Anda serahkan ke penyedia PDS baru jika Anda memutuskan untuk bermigrasi ke Eurosky, dan juga merupakan format yang dapat dibaca ThreadGrab secara langsung untuk menghasilkan arsip Markdown yang bersih.

Berlangganan ke beberapa relay untuk cakupan firehose penuh

Setelah pemisahan Eurosky, tidak ada satu relay pun yang mencakup seluruh jaringan. bsky.network masih melayani PDS yang di-host di AS, eu.relay mencakup PDS yang di-host di UE, dan sejumlah kecil relay komunitas menggabungkan keduanya. Bagi kreator yang ingin menemukan dan mengarsipkan postingan dari seluruh jaringan, Anda perlu berlangganan ke lebih dari satu. Resep di bawah ini membuka dua langganan WebSocket secara paralel dan menulis setiap peristiwa ke file JSONL yang dapat Anda grep atau konversi nanti.

import asyncio, json, websockets

async def subscribe_relay(url, out_file, label):
    async with websockets.connect(url) as ws:
        await ws.send(json.dumps({
            "type": "com.atproto.sync.subscribeRepos",
            "wantTlds": ["bsky.social"] if "us" in label else ["eurosky"]
        }))
        with open(out_file, "a") as f:
            async for msg in ws:
                evt = json.loads(msg)
                # Only persist create/post events with text
                if evt.get("action") == "create":
                    rec = evt.get("record", {})
                    if rec.get("$type") == "app.bsky.feed.post":
                        f.write(json.dumps({
                            "did": evt["repo"],
                            "rkey": evt["path"].split("/")[-1],
                            "text": rec.get("text", ""),
                            "created": rec.get("createdAt"),
                            "relay": label,
                        }) + "\n")

async def main():
    await asyncio.gather(
        subscribe_relay("wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos",
                        "firehose-us.jsonl", "us"),
        subscribe_relay("wss://eu.relay/xrpc/com.atproto.sync.subscribeRepos",
                        "firehose-eu.jsonl", "eu"),
    )

asyncio.run(main())

Jalankan selama 24 jam, deduplikasi berdasarkan (did, rkey), dan Anda akan memiliki arsip yang hampir lengkap dari hari sebelumnya di jaringan ATProto. Bagi kebanyakan kreator, deduplikasi menjadi beberapa ratus ribu postingan sudah cukup untuk menangkap setiap balasan dan quote-post yang relevan.

Baca dari PDS atau AppView mana pun dengan kode yang sama

Salah satu kemenangan yang kurang dihargai dari gelombang Eurosky adalah bahwa endpoint baca XRPC berada di tingkat protokol, bukan tingkat server. Kode Python yang sama yang membaca dari bsky.app juga membaca dari PDS Eurosky atau relay self-hosted, selama Anda mengarahkannya ke base URL yang benar. ThreadGrab menggunakan properti ini untuk membaca postingan Bluesky dari backend apa pun yang patuh tanpa perubahan kode, yang berarti kreator dapat berpindah hosting tanpa kehilangan pipeline baca mereka.

from atproto import Client

def read_bluesky_feed(handle_or_did, base_url, limit=50):
    # Read the latest posts from any Bluesky account on any backend.
    client = Client(base_url=base_url)
    profile = client.app.bsky.actor.get_profile({"actor": handle_or_did})
    feed = client.app.bsky.feed.get_author_feed(
        {"actor": profile.did, "limit": limit}
    )
    return [
        {
            "text": item.post.record.text,
            "created_at": item.post.record.created_at,
            "uri": item.post.uri,
            "backend": base_url,
        }
        for item in feed.feed
    ]

# Same code, three different backends
us_posts = read_bluesky_feed("you.bsky.social", "https://api.bsky.app")
eu_posts = read_bluesky_feed("you.eurosky.social", "https://api.eurosky.social")
self_posts = read_bluesky_feed("you.example.com", "https://pds.example.com")

Ini adalah properti yang menjadi sandaran gelombang Eurosky: handle kreator ter-resolve di ketiga backend, dan permukaan API baca identik. 30 baris di atas adalah seluruh cerita migrasi untuk sisi baca.

Konversi ekspor CAR menjadi arsip Markdown portabel

Setelah Anda memiliki ekspor CAR, Anda dapat mengonversinya menjadi arsip Markdown yang dapat dicari dengan beberapa baris Python. Skrip di bawah ini membaca file CAR, menelusuri catatan repo, dan menulis satu file Markdown per postingan ke direktori archive/. Format ini adalah apa yang dihasilkan ThreadGrab secara native untuk X, LinkedIn, dan Bluesky, yang berarti tooling pencarian offline dan diff yang sama berfungsi di ketiga platform.

from atproto.car import read_car
from atproto.xrpc_client import models
import os, pathlib

def car_to_markdown(car_path, out_dir):
    pathlib.Path(out_dir).mkdir(exist_ok=True)
    with open(car_path, "rb") as f:
        car_data = f.read()
    # Walk every record in the CAR file
    records = []
    for cid, block, _path in read_car(car_data):
        rec = models.get_or_create(block)
        if rec.py_type == "app.bsky.feed.post":
            records.append(rec)
    records.sort(key=lambda r: r.created_at)
    for r in records:
        slug = r.created_at.replace(":", "-")[:19]
        fname = f"{out_dir}/{slug}.md"
        with open(fname, "w") as out:
            out.write(f"# {r.created_at}\n\n")
            out.write(r.text + "\n")
    return len(records)

# Convert your Bluesky export
n = car_to_markdown("bluesky-export-12345.car", "archive/bluesky")
print(f"Wrote {n} posts to archive/bluesky/")

Direktori archive/bluesky/ yang dihasilkan adalah teks biasa. Anda dapat meng-grep, melakukan version-control dengan Git, mencari dengan ripgrep, atau memberikannya ke LLM. Alur kerja yang sama berfungsi terhadap thread X, postingan LinkedIn, atau newsletter Substack, yang merupakan inti dari pola arsip portabel.

Apa yang dilakukan ThreadGrab untuk gambaran ini

ThreadGrab adalah alat read-side dalam cerita ini. Ia mengambil URL dari X, Bluesky, LinkedIn, atau URI postingan Bluesky, mengambil postingan, dan mengembalikan Markdown yang bersih. Gelombang Eurosky adalah kabar baik bagi pengguna ThreadGrab karena API baca tidak berubah: ThreadGrab berbicara XRPC, XRPC berfungsi terhadap PDS mana pun, dan jadi postingan yang di-host di Eurosky tidak lebih sulit untuk ditangkap daripada postingan bsky.app. Sudut arsip portabel sama seperti untuk X: Anda harus memiliki salinan dari apa yang Anda tulis, dalam format yang tidak bergantung pada penyedia tunggal mana pun.

Bagi kreator yang bermigrasi ke Eurosky, urutan praktisnya adalah: ekspor file CAR dari PDS saat ini, impor ke PDS baru, dan jalankan ThreadGrab terhadap handle baru untuk mengonfirmasi jumlah postingan cocok. Jika Anda ingin arsip Markdown bersama file CAR, ThreadGrab dapat membaca file CAR secara langsung dan menghasilkan direktori archive/ yang ditunjukkan dalam cuplikan di atas. Kedua format saling melengkapi: file CAR adalah backup otoritatif, dan arsip Markdown adalah lapisan yang dapat dibaca manusia.

Pertanyaan yang sering diajukan

Apa itu Eurosky dan mengapa gelombang migrasi terjadi pada 2026?

Eurosky adalah istilah payung untuk infrastruktur PDS dan relay Bluesky yang di-host di Eropa (misalnya co-op Greenhost dan Black Forest yang muncul pada akhir 2025 dan awal 2026). Gelombang migrasi merupakan kombinasi dari kenyamanan GDPR, latensi lebih rendah bagi pengguna UE, dan ketidakpercayaan yang meningkat terhadap moderasi AppView yang di-host di AS. Ini bukan fork dari Bluesky; ini adalah protokol ATProto yang sama dengan operator infrastruktur yang berbeda.

Apakah keluar dari AppView utama Bluesky berarti kehilangan pengikut saya?

Tidak. Identitas ATProto berada di PDS (Personal Data Server) Anda, bukan di AppView mana pun. DID dan handle Anda ter-resolve di AppView mana pun yang patuh, dan pengikut di bsky.app masih akan melihat postingan Anda melalui AppView mereka sendiri selama PDS Anda dapat dijangkau. Migrasi adalah perubahan hosting, bukan pendaftaran ulang.

Bisakah saya membaca postingan dari PDS Eurosky dengan alat yang sama seperti yang saya pakai untuk bsky.app?

Ya, dengan catatan. Alat apa pun yang berbicara API publik ATProto (XRPC) berfungsi melawan PDS mana pun. Alat yang bergantung pada endpoint khusus bsky.app (misalnya feed generator bsky.social) memerlukan perubahan konfigurasi kecil untuk menunjuk ke relay Eurosky. ThreadGrab membaca endpoint XRPC, sehingga ia bekerja lintas bsky.app, Eurosky, dan PDS self-hosted tanpa penyesuaian.

Apakah arsip Bluesky saya dapat di-ekspor, dan apakah itu salinan lengkap dari postingan saya?

Ya. Ekspor resmi Bluesky memberi Anda daftar JSONL postingan ditambah file CAR dengan repo lengkap. Anda dapat mengimpor ulang ke PDS mana pun, atau mengonversi ke Markdown dengan ThreadGrab untuk arsip lokal yang dapat dibaca. Ekspor tidak termasuk DM, akun yang diblokir, atau konten yang dihapus sebelum tanggal ekspor.

Apakah firehose Bluesky masih berfungsi setelah pemisahan Eurosky?

Ya, tetapi firehose dipecah per relay. Relay bsky.social masih menerbitkan firehose dari setiap postingan di PDS bsky.app. PDS Eurosky menerbitkan ke relay mereka sendiri, dan sejumlah kecil relay komunitas menggabungkan keduanya. Untuk cakupan penuh, Anda harus berlangganan ke beberapa relay atau ke mirror CAR yang di-ekspor.

Haruskah saya memindahkan PDS saya ke Eurosky sebelum menulis tindak lanjut artikel ini?

Tidak untuk artikel ini, tetapi rencanakan perpindahan dalam tiga langkah: (1) ekspor repo Anda saat ini melalui halaman pengaturan resmi Bluesky, (2) sediakan akun PDS Eurosky (handle dapat dimigrasi dengan cool-off 72 jam), (3) impor ulang file CAR. Jadwalkan jendela pemeliharaan 30 menit; pengikut akan melihat routing PDS baru dalam hitungan menit setelah impor.