Lolly
Uygulamayı Başlat

Veri Aktarımı - lolly-backup demeti

Bir Lolly kullanıcısının biriktirdiği her şey cihazında yaşar - hesap yok, bulut yok. Veri aktarımı demeti bu değerin nasıl taşındığıdır: bir kurulumda dışa aktar, dosyayı herhangi bir yolla taşı (USB, AirDrop, kendine e-posta, bir ağ paylaşımı) ve başka bir kurulumda içe aktar. Aktarım araç dosyanın kendisidir. Hedef çevrimdışı veya çevrimiçi olabilir. Hiçbir fark yaratmaz, çünkü hiçbir zaman bir sunucuyla konuşulmaz.

Bütün bir kurulumu taşıyan iki düğme: Export my data tek bir zip yazar, Import data onu geri okur signed by Lollyvector SVG9 paths~4.9k nodes11 groups56 KBKendin kontrol etİmzalı dosyayı alBütün bir kurulumu taşıyan iki düğme: Export my data tek bir zip yazar, Import data onu geri okur signed by Lollyvector SVG9 paths~4.9k nodes11 groups56 KBKendin kontrol etİmzalı dosyayı al

Bu sayfa biçim spesifikasyonudur. Son kullanıcı için adım adım anlatım için bkz. Çalışmanı bul ve kurtar → Çalışmanı başka bir cihaza taşı. Uygulama shells/web/src/data-transfer.ts dosyasındadır ve tests/data-transfer.test.ts gidiş-dönüş sözleşmesini sabitler.

Kapsam. Bir demet kullanıcı verisini taşır, katalog araçlarını değil. Katalog araçları ve katalog varlıkları ayrı senkronize edilir ve hedefte zaten mevcut olduğu varsayılır (en kötü durumda daha yüksek bir sürümde); kullanıcının kendi yaptığı araçlar profile.json içinde taşınır. İçe aktarma asla bir katalog aracını kurmaz veya yükseltmez.

Hedefler

Zarf

Paket, düz bir .zip dosyasıdır. İndirme, ait olduğu kişinin adına göre adlandırılır - LollyTools-<First>-<Last>-<YYYY-MM-DD>-<n>.zip (örneğin LollyTools-Ada-Lovelace-2026-06-26-1.zip) - böylece bir İndirilenler klasöründeki yedekler okunaklı kalır. Ad ve soyad kısımları profilden gelir ve ayarlanmamışsa atlanır. Profil yoksa LollyTools-2026-06-26-1.zip elde edilir, yalnızca ad varsa LollyTools-Ada-2026-06-26-1.zip elde edilir. Her kısım dosya adına uygun bir jetona göre temizlenir (Unicode harfler/rakamlar korunur, boşluklar/noktalama işaretleri kaldırılır, 32 karakterle sınırlandırılır). <n>, güne ve cihaza özgü bir sıra numarasıdır, böylece aynı gün yapılan tekrar dışa aktarımlar çakışmaz ve sırasını korur. shells/web/src/data-transfer.ts içindeki backupFilename() fonksiyonu adı oluşturur. Zip'in içeriği, ada bakılmaksızın aynıdır. İçinde:

YolGerekliİçerik
manifest.jsonevetBiçim kimliği, sürümler, sayılar ve parça başına bütünlük. Bir okuyucunun ilk baktığı şey.
profile.jsonayarlıysaKullanıcının tüm me kaydı: ad, iletişim, profil fotoğrafı referansı ve bayraklar, artı klasörler, çöp kutusu, proje şablonları, kullanıcı şablonları ve kullanıcı tarafından yapılan araçlar, favoriler, gizli araçlar, dil ve emoji seçimi. host.profile üzerinden okunur.
sessions.jsonevetKaydedilmiş her oturum: yuva, araç kimliği/sürümü, etiket, küçük resim (veri-URL) ve tam girdi verisi. host.state üzerinden okunur.
assets.jsonevetYüklenen her varlığın (görseller, yazı tipleri, marka jetonları, logolar, indirmelerin kaydedilmiş kopyaları) meta verisi, her biri assets/blobs/ altındaki baytlarına işaret eder.
assets/blobs/<n>.<ext>varlık başınaHam varlık baytları (görsel ve yazı tipi dosyaları). Sıkıştırılmadan saklanır (biçimler zaten sıkıştırılmıştır). Uzantı kozmetiktir. assets.json içindeki MIME yetkilidir.
assets/blobs/<n>.c2pamevcutsaVarlık kaydındaki _credentialFile tarafından referans verilen, tam ikili baytlar olarak ayıklanmış Content Credentials. Bunlar cihaz imzalama anahtarları değildir.
design-systems.jsonmevcutsaBu kurulumda oluşturulan veya eklenen tasarım sistemleri, { active, records } olarak. İçe aktarımda kimliğe göre birleştirilir; demetin aktif seçimi yalnızca hedefin kendi tasarım sistemi olmadığında uygulanır.
file-history.jsonisteğe bağlıSürümlenmiş varlık anlık görüntüleri, sonlanmış dosya işlemi raporları ve eksiksiz toplu iş manifestoları. Geçmiş parçasının kendi sürümü vardır; kabuğun dahili fileHistory yedek uyarlayıcısı tarafından sağlanır.
revision-history.jsonisteğe bağlı, elle yedeklerKararlı oluşum kimlikleri, tutulan kontrol noktaları, küçük resimler ve kayan kurtarma taslakları. Desteklendiği yerde host.state.history.backup tarafından sağlanır.
file-history/versions/anlık görüntü başınaGeçerli varlık hâlâ var olsun ya da olmasın, önceki varlık baytları ve ayıklanmış kimlik bilgileri.
file-history/results/tamamlanan işlem başınaTam çıktı baytları. Dönüştürme için seçilmiş hiçbir orijinal dosya tutulmaz veya dahil edilmez.
prefs.jsonevetKullanıcıya ait yerel tercihler: theme, sidebarWidth ve ct-metrics etkinlik sayacı.
lolly.txtevetDemeti Lolly olmadan açan herkes için demetin okunabilir bir özeti (sayılar, profil, dosya adı). Her dışa aktarımda yeniden üretilir ve içe aktarımda tanınır, bu yüzden asla atlanan bir parça olarak sayılmaz. Bütünlük haritasından sonra yazılır, bu yüzden onun dışında kalır.

Demet bilerek düz bir zip'tir: herhangi bir taşımayı bozulmadan atlatır ve herhangi bir unzip aracı onu inceleyebilir.

profile.json en küçük parçadır ve bir okuyucunun uygulamada ilk gördüğü parçadır: bir üreticinin bir kez doldurduğu bilgiler, artı araçların bunları kullanmasına izin veren tercih.

profile.json haline gelen Profil ayrıntıları formu: ad, iletişim bilgileri ve portre signed by Lollyvector SVG15 paths~1.2k nodes30 groups1 image40 KBKendin kontrol etİmzalı dosyayı al

manifest.json

{
  "format": "lolly-backup",
  "formatVersion": 3,
  "minReader": 1,
  "app": "lolly",
  "exportedAt": "2026-06-22T09:30:00.000Z",
  "counts": { "profile": true, "sessions": 2, "userAssets": 4, "prefs": 3, "assetVersions": 1, "fileOperations": 1 },
  "integrity": {
    "profile.json": "sha256-…",
    "sessions.json": "sha256-…",
    "assets.json": "sha256-…",
    "assets/blobs/0.bin": "sha256-…",
    "file-history.json": "sha256-…",
    "file-history/versions/0.bin": "sha256-…",
    "file-history/results/0.bin": "sha256-…",
    "prefs.json": "sha256-…"
  }
}
AlanAnlam
formatHer zaman lolly-backup. Bu olmayan bir dosya "bir Lolly yedeği değil" diye reddedilir.
formatVersionBu demetin yazıldığı düzen. Parça kümesindeki veya biçimlerindeki herhangi bir değişiklikte artırılır. Okuyucular bunu kapı olarak kullanmaz.
minReaderBu demeti güvenle içe aktarmak için gereken en düşük okuyucu sürümü. Okuyucuların kapı olarak kullandığı alan budur.
appÜreten uygulama kimliği, tanılama için.
exportedAtDemetin oluşturulduğu ISO zaman damgası.
countsYazarın neyi koyduğu, görüntüleme ve mantık denetimi için.
integrityİsteğe bağlı. manifest.json dışındaki her parçayı, sıkıştırılmamış baytlarının SRI tarzı bir sha256-<base64> özetine eşler.

Sürüm politikası (ileriye dönük uyumluluk)

formatVersion ile minReader arasındaki ayrım, biçimin daha eski kurulumları sahipsiz bırakmadan büyümesini sağlayan şeydir:

Yazarlar için pratik kural: var olan her okuyucu, eklediğini görmezden gelerek yine de doğru şeyi yapacaksa, bu katkısaldır - formatVersion'ı artır, minReader'ı bırak. Aksi halde minReader'ı yükselt.

Bütünlük

manifest.integrity mevcut olduğunda, bir okuyucu listelenen her parçanın SHA-256'sını hiçbir şey yazmadan önce doğrular. Bir uyumsuzluk ("bütünlük kontrolünde başarısız oldu") veya eksik bir parça ("eksik") tüm içe aktarımı durdurur - kısmi bir geri yükleme yoktur. Bu, bir dosya taşımanın yol açabileceği bozulmayı yakalar (kesilmiş bir AirDrop, eki yeniden kodlayan bir e-posta ağ geçidi, kötü bir USB sektörü).

Bütünlük, tasarım gereği en iyi çaba temellidir: yalnızca Web Crypto mevcut olduğunda yazılır (her güvenli tarayıcı bağlamı ve modern Node), ve yalnızca hem harita hem de Web Crypto mevcut olduğunda doğrulanır. Haritası olmayan bir demet - örneğin bütünlük özelliğinden önceki bir demet - değişmeden içe aktarılır. "Doğrulanamıyor" asla "bozuk" olarak ele alınmaz.

Manifesto ne kendisini ne de yeniden üretilen lolly.txt README'sini listeler. Özetler manifestonun teyit ettiği parçaları kapsar.

İçe aktarma anlambilimi

İçe aktarma bir birleştirmedir, asla tümünü değiştirme değildir:

Kaydedilmiş oturumlar görsellerine otomatik olarak yeniden bağlanır: varlık referansları kimliğe göre tutulur ve köprü, yüklenen görseller geri yüklendikten sonra bunları yeniden çözer (zaten öyle yapmak zorundadır, çünkü blob: URL'ler bir yeniden yüklemeyi atlatmaz).

İçe aktarma özeti { profile, sessions, userAssets, prefs, skipped, failedAssets } bildirir. failedAssets, geri yüklenemeyen yüklenmiş varlıkları sayar (cihaz depolaması dolu, mesela). Bu, ileriye dönük uyumlu daha yeni bir yazarın parçalarını bu derlemenin tanımadığını sayan skipped'den farklıdır. Arayüz skipped'i gösterir ("… · N daha yeni öge atlandı"), böylece geri yükleme neyi geride bıraktığı konusunda dürüst olur.

Dosya geçmişi mevcut olduğunda, özet ayrıca assetVersions, fileOperations ve failedHistory'yi de taşır. Depolama tükenmesi veya değişmez kimlik çakışmaları kısmi bir geri yüklemeye neden olabilir; arayüz kullanıcıya kaynak yedeği saklamasını söyler. Bulut senkronizasyonu, kısmi veya desteklenmeyen bir geri yüklemeden sonra uygulanan revizyonunu ilerletmez, bu yüzden anlık görüntü yeniden denemek için kullanılabilir kalır. Geri yükleme, tüm profil/oturum/varlık/geçmiş depoları boyunca tek bir işlem değildir.

Oluşum geçmişi (v3)

Geçmiş özelliğine sahip bir web sunucusundan gelen elle yedekler, kendi { version: 1, documents, revisions, recoveries } şemasına sahip revision-history.json'ı içerir. Tutulan kimlikleri, standart girdi anlık görüntülerini, sürüm damgalarını, raster önizlemeleri ve ayrı yazar taslaklarını taşır. Geçmiş uyarlayıcısı, geçerli oturumları ve başlarını tek bir okuma işleminde yakalar; sessions.json, eski okuyucular için aynı geçerli anlık görüntüleri kullanır.

Geri yükleme, arşivi tek bir işlemde onaylamadan önce yükün SHA-256'sını ve bayt sayılarını, benzersiz kimlikleri, belge/baş ilişkilerini, soyu, zaman damgalarını, önizleme türlerini ve sınırları denetler. Sıkıştırılmış üst referanslar bulunmayabilir. Var olan geçerli çalışma asla sessizce değiştirilmez: bir oluşum her iki tarafta da bulunduğunda, geçerli tutulmayan taraf korumalı bir taslak hâline gelir. Arşivin 384 MiB'lik aktarım sınırı açıkça denetlenir ve depolama sınırları, tutulan kontrol noktalarını kısaltmadan uygulanır. Genel yedek hâlâ bellek içi bir ZIP uygulaması kullanır ve akış tabanlı bir arşiv değildir.

Özet, bu içe aktarmanın yalnızca eklediğini sayan revisions ve recoveryDrafts'ı, ve her oluşumun nasıl birleştirildiğini gösteren added, kept, replaced, copies ve hidden'ı ekler. Bu yeteneğe sahip olmayan bir kabuk, sıradan oturumları geri yükler ve geçmiş parçasını atlandı olarak bildirir. Yerel dosya sistemi geçmişi, uyarlayıcısı kalıcı geçmiş işlemleri sağlayana kadar desteklenmeden kalır. P2P misafir durumunun kalıcı bir geçmişi veya kurtarma arşivi yoktur.

Kişisel anlık görüntü senkronizasyonu, oluşum geçmişini açıkça hariç tutar. Bir anlık görüntüyü geçmişi olan yerel bir belgeye uygulamak, önceki çalışma durumunu ayrı bir kurtarma taslağı olarak korur ve açık herhangi bir düzenleyicinin yazma jetonunu geçersiz kılar. Değişmez kontrol noktaları cihazda kalır. Bu, anlık görüntü değişimi sırasında yerel geçmişi korur; eşzamanlı cihaz geçmişlerini birleştirmez.

Geçmiş varlık referansları tutulur, ancak render işlemi varlıkları hâlâ hedefin var olan kütüphanesi üzerinden çözer. Bu arşiv henüz tam eski varlık baytlarını veya eski araç render'larını garanti etmez. Varlık sürümü ve dosya sonucu baytları, kendi var olan ayrı yedek parçaları üzerinden yolculuğa devam eder.

Kaydedilmiş sürümler ve dosya sonuçları (v2)

İsteğe bağlı geçmiş parçası { version: 2, assetVersions: [...], operations: [...], batches: [...] }'i içerir; okuyucular ayrıca toplu işler olmadan daha eski history-v1 biçimini de kabul eder. Her anlık görüntü, kararlı varlık kimliğini ve tam sürümü, kaydedilme zamanını, bayt uzunluğunu ve onaltılık SHA-256'yı, artı _file'ı ve isteğe bağlı _credentialFile'ı ikili parçalara işaret eden bir varlık kaydını tanımlar. İşlemler orijinal dosya bilgilerini, isteği, raporu, zaman damgalarını ve isteğe bağlı sonuç _file'ını taşır; depolama arka ucu adları, OPFS tanıtıcıları ve yürütme kiraları taşınmaz. Yalnızca history-v1'i tanıyan eski okuyucular, toplu iş üyeliğini sessizce düşürmek yerine, içe aktarmadan önce yeni geçmiş sürümünü reddeder.

Toplu iş manifestoları, hiç okunmamış dosyalar, iptal edilen üyeler, sonuç alanı ayırma başarısızlıkları ve yarıda kalan çalışmalar dahil olmak üzere, işlemeden önce seçilen her kaynağı kaydeder. Her üyenin kararlı bir işlem kimliği, kaynak referansı/bilgileri, istenen çıktı adı ve sonlanma raporu vardır. Okunmamış bir kaynağın bildirilen bilgileri vardır, uydurulmuş bir özeti değil. İçe aktarma, üye kimliğini ve taşınan herhangi bir işlem raporuyla tutarlılığını doğrular. Bireysel sonuçlar açıkça kaldırıldığında bile toplu iş raporları kullanılabilir kalır, ama bir makbuz çıktı baytlarının hâlâ saklandığı anlamına gelmez.

Eski okuyucular hâlâ v2 zarfını (minReader: 1) kabul eder ve tanıdık parçaları geri yükler, desteklenmeyen geçmiş parçalarını atlandı olarak sayar. Tam geçmiş kurtarma, fileHistory uyarlayıcısına sahip bir kabuk gerektirir; bu, araca yönelik yeni bir HostV1 yeteneği değil, kabuk içi bir dikiştir. Gerçek iki cihazlı geri yükleme yerel Chromium kapısı tarafından kapsanır; kurulu Tauri/iOS/Android kurtarma kabulü ayrı kalır.

Neler taşınmaz

Depolama ölçer aynı ayrımı kalemleştirir. Kaydedilmiş oturumlar, Görsellerim ve File results & versions bir demette yolculuk eder. Varlık önbelleği, Araç önizlemeleri ve altındaki çevrimdışı sabitlemeler hepsi yeniden türetilebilir, bu yüzden geride kalırlar.

Bu cihazın verisini adlandırılmış kategorilere ayıran depolama ölçer, Kaydedilmiş oturumlar ve Görsellerim'in Varlık önbelleğinden ayrı takip edildiği, her kategorinin hâlâ boş olduğu yeni bir kurulumda signed by Lollyvector SVG37 paths~4.9k nodes85 groups65 KBKendin kontrol etİmzalı dosyayı alBu cihazın verisini adlandırılmış kategorilere ayıran depolama ölçer, Kaydedilmiş oturumlar ve Görsellerim'in Varlık önbelleğinden ayrı takip edildiği, her kategorinin hâlâ boş olduğu yeni bir kurulumda signed by Lollyvector SVG37 paths~4.9k nodes85 groups65 KBKendin kontrol etİmzalı dosyayı al

Kabuklar arası garanti

data-transfer.ts, yalnızca yetenek köprüsü (host.profile, host.state, host.assets) ve paylaşılan localStorage tercihleri üzerinden okur ve yazar. Aynı modül, IndexedDB veya dosya sistemi depolaması üzerinden, web'de ve Tauri'de ortak zarfı okur ve yazar. İsteğe bağlı geçmiş parçaları yalnızca ilgili uyarlayıcının bulunduğu yerde görünür; desteklenmeyen bir parça içe aktarımda atlandı olarak bildirilir. Headless test paketi, ortak parçaları bellek içi bir köprüye karşı çalıştırırken, geçmiş işlemlerinin de gerçek tarayıcı testleri vardır.

İki kabuk, farklı nedenlerle bu garantinin dışında kalır:

Ayrılmış genişletme noktaları

Zarf, tasarım gereği bir manifest artı adlandırılmış parçalar kümesidir; böylece taşınabilir yeni veri türleri kırıcı bir değişiklik olmadan daha sonra bu yapıya binebilir. Ek parçalar olarak eklenirler (yeni formatVersion, aynı minReader) ve bugünkü okuyucu tanımadığı şeyi atlar. Bunlar henüz uygulanmadı. Adlar, bu format geldiğinde tutarlı kalsın diye burada ayrılmıştır.

Bu ayrılmış adların ve yukarıdaki parçaların dışındaki her şey, bir okuyucu için bilinmeyen bir parçadır: dokunulmadan bırakılır ve skipped içinde sayılır.

Referans