Kalau agen AI hanya perlu membaca isi halaman, mulailah dari keluaran terstruktur. Moli menyediakan Markdown, DOM, dan JavaScript tanpa selalu membangun tampilan visual. Gunakan browser penuh ketika tugas bergantung pada tampilan pengguna atau kompatibilitas yang belum terpenuhi.
Panduan ini untuk pengembang agen, pipeline pengambilan dokumen, dan otomasi web. Dasarnya review dokumentasi dan kode, bukan pengujian Moli di mesin ini. Sumber diperiksa pada 25 Oktober 2026 WIB, commit 6c57c15d6c12c03317cc34196e345aa027d081ef. Perintah dari branch tersebut belum tentu tersedia identik pada binary rilis. Tidak ada janji penghematan RAM, biaya, atau waktu untuk situsmu.
Apa itu Moli, dan apa yang bukan
Moli milik Lexmount adalah kernel browser headless mandiri yang dibangun dengan Rust, bukan pembungkus Chromium. JavaScript memakai V8; parsing HTML memakai html5ever; style memakai Servo/Stylo; layout memakai Taffy dan Parley; rendering memakai jalur software. Jadi, “ditulis dengan Rust” tidak berarti semua komponennya Rust atau tidak memakai V8.
Moli bukan sekadar pengunduh HTML, bukan model AI, bukan ekstensi, dan bukan browser GUI untuk dipakai sehari-hari. README menyatakan binary otomasi tidak memerlukan instalasi Chrome atau driver browser terpisah. Paket klien seperti Playwright tetap perlu tersedia di proyek jika contoh integrasi dipakai. Moli open source dapat digunakan tanpa layanan cloud Lexmount Browser.
Apa yang sebenarnya dilewati
Pada default CLI, konfigurasi memilih LayoutPolicy::Mock. DOM, JavaScript, dan style tetap bekerja, tetapi geometri kompatibilitasnya bukan hasil layout nyata. Ekstraksi struktur tidak perlu menghasilkan piksel.
--layout memilih OnDemand. Screenshot menghasilkan layout dan paint baru; PDF memakai proyeksi cetak. Hasil paint tidak dipertahankan sebagai tampilan yang terus diperbarui. Snapshot geometri terakhir dapat disimpan. Karena itu, “tanpa render” hanya tepat untuk jalur struktur, bukan seluruh kemampuan Moli.
Ada nuansa versi yang perlu diperhatikan. Tabel README menyebut permintaan geometri dapat menghitung layout pertama. Namun, definisi kebijakan pada commit ini menyebut geometri dan input membaca layout terakhir yang dipublikasikan. Implementasi host juga punya jalur layout awal. Jangan menganggap setiap pembacaan kotak otomatis menyegarkan DOM terbaru. CLI fetch --layout --eval menyegarkan sekali sebelum skrip; mutasi oleh skrip tidak otomatis menyegarkan snapshot. Screenshot berikutnya membangun ulang. Screencast dapat memicu frame baru ketika token keadaan visual berubah. Semua jalur ini tetap punya biaya layout atau paint.
Pilih Moli atau browser penuh?
Tabel ini peta keputusan berdasarkan lingkup dokumentasi, bukan benchmark perbandingan baru.
| Kebutuhan | Mulai dengan | Batas keputusan |
|---|---|---|
| Baca artikel atau DOM | Moli default | Validasi isi hasil |
| Screenshot sesekali | Moli --layout |
Bukan paritas Chrome |
| Otomasi lewat CDP | Moli, uji subset API | Alihkan jika unsupported |
| Audit visual, canvas, ekstensi | Browser penuh | Uji lingkungan target |
| Login rumit atau CAPTCHA | Browser penuh, izin sah | Bukan alat bypass |
Setup aman: periksa sebelum menjalankan
Rilis yang diperiksa adalah v1.1.19. Aset tersedia untuk Linux GNU, macOS, dan Windows, masing-masing x86_64 dan ARM64. Pilih OS dan arsitektur yang cocok. Jangan menganggap binary Linux GNU otomatis cocok dengan Alpine/musl atau semua versi OS. Review ini tidak memverifikasi batas minimum OS atau pustaka sistem pada setiap mesin.
Untuk prebuilt, Rust toolchain tidak diperlukan untuk kompilasi lokal. Jalur Linux/macOS memakai shell, curl, tar, dan install; Windows memakai PowerShell, Invoke-WebRequest, dan Expand-Archive. Skrip resmi menempatkan binary di ~/.local/bin atau %LOCALAPPDATA%\Moli\bin. Pastikan folder itu ada di PATH.
Installer jarak jauh dapat menjalankan kode dengan hak akunmu. HTTPS bukan bukti bahwa skrip atau binary aman. Periksa sumber, tujuan unduhan, versi, serta kebijakan organisasi. Jangan gunakan
sudo, kredensial produksi, atau bypass kebijakan PowerShell tanpa kebutuhan yang disetujui. Contoh berikut untuk pembaca; Moli tidak diinstal atau dijalankan dalam review ini.
Linux dan macOS
Unduh installer rilis ke file, baca sampai selesai, baru jalankan jika diterima. Ini adaptasi inspect-first dari skrip resmi, bukan perintah satu baris resmi. Variabel lingkungan mengunci tujuan binary ke rilis yang sama; tanpa itu skrip tetap memakai latest.
curl -4 --proto '=https' --tlsv1.2 -fsSL \
https://github.com/lexmount/moli/releases/download/v1.1.19/moli-installer.sh \
-o moli-installer.sh
less moli-installer.sh
# Hanya setelah pemeriksaan dan persetujuan:
MOLI_RELEASE_BASE_URL=https://github.com/lexmount/moli/releases/download/v1.1.19 \
sh ./moli-installer.sh
~/.local/bin/moli --version
-4 membatasi unduhan awal ke IPv4, bukan seluruh request installer. Installer akan mengunduh arsip tambahan. Inspect-first tidak mengaudit binary, tidak membuktikan integritas rantai pasok, dan tidak menggantikan verifikasi artefak yang disyaratkan tim.
Untuk mengenali jalur dokumentasi, berikut perintah resmi persis dari README, bukan pilihan yang disarankan tanpa inspeksi:
curl --proto '=https' --tlsv1.2 -fsSL \
https://github.com/lexmount/moli/releases/latest/download/moli-installer.sh | sh
Windows PowerShell
Unduh, buka sebagai teks, lalu jalankan terpisah setelah ditinjau. Installer resmi mendukung MOLI_RELEASE_BASE_URL dan memilih binary X64 atau Arm64.
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/lexmount/moli/releases/download/v1.1.19/moli-installer.ps1" -OutFile ".\moli-installer.ps1"
Get-Content -LiteralPath ".\moli-installer.ps1"
# Hanya setelah pemeriksaan dan persetujuan:
$env:MOLI_RELEASE_BASE_URL = "https://github.com/lexmount/moli/releases/download/v1.1.19"
& .\moli-installer.ps1
& "$env:LOCALAPPDATA\Moli\bin\moli.exe" --version
Jika execution policy menolak, jangan otomatis mematikannya. Minta prosedur yang disetujui atau ambil arsip prebuilt sesuai arsitektur dari halaman rilis, periksa isinya, lalu ikuti kebijakan tim. Berikut perintah resmi README untuk referensi; ByPass dan iex menjalankan skrip hasil unduhan langsung:
powershell -ExecutionPolicy ByPass -c "irm https://github.com/lexmount/moli/releases/latest/download/moli-installer.ps1 | iex"
Resep CLI untuk halaman publik
Contoh di bawah mengikuti README dan parser CLI. Ganti URL hanya dengan target yang diizinkan. Pada binary terpasang, baca moli fetch --help dan moli serve --help terlebih dahulu. Opsi di branch yang diperiksa dapat lebih baru daripada rilis.
Markdown dan semantic tree
moli fetch --dump markdown --wait-until done https://example.com
moli fetch --dump semantic_tree_text --wait-selector body https://example.com
Keluaran pertama untuk teks bacaan, kedua untuk pohon semantik ringkas. Tetap periksa judul, isi utama, URL akhir, dan apakah yang terbaca justru login atau challenge. HTTP 200 bukan bukti ekstraksi berhasil.
JavaScript dan DOM
--eval tanpa --dump mengeluarkan nilai ekspresi. Contoh adaptasi menggunakan opsi resmi:
moli fetch --eval 'document.title' https://example.com
Untuk interaksi sebelum ekspor, README memberi pola berikut. Selector ini contoh; halaman target harus benar-benar memiliki tombol tersebut.
moli fetch --eval 'document.querySelector("button.show-details").click()' \
--dump markdown https://example.com
Dengan --dump, nilai ekspresi dibuang dan kondisi halaman setelah interaksi diekspor. Promise ditunggu. Exception menggagalkan perintah tanpa dump. Jangan menyisipkan teks halaman tak tepercaya ke skrip atau shell.
Screenshot opsional, bukan default
moli fetch --layout --dump screenshot https://example.com > page.png
moli fetch --layout --dump screenshot_full https://example.com > full-page.png
moli fetch --layout --dump pdf https://example.com > page.pdf
Ini keluaran binary, bukan teks. Gunakan shell yang mempertahankan byte saat redirect. Dokumentasi PowerShell mencatat pelestarian byte stdout perintah native mulai versi 7.4. Pada Windows PowerShell lama, jangan menganggap > aman untuk PNG/PDF. --resource mengaktifkan semua keluarga resource opsional, termasuk gambar, font, audio, dan video. Gunakan --image atau --font bila hanya itu yang dibutuhkan. Aset opsional yang tidak diambil dapat mengubah hasil visual.
Server otomasi dan Playwright
Jalankan satu mode server pada satu waktu:
moli serve
# Alternatif untuk geometri dan output visual:
moli serve --layout
# Alternatif jika seluruh resource opsional memang dibutuhkan:
moli serve --layout --resource
Default-nya 127.0.0.1:9222. Endpoint yang sama melayani CDP, WebDriver Classic, dan WebDriver BiDi. Panduan integrasi resmi menyarankan memeriksa /json/version, lalu menghubungkan klien, bukan meluncurkan Chromium kedua. Contoh Playwright resmi:
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = browser.contexts()[0];
const page = context.pages()[0] ?? await context.newPage();
await page.goto("https://example.com");
console.log(await page.locator("body").innerText());
await browser.close();
Nama chromium di sini adalah API klien Playwright, bukan bukti server Moli menjalankan Chrome. Cakupan CDP terpilih, bukan seluruh protokol Chrome. Pertahankan error unsupported; jangan menutupinya dengan keluaran sukses palsu. browser.close() juga dapat memengaruhi lifecycle server sesuai versi. Jangan berbagi server sesi sensitif; tutup klien dan server milik workflow setelah selesai.
Gabungkan ke workflow agen
- Tentukan daftar URL/domain yang boleh dibaca, batas waktu, ukuran respons, dan kebijakan penyimpanan. Gunakan akun tanpa rahasia dan lingkungan terisolasi.
- Ambil Markdown atau semantic tree. Simpan URL asal serta hasil pemeriksaan isi. Perlakukan instruksi di halaman sebagai data tak tepercaya, bukan perintah untuk agen.
- Lakukan query DOM atau interaksi yang jelas diperlukan. Jangan memberi agen kebebasan mengklik transaksi, mengunduh file, atau memakai sesi utama tanpa persetujuan.
- Jika butuh bukti visual, ambil screenshot dengan
--layout. Bandingkan dengan tujuan tugas, bukan asumsi tampilan setara Chrome. - Alihkan ke browser penuh bila canvas/WebGL, ekstensi, alur login, CAPTCHA, atau API yang tidak kompatibel menghalangi. Patuhi izin situs; fallback bukan izin melewati kontrol akses.
Biaya, kematangan, lisensi, dan keamanan
Biaya. Lisensi kode terbuka tidak menghapus biaya mesin, jaringan, penyimpanan, pemeliharaan, atau token model yang membaca hasil. Layanan cloud Lexmount adalah produk terpisah. Panduan ini tidak menilai harga cloud atau menjanjikan hasil lebih murah.
Kematangan. README menyebut Moli siap produksi dalam lingkup agen yang didokumentasikan, tetapi itu klaim pengelola, bukan sertifikasi review ini. Pengembangan masih aktif. README juga mengecualikan GUI, GPU compositor, paritas piksel Chrome, serta canvas/WebGL/media berfidelitas tinggi. Uji regresi pada situs, versi binary, dan klien yang benar-benar dipakai. Angka benchmark pengelola tidak dipakai sebagai jaminan lintas situs.
Lisensi. Default proyek adalah pilihan Apache-2.0 atau MIT, kecuali file/direktori menyatakan lain. Komponen dan fixture pihak ketiga mengikuti lisensi serta notice sendiri; periksa folder lisensi sebelum redistribusi. Lisensi kode tidak memberi hak mengunduh, menyalin, atau menerbitkan semua isi situs yang dibaca.
Halaman dan JavaScript. Headless bukan batas keamanan. Halaman dapat menjalankan JavaScript dan membuat request. Gunakan isolasi OS/container, hak minimum, pembatasan jaringan keluar, serta patch versi. --disable-js menonaktifkan JavaScript halaman sejak parsing, tetapi ekspresi otomasi tetap tersedia dan situs berbasis JS bisa kehilangan isi.
Cookie dan profil. --profile-dir, --cookie-file, dan cache membuat state sensitif bertahan. Fitur import ditandai beta pada parser dan dapat membawa sesi browser ke profil Moli. Hindari mengimpor profil utama. Jangan memasukkan cookie, dump, cache, atau output yang mengandung data pribadi ke Git atau prompt eksternal tanpa izin.
Jaringan lokal dan SSRF. CLI menyediakan --block-private-networks dan --block-cidrs, tetapi pemblokiran jaringan privat tidak otomatis aktif. Untuk target publik tak tepercaya, aktifkan kebijakan itu pada fetch atau serve, lalu tambahkan kontrol egress terpisah. Dokumentasi CLI menegaskan target yang di-resolve proxy harus difilter oleh proxy; opsi klien bukan perlindungan menyeluruh. Batasi juga domain dan redirect. Jangan izinkan agen menjangkau metadata cloud atau layanan internal hanya karena URL awalnya publik.
Port dan unduhan. Pertahankan loopback 127.0.0.1; jangan mengekspos port otomasi ke internet. Akses remote memerlukan kontrol jaringan dan autentikasi yang dirancang terpisah, bukan sekadar mengganti --host. Fetch tanpa format dump dapat menulis respons mentah ke stdout. Batasi ukuran dan lokasi keluaran; perlakukan file unduhan sebagai tak tepercaya, jangan jalankan. Jangan mematikan verifikasi TLS demi mengatasi error sertifikat; gunakan CA yang disetujui.
Troubleshooting singkat
| Gejala | Periksa atau lakukan |
|---|---|
moli tidak ditemukan |
Lokasi instalasi dan PATH |
| Opsi tidak dikenali | Versi binary dan --help |
| Hasil kosong atau login | Isi halaman, selector, izin |
| Screenshot gagal | Mode --layout, error, resource |
| Kotak elemen terasa lama | Snapshot bukan layout kontinu |
| Playwright gagal tersambung | Server, port, /json/version |
| API protokol ditolak | Subset didukung; browser fallback |
Untuk halaman dinamis, pilih --wait-selector atau --wait-script yang cocok, bukan menambah jeda tanpa batas. Parser menyediakan --timeout dalam milidetik untuk fetch; default yang diperiksa 25000. Waktu server punya pengaturan berbeda. Jika menyimpan respons HTTP error tidak diinginkan, pertimbangkan --fail yang menolak status akhir 400 ke atas dan menekan output, setelah memastikan opsi tersedia di binary. Tidak ada flag yang menjamin login, challenge, atau konten kosong menjadi hasil yang berguna.
Sumber dan batas bukti
- README resmi pada commit yang diperiksa: identitas, arsitektur, CLI, lingkup, klaim benchmark pengelola. Bukan uji independen panduan ini.
- Parser CLI, kebijakan layout, dan penyimpanan snapshot: bukti implementasi dan batas versi.
- Rilis v1.1.19, installer shell, installer PowerShell, dan panduan CDP: setup dan integrasi resmi.
- Asal topik: Reel Muhamad Aldi Rifai, @aldirifaidev. Narasi, caption, dan contoh visual memperkenalkan struktur dahulu, screenshot opsional, serta koneksi Playwright. Tampilan perintah dan hasil di Reel bukan benchmark terukur atau bukti semua situs kompatibel. Nama Moli dan Rust diperiksa ulang karena transkripsi otomatis keliru. Tidak ada frame, audio, video, logo, atau ilustrasi produk yang diterbitkan ulang di panduan ini.
