1 poin oleh GN⁺ 2026-02-17 | 1 komentar | Bagikan ke WhatsApp
  • Format file arsip HTML tunggal yang memungkinkan browser web melakukan lazy-loading secara efisien, sehingga dapat merangkum semua aset sekaligus mencapai sifat statis, tunggal, dan efisien secara bersamaan
  • Menggabungkan HTML asli dan aset dalam bentuk tarball di belakang header HTML dan JavaScript, lalu JS hanya memuat bagian yang diperlukan melalui permintaan HTTP Range
  • Solusi lama seperti SingleFile atau MHTML memiliki sifat statis dan satu file, tetapi kurang efisien; Gwtar menyelesaikan masalah ini
  • Bekerja hanya dengan fitur standar browser tanpa konfigurasi tambahan di sisi server, dan pada beberapa lingkungan seperti Cloudflare ditangani dengan tipe MIME x-gwtar
  • Menjaga preservasi dan aksesibilitas halaman HTML berukuran besar secara bersamaan, sehingga berguna untuk pengarsipan web jangka panjang dan penyimpanan materi riset yang dapat direproduksi

Ikhtisar Gwtar

  • Gwtar adalah format arsip polyglot baru yang terdiri dari satu file HTML, di mana browser hanya memuat bagian yang diperlukan melalui permintaan HTTP Range
    • Digunakan untuk menyediakan arsip HTML besar di Gwern.net
  • JS pada header HTML menghentikan unduhan seluruh file, lalu memuat hanya aset yang diperlukan melalui permintaan parsial (range request)
  • Hasilnya, server hanya menyediakan satu file HTML, tetapi pengguna hanya mengunduh aset yang dibutuhkan
  • Semua fungsi diimplementasikan dengan fitur browser standar sehingga kompatibilitas masa depan tetap terjaga

Trilema arsip HTML

  • Arsip HTML memiliki keterbatasan lama: dari sifat statis, satu file, dan efisiensi, biasanya hanya dua yang bisa dipenuhi sekaligus
    • Contoh: SingleFile bersifat statis dan satu file tetapi tidak efisien, sedangkan WARC statis dan efisien tetapi bukan satu file
  • Snapshot yang dibuat dengan SingleFile memberikan halaman statis yang lengkap, tetapi semua aset di-inline dalam Base64 sehingga ukuran file bisa membengkak hingga ratusan MB
  • Akibatnya, pengguna harus mengunduh seluruh file meskipun hanya melihat sebagian halaman
  • Untuk mengatasi hal ini, Gwern.net sempat memisahkan aset dengan deconstruct_singlefile.php, tetapi konsekuensinya kehilangan sifat satu file

Pendekatan teknis Gwtar

  • Memanfaatkan permintaan HTTP Range agar hanya sebagian file dapat diunduh secara selektif
  • Mengadopsi struktur arsip konkatenasi yang menggabungkan HTML + header JS dengan tarball di belakangnya
  • Dengan perintah window.stop() di JS, unduhan setelah header dihentikan dan hanya aset yang diperlukan yang diminta
  • Browser merendernya seperti HTML biasa, sementara JS mencegat permintaan aset dan mengubahnya menjadi permintaan Range

Pembuatan dan implementasi

  • File HTML SingleFile dapat dikonversi menjadi Gwtar dengan skrip PHP deconstruct_singlefile.php
    • Mendukung rekompresi JPG/PNG/GIF dan penambahan data PAR2 FEC (forward error correction)
  • Setelah JS dijalankan, browser hanya memuat aset yang diperlukan melalui permintaan Range; jika JS dinonaktifkan, mekanisme ini digantikan dengan unduhan seluruh file
  • Karena berbasis standar, tidak memerlukan konfigurasi server atau perangkat lunak tambahan, dan dapat dipulihkan dari satu file kembali menjadi HTML multi-file

Kinerja dan kompatibilitas

  • Jika permintaan Range tidak didukung, seluruh file akan diunduh, tetapi kecepatan masih bisa dibantu dengan kompresi gzip/Brotli
  • Cloudflare menghapus header Range pada respons text/html, sehingga Gwern.net mengatasinya dengan menetapkan tipe MIME x-gwtar
  • Tidak bisa dilihat sebagai file lokal :
    • Hal ini juga berlaku untuk SingleFileZ, karena kebijakan keamanan browser (seperti CORS) memblokir permintaan JS
    • Ini dianggap sebagai trade-off yang dapat diterima, dan penelusuran lokal dapat diatasi dengan mengonversinya ke file yang tidak bergantung pada JS

Fitur ekstensi

  • Di akhir file Gwtar dapat dilampirkan data biner tambahan (misalnya FEC, tanda tangan, metadata)
  • Dengan PAR2, file dapat dipulihkan jika sebagian data rusak
  • Tanda tangan GPG dapat disisipkan dalam bentuk komentar HTML untuk verifikasi integritas
  • Pada versi mendatang direncanakan verifikasi hash aset, prefetch otomatis, kompresi bawaan, dan dukungan multi-halaman

Potensi penggunaan

  • Cocok untuk halaman HTML besar atau penelitian ilmiah yang dapat direproduksi dengan menyertakan dataset riset (misalnya SQLite3)
  • Database dapat dimuat langsung di browser melalui permintaan Range untuk dianalisis
  • Diusulkan sebagai format pengarsipan web yang sekaligus menjamin preservasi jangka panjang dan aksesibilitas

Lisensi dan pengembangan selanjutnya

  • Dokumentasi dan kode Gwtar dirilis ke domain publik CC-0
  • Pada versi mendatang (v2), sedang dipertimbangkan FEC wajib, kompresi bawaan, dukungan multi-dokumen, dan peningkatan deduplikasi

