WebPush
WebPush adalah library Node.js untuk mengirim notifikasi push ke browser. Mendukung VAPID dan enkripsi payload, kompatibel dengan Chrome, Firefox, Edge. Cocok untuk aplikasi web.
- Kategori
- Backend Development, Communication & Collaboration
- Tech stack
- Node.js, TypeScript
- Lisensi
- MIT
Kenapa Banyak Developer Masih Takut dengan Push Notification?
Pernah nggak sih kamu merasa frustrasi saat mencoba mengimplementasikan notifikasi push di web? Kayaknya simpel, tapi begitu masuk ke teknisnya—VAPID keys, Service Worker, enkripsi payload, plus urusan dengan browser yang berbeda-beda—rasanya langsung pusing. Banyak proyek yang akhirnya menyerah di tengah jalan, atau malah mengandalkan layanan pihak ketiga yang mahal dan bikin data pengguna hilang kendali. Padahal, notifikasi push web adalah fitur wajib di era aplikasi progresif (PWA). Tanpa itu, sulit banget ngajak user balik lagi ke web kamu. Nah, di sinilah lib yang namanya WebPush muncul sebagai penyelamat.
WebPush, dengan tagline “Library Node.js untuk mengirim notifikasi push web yang mudah dan aman”, sebenarnya sudah ada sejak lama. Tapi baru belakangan ini makin populer karena komunitas open-source dan developer independen mulai sadar: kenapa harus pakai FCM atau layanan berbayar kalau bisa self-hosted? Dengan hanya 3.525 bintang di GitHub, WebPush mungkin tidak se-terkenal Express atau Next.js, tapi fungsinya sangat krusial. Ia seperti palu kecil yang pas di genggaman—sederhana, efektif, dan nggak perlu banyak basa-basi.
Masalah Besar yang Nggak Pernah Diurus Browser
Browser sudah menyediakan Web Push API, benar. Tapi API itu cuma setengah jalan. Kamu tetap harus urus sendiri enkripsi data, pembuatan header Authorization, dan koneksi ke push service seperti FCM atau GCM. Belum lagi soal rotasi key dan error handling. Kalau kamu bukan ahli kriptografi, bisa-bisa notifikasi yang dikirim malah gak nyampe atau malah bocor. WebPush hadir untuk mengisi celah itu. Ia membungkus semua kerumitan dalam satu fungsi: sendNotification(). Kamu cukup punya subscription object dari browser, lalu tinggal panggil fungsi itu. Di belakang layar, lib ini mengurus enkripsi dan signing dengan standar Web Push Protocol.
Apa yang membuatnya benar-benar berbeda? Bukan sekadar kemudahan. WebPush ditulis dengan TypeScript (selain tapi juga bisa dipakai di plain Node.js), sehingga tipe data subscription, errors, dan response semuanya jelas. Kamu bisa ngurus payload dalam bentuk string biasa atau buffer yang sudah dienkripsi. Bahkan ada opsi untuk bypass enkripsi jika kamu benar-benar tahu apa yang dilakukan. Ini penting buat developer yang pengen kontrol penuh. Selain itu, library ini tidak bergantung pada layanan tertentu—bisa pakai FCM, bisa juga pakai Mozilla Push Service, atau jika kamu menjalankan server push sendiri. Self-hosted. Ya, kamu bisa mengelola infrastruktur kirim notifikasi sendiri tanpa perantara pihak ketiga.
Fitur yang Bikin WebPush Layak Dilirik
Pertama, VAPID authentication. Ini fitur yang memungkinkan kamu mengidentifikasi server kamu ke browser dan push service. WebPush menyediakan helper untuk membuat public/private key pair secara cepat. Kedua, payload encryption. Standar Web Push mewajibkan semua data payload dienkripsi di sisi server dan didekripsi di client. WebPush menggunakan AES-GCM dengan kunci ephemeral. Nggak perlu diajari kriptografi tingkat lanjut. Ketiga, dukungan untuk multiple push service. Subscription object biasanya berisi endpoint dari FCM, GCM, atau Firefox. WebPush mengirim ke endpoint tersebut tanpa modifikasi. Keempat, TypeScript dukungan penuh—setiap fungsi memiliki deklarasi tipe, sehingga IDE bisa memberi autocomplete yang akurat. Kelima, API yang minim konfigurasi. Cukup install package, import, buat options object berisi subject (mailto), private key, dan public key, lalu panggil webpush.sendNotification(subscription, payload, options). Selesai.
Satu lagi fitur yang sering dilupakan: error handling yang informatif. Kalau subscription sudah expired, server akan mengembalikan status 410. WebPush akan melempar error yang bisa kamu tangkap dan hapus subscription dari database. Sangat membantu menjaga kebersihan data pengguna. Lib ini juga ringan banget—nggak ada dependensi berat, cuma pakai crypto library bawaan Node.js. Jadi cocok buat serverless function, lambda, atau container yang terbatas resource.
Cara Kerja dan Cuplikan Kode Sederhana
Kita lihat sejenak bagaimana implementasi dasarnya. Pertama, pastikan kamu sudah menjalankan Service Worker di frontend yang mendaftarkan subscription. Di backend, install web-push lewat npm. Lalu generate VAPID keys:
node -e "const webpush = require('web-push'); console.log(webpush.generateVAPIDKeys())"
Hasilnya object berisi publicKey dan privateKey. Simpan di environment variable. Di endpoint server, ketika menerima subscription dari client, simpan objek tersebut (biasanya berisi endpoint, keys.p256dh, dan keys.auth) ke database. Saat mau kirim notifikasi, panggil:
webpush.setVapidDetails('mailto:admin@example.com', process.env.VAPID_PUBLIC_KEY, process.env.VAPID_PRIVATE_KEY);
webpush.sendNotification(subscription, JSON.stringify({ title: 'Halo!', body: 'Pesan dari server' }))
Sudah. Enkripsi, header, semuanya diurus. Kamu tinggal handle error—misalnya, jika endpoint mengembalikan 401 atau 410, hapus subscription dari database. Sederhana bukan?
Yang perlu diingat: library ini hanya bertanggung jawab untuk mengirim notifikasi ke push service. Bagian Service Worker di frontend tetap harus kamu tulis sendiri untuk menangani event push dan menampilkan notifikasi ke pengguna. Tapi justru di situlah letak fleksibilitas WebPush—ia tidak mengikatmu dengan framework frontend tertentu. Kamu bangun service worker sesuai kebutuhan.
Kenapa Self-Hosted dan MIT License Bisa Jadi Game Changer
Di dunia yang didominasi oleh SaaS dan API berbayar, WebPush hadir sebagai napas segar. Dengan lisensi MIT, kamu bisa menggunakan, memodifikasi, dan bahkan menjual turunannya tanpa perlu izin khusus. Tidak ada batasan jumlah notifikasi, tidak ada biaya per pengguna. Kamu hanya perlu server (bisa VPS seharga 5 dolar per bulan) dan bandwidth. Untuk startup atau side project, ini lifesaver. Anda punya kendali penuh atas data pengguna—informasi subscription, waktu pengiriman, dan analitik semuanya ada di tanganmu sendiri. Privasi adalah fitur, bukan sekadar compliance.
Apalagi WebPush sudah murni JavaScript/TypeScript. Artinya, kamu bisa menjalankannya di berbagai runtime: Node.js, Bun, Deno (dengan sedikit adaptasi), atau bahkan di cloud functions seperti Vercel dan Cloudflare Workers. Karena tidak ada native binding, bisa di-build menjadi package yang flat. Ini memudahkan continuous deployment dan mengurangi potensi error karena lingkungan yang berbeda.
Komunitas di Balik 3.525 Bintang GitHub
Walau angka bintangnya tidak setinggi library lain, komunitas WebPush cukup solid. Repo resmi (yang dulu dikenal dengan nama web-push) dirawat oleh Marco Castelluccio dan beberapa kontributor. Isu-isu biasanya jawab dalam hitungan hari, dan pull request terus mengalir. Ada juga ekosistem tools pendukung seperti web-push-codelab untuk pembelajaran dan web-push-node untuk integrasi yang lebih dalam. Jika kamu punya masalah dengan kompatibilitas browser tertentu, kemungkinan besar sudah ada solusinya di issue tracker. Tapi jangan harap ada dokumentasi super mewah—library ini memang mengutamakan kesederhanaan. Docs-nya pendek, padat, dan itulah yang membuatnya mudah dipakai.
Kapan Harus Pakai WebPush?
Kalau kamu membuat PWA, aplikasi chat, portal berita, atau dashboard yang butuh update realtime tanpa harus streaming koneksi, WebPush adalah senjata utama. Ia lebih efisien daripada polling atau websocket karena hanya aktif saat server punya data baru. Juga lebih andal daripada email atau SMS. Namun, ada batasan: notifikasi push web hanya bekerja di browser yang mendukung service worker (semua browser modern kecuali beberapa yang lama). Dan tentu saja, pengguna harus memberikan izin terlebih dahulu. Itulah kenapa kamu perlu mengintegrasikannya dengan baik dari segi UX—jangan sampai spam notifikasi.
Apakah ada alternatif? Ada push.js sisi client, tapi itu hanya browser notification, bukan push dari server. Ada juga FCM (Firebase Cloud Messaging) yang gratis tapi bergantung pada Google. WebPush jelas lebih netral dan portabel. Karena sifatnya library, bukan platform, ia bisa dipakai di backend manapun—gak harus Node.js? Sebenarnya iya, karena versi resmi hanya untuk Node.js. Tapi dengan konsep Web Push Protocol yang standar, banyak porting ke Python, PHP, Ruby. Kalau kamu setia di ekosistem JavaScript, WebPush adalah pilihan paling matang.
Kesimpulan (Tanpa Judul H2)
Notifikasi push web bukan lagi barang mewah. Dengan WebPush, kompleksitas protokol yang tadinya bikin developer enggan, kini bisa diurai menjadi beberapa baris kode. Ia ringan, aman, open-source sejati, dan memberikanmu kendali penuh—tanpa jeratan lisensi berbayar. Mulai dari menangani VAPID keys, enkripsi, hingga rotasi key, library ini melakukan semuanya dengan baik. Jadi, jika kamu sudah lelah dengan layanan push yang memonopoli data atau merasa implementasi manual terlalu rumit, coba npm install web-push. Mungkin justru inilah tool yang selama ini kamu cari. Selamat mencoba dan selamat mengirim notifikasi yang relevan, bukan yang mengganggu.