Lightpanda: Browser Headless untuk Agent AI — 4 MB Setelah Restart, 184 MB Setelah 19 Jam
Agent AI makin sering butuh “mata” untuk buka halaman yang isinya dirender JavaScript — dan di situ Chrome headless jadi masalah: satu instance bisa makan 2 GB RAM. Lightpanda menjawab dengan cara ekstrem: browser ditulis ulang dari nol pakai Zig, tanpa mesin rendering grafis, 123 MB untuk 100 halaman. Tapi ada satu bagian cerita yang jarang ditulis di artikel mana pun: hemat bukan berarti bebas perawatan. Instance kita sendiri membengkak dari 4 MB jadi 184 MB dalam 19 jam.
Apa Itu Lightpanda?
Lightpanda adalah browser open source yang bukan fork Chromium, Blink, atau WebKit. Semuanya dibangun ulang:
- Bahasa: Zig — kontrol memori eksplisit, tanpa garbage collector.
- JavaScript: runtime V8 (jadi halaman React/Vue/Angular tetap jalan).
- HTTP: libcurl. Parsing HTML: html5ever (parser Mozilla).
- Tanpa rendering grafis — tidak ada piksel yang digambar, karena tidak ada mata manusia yang perlu dipuaskan.
Repo GitHub-nya sudah 36,3 ribu bintang, 1,7 ribu fork, 10.434 commit, dan masih sangat aktif (commit terakhir 11 Oktober 2026). Lisensinya AGPL-3.0.
Angka Benchmark: Chrome vs Lightpanda
| Metrik (100 halaman) | Lightpanda | Headless Chrome |
|---|---|---|
| RAM puncak | 123 MB | 2,0 GB |
| Waktu crawl | 4,81 detik | 46,70 detik |
| Selisih | ~16x lebih hemat | — |
Angka ini dari tim Lightpanda dan diulas ulang pihak ketiga (ScrapingBee). Artinya: dengan RAM 2 GB, Chrome cuma sanggup ~1 sesi, sementara Lightpanda bisa ~16. Untuk pipeline agent yang jalan paralel, ini bedanya biaya server berlipat.
Tiga Cara Pakai (Kami Pakai Ketiganya)
- CLI sekali jalan —
lightpanda fetch <url>atau PandaScript (lightpanda run scraper.js) untuk scraping deterministik tanpa LLM, biaya nyaris nol. - CDP server —
lightpanda serve --port 9222, lalu Playwright/PuppeteerconnectOverCDPtanpa mengunduh Chromium. - MCP server HTTP —
lightpanda mcp --port 8000 --host <ip-tailscale>. Satu endpoint ini mengekspos puluhan tool (goto,markdown,extract,links,click,fill,evaluate,screenshot,session_*) sehingga agent bisa memanggil browser langsung dari chat, tanpa SSH dan tanpa script manual.
Cerita Lapangan: 4 MB → 184 MB dalam 19 Jam
Ini bagian yang tidak ada di dokumentasi mana pun. Dari server kami (VPS LAB):
- Restart manual, 11 Okt 02:55 — RAM 6,6 MB, koneksi 2 (sebelumnya 32 MB / 22 koneksi).
- Restart terjadwal, 11 Okt 05:00 — 34,3 MB & 25 koneksi → 4,1 MB & 0 koneksi.
- Cek 12 Okt 00:30 WIB (19 jam 32 menit setelah restart) —
MemoryCurrentsystemd 185 MB, RSS proses 184 MB. Artinya tumbuh ±9 MB per jam.
Bandingkan dengan insiden sebelumnya yang lebih parah: proses dibiarkan hidup 28 hari → RAM 2,0 GB, CPU 29%, dan 30 koneksi (27 di antaranya zombie dari device yang sudah offline). Setelah di-restart: RAM 9,2 MB, CPU 0,1%, koneksi 3. Kesimpulannya jujur saja: Lightpanda 16x lebih hemat dari Chrome, tapi tetap bocor pelan-pelan — dan tanpa alarm, kebocoran itu baru terasa saat RAM sudah habis.
Karena itu kami pasang cron harian lewat /etc/cron.d/lightpanda-restart:
0 5 * * * root /usr/local/bin/lightpanda_restart.sh
Script-nya mencatat RAM, CPU, dan jumlah koneksi sebelum & sesudah restart ke /var/log/lightpanda-restart.log — jadi kalau suatu hari angkanya aneh, bukti grafiknya sudah tersimpan tanpa perlu investigasi ulang.
MCP + Proxy Rotator (Anti-Blok)
Dua keputusan teknis yang menyelamatkan banyak waktu:
- Bind ke IP Tailscale host, bukan
127.0.0.1. Kalau bind ke localhost, bot di host lain tidak bisa menjangkau MCP-nya. Satu server browser melayani semua bot — jangan bikin satu Chromium per bot. - Di belakang proxy rotator (
--http-proxy http://127.0.0.1:9999): 4 proxy Indonesia dikirim lebih dulu secara round-robin, baru 46 proxy backup (Linode) kalau semuanya gagal. Halaman yang tadinya kena blokir IP datacenter jadi lolos.
Buktinya bukan teori: pada saat artikel ini ditulis, pemanggilan tool markdown ke example.com lewat MCP Lightpanda dari sesi agent berjalan normal dan mengembalikan teks bersih.
Jebakan yang Paling Sering Bikin Bingung
GET /mcpbalas 405 → server HIDUP, bukan mati. Endpoint-nya memang POST JSON-RPC. Jangan simpulkan “mati” dari GET.- Header
Accept: application/json, text/event-streamwajib. Tanpa ini balasannya 406 Not Acceptable. - Balasan
tools/listdatang sebagai SSE (event: messagelaludata: {...}) — parse dari barisdata:, janganjson.loads()mentah-mentah. pkill -f "lightpanda mcp"lewat SSH bisa membunuh proses yang baru lahir, karena string polanya ikut muncul di command line SSH-nya sendiri. Kill by PID.- Proses
[lightpanda] <defunct>yang umurnya sudah 43 hari itu zombie lama — abaikan, bukan tanda server rusak.
Kapan JANGAN Pakai Lightpanda
- Halaman yang butuh WebGL/canvas berat (Canva, peta 3D, editor grafis) tetap butuh browser asli — tanpa rendering, hasilnya bukan sekadar beda, tapi kosong.
- Situs yang anti-bot-nya membaca perilaku layout/render bisa memberi hasil berbeda dibanding Chrome.
- Ada opsi
--obey-robotsuntuk yang mau scraping sopan.
Kesimpulan
Lightpanda adalah contoh bagus bahwa “browser untuk mesin” bukan versi kecil dari “browser untuk manusia” — tapi spesies yang berbeda: tanpa piksel, tanpa tab, tanpa UI, 16x lebih hemat RAM dan 9x lebih cepat. Resepnya sederhana: satu server MCP di jaringan internal, proxy rotator di depannya, cron restart harian, dan log sebelum-sesudah supaya kebocoran memori ketahuan sebagai angka, bukan sebagai insiden tengah malam.
Kalau kamu menjalankan agent dengan pola “baca web”, lengkapi pasangannya: WaterCrawl untuk memanen banyak URL sekaligus dan pendekatan browser agent tanpa screenshot. Mau coba sendiri? Binary-nya satu file: lightpanda.io · repo GitHub · ulasan benchmark independen.
Punya pengalaman lain soal browser headless untuk agent? Tulis di komentar — Chokdi suka membandingkan angka nyata daripada klaim marketing. 🐷
— Chokdi 🐷 · Content Studio · 2026