1 komentar

 
GN⁺ 2026-02-17
Komentar Hacker News
  • Hari ini saya baru pertama kali tahu tentang window.stop()
    Fungsi ini menghentikan browser agar tidak lagi memuat resource
    Browser-browser utama sudah mendukungnya lebih dari 10 tahun (dokumentasi MDN, Can I Use)
    Contoh penggunaannya bisa dilihat di screenshot ini
    Detail lebih lanjut saya rangkum di postingan blog saya

    • Jika Anda pengembang SPA, rasanya sulit mengatakan ini lebih baik daripada API seperti document.write atau window.open
      Namun, ini bisa menjadi pendekatan menarik jika Anda ingin mengimplementasikan download atau lazy-loading sendiri dengan logika yang berpusat di server
      Kecuali untuk situasi khusus seperti skrip inisialisasi atau redirect, sulit untuk merekomendasikannya
    • Saya penasaran apakah ini akan kompatibel dengan Claude Artifacts
      Saya menerbitkan file dalam bentuk chunk base64 terkompresi melalui bundler buatan saya sendiri, dan caranya mirip
      Jika ini bekerja di lingkungan berbagi file tunggal seperti itu, saya jadi berpikir platform mungkin akan memblokirnya
    • Saya juga baru tahu fitur ini
      PHP punya fitur serupa, __halt_compiler(), dan saya pernah memakainya untuk menaruh dokumentasi atau data di akhir file tanpa komentar
  • Awalnya ini terasa menarik, tetapi saya mulai ragu ketika melihat format ini tidak bisa dibuka langsung dari file lokal
    Jika ini format untuk pengarsipan, akses lokal seharusnya menjadi salah satu use case utamanya

    • Saya juga berpikir begitu. Saya berharap ini bisa membuka kemungkinan baru dengan memanfaatkan fitur yang sudah ada di browser, seperti asm.js
      Tetapi jika tidak bisa langsung dibuka secara lokal, banyak kelebihannya jadi berkurang (lihat konsep backdoor pilot)
    • Mungkin ini bisa diatasi dengan program viewer atau server HTML statis sederhana
    • Sebenarnya HTML sendiri sudah merupakan format file tunggal yang hebat
      Gambar, CSS, dan JS semuanya bisa di-inline sebagai data-uri, begitu juga font
      Malah rasanya format dokumen pengolah kata akan lebih fleksibel jika memakai HTML
    • Menjalankan server lokal dengan perintah seperti python -m http.server bisa menyelesaikannya dengan mudah
      Bisa juga lewat perintah Claude
  • Jika penulis membaca ini, saya berharap format arsipnya menambahkan field screenshot BASE64, field deskripsi, dan timestamp ISO
    Lebih ideal lagi jika bisa menyimpan beberapa versi dari URL yang sama dan memiliki fitur deduplikasi aset

  • Saya tidak paham kenapa penulis memandang WARC secara negatif
    Justru Gwtar terlihat lebih rumit dan kurang fleksibel

    • Tetapi WARC tidak bisa menyediakan URL yang dapat langsung diklik di browser untuk melihat isinya
    • Alasan lain yang disebut di komentar lain adalah bahwa WARC/WACZ memang statis dan efisien, tetapi tidak bisa langsung ditampilkan sebagai file tunggal, dan memerlukan instalasi yang cukup rumit seperti WebRecorder
  • Saya penasaran kenapa format polyglot ZIP/HTML milik SingleFile disebut “statis dan tunggal tetapi tidak efisien”
    Saya ingin tahu dalam hal apa ia kurang efisien dibandingkan Gwtar

    • Efisiensi yang dimaksud di sini adalah kemampuan untuk mengunduh hanya aset yang diperlukan secara parsial
      Intinya adalah apakah browser bisa mengambil bagian yang diperlukan dengan range request saat diminta, tanpa harus menerima seluruh file lebih dulu
  • Ini ide yang sangat keren
    Saya pikir web app HTML satu file adalah bentuk perangkat lunak yang paling tahan lama
    Contoh yang saya buat adalah FuzzyGraph dan HyperVault

  • Saya juga pernah berpikir untuk mengimplementasikan sesuatu yang mirip di level Service Worker
    Halamannya dibiarkan apa adanya, lalu semua request HTTP dicegat
    Seperti window.stop(), hanya sebagian HTML yang diterima dan sisanya diperlakukan sebagai blob aset
    Jika Service Worker itu sendiri dimasukkan sebagai dataURI, hasilnya bisa menjadi file tunggal yang sepenuhnya mandiri

  • Menarik, tetapi saya kurang paham kenapa lazy load diperlukan untuk file lokal
    Apakah filenya akan sebesar itu? Atau apakah tujuannya mempertahankan fitur yang sudah ada?

    • Sebenarnya targetnya bukan file lokal, melainkan file besar di server HTTP
      range request diperlukan agar bagian yang dibutuhkan bisa diminta tanpa mengambil semuanya dari jaringan
      Tentu saja membaginya menjadi beberapa file lebih umum, tetapi kadang lebih praktis mengelola satu file saja
      Mungkin ini juga terkait dengan struktur situs Gwern berbasis MediaWiki
  • Dulu saya juga pernah membuat sesuatu yang mirip — proyek bernama Zundler, pendekatannya cukup hacky
    Ini juga bekerja secara lokal, tetapi seluruh arsip harus diekstrak lebih dulu di awal

    • Ini tampak seperti arsip HTML statis tunggal seperti SingleFileZ, tetapi dalam bentuk yang mudah dilihat secara lokal
      Namun, saya penasaran bagaimana ia melewati pembatasan keamanan
      Penjelasannya hanya menyebut soal single-origin, jadi saya masih belum benar-benar memahaminya