Menelusuri perjalanan curl dari awal mula sebagai httpget pada 1996 hingga menjadi standar de-facto transfer data berbasis URL yang dipakai di hampir semua sistem operasi, serta memahami mengapa satu tool bisa mengatasi puluhan protokol sekaligus.

Setelah di episode 0 kita menyiapkan environment — memastikan curl 8.21.x terinstall dan terverifikasi — pada episode ini kita akan menarik napas sejenak dari hands-on dan memahami mengapa curl ada. Sejarah dan latar belakang sebuah tool mungkin terasa tidak penting, padahal justru di sanalah letak alasan mengapa desainnya seperti sekarang.
Mengapa harus memahami sejarah curl? Karena curl bukan proyek yang lahir dari ruang rapat perusahaan, melainkan dari sebuah kebutuhan nyata yang sangat sederhana di tahun 1996. Memahami asal-usulnya akan menjelaskan banyak keputusan desain — mengapa curl mendukung puluhan protokol, mengapa ia hadir sebagai CLI sekaligus library, dan mengapa hingga hari ini ia masih jadi pilihan pertama jutaan engineer. Kalian akan menyadari bahwa curl bukan sekadar "perintah untuk download", melainkan sebuah standar de-facto yang berusia lebih dari 25 tahun.
Cerita curl dimulai di Swedia, di tangan seorang pengembang bernama Daniel Stenberg. Pada tahun 1996, Daniel sedang mengerjakan Irssi — sebuah IRC client — dan ingin menyediakan fitur bagi pengguna IRC untuk mengecek nilai tukar mata uang secara otomatis. Untuk itu ia perlu mengambil data dari server berbasis HTTP.
Masalahnya, saat itu belum ada tool yang praktis untuk tugas sederhana tersebut. Alat yang ada terasa berat dan tidak pas. Maka, seperti kebiasaan engineer yang baik, Daniel menulis tool kecilnya sendiri dan menamainya httpget — persis seperti namanya: tool untuk get (mengambil) lewat HTTP.
httpget tumbuh bersama kebutuhan. Pengguna Irssi menginginkan dukungan protokol lain — mulai dari FTP, lalu gopher. Kode httpget mulai "beranak pinak" dan setiap cabangnya membawa salinan masing-masing — sebuah mimpi buruk pemeliharaan. Pada tahun 1998, Daniel mengambil keputusan untuk menyatukan semua cabang itu dalam satu proyek baru yang diberi nama curl — yang secara populer diartikan sebagai Client for URL.
Note
Jangan tertukar: httpget (1996) adalah nama awal tool tersebut, dan curl (1998) adalah nama yang dipakai sampai hari ini. Tanggal lahir yang sering dikutip untuk "curl" adalah tahun 1998 — ketika seluruh kode dirombak dan dipersatukan di bawah satu nama.
Satu keputusan yang mengubah segalanya terjadi di awal 2000-an. Ketika curl semakin populer, orang-orang mulai bertanya: "bisakah saya memakai mesin transfer milik curl di dalam program saya sendiri?"
Daniel menjawab dengan memisahkan inti mesin transfer menjadi sebuah library terpisah bernama libcurl. Sejak saat itu, curl secara resmi terdiri dari dua wajah:
Keputusan ini sangat strategis. libcurl memungkinkan aplikasi lain — browser, aplikasi mobile, server, tool backup — meminjam kemampuan transfer data curl tanpa menulis ulang dari nol. Inilah yang membuat curl bukan sekadar tool populer, tapi fondasi infrastruktur: jutaan aplikasi di seluruh dunia menjalankan libcurl tanpa disadari penggunanya.
curl -L https://example.comPerhatikan contoh di atas: hal yang sama — ambil halaman dan ikuti redirect — di CLI cukup satu baris, sedangkan di libcurl butuh beberapa panggilan API. CLI menyembunyikan semua detail di balik opsi-opsi sederhana; libcurl memberi kontrol penuh bagi pengembang. Kedua wajah ini akan kita bedah lebih dalam di episode 2.
Sejak dipersatukan pada 1998, curl terus dirilis secara konsisten hingga hari ini. Sampai versi 8.21.0, proyek ini sudah menempuh sekitar 275 rilis — hampir satu rilis setiap enam minggu selama lebih dari dua dekade. Ini bukti proyek yang hidup dan dikelola dengan disiplin.
Mengapa curl bisa bertahan dan mendominasi? Beberapa alasan:
Analoginya: seperti TCP/IP atau JSON — teknologi yang jarang disadari kehadirannya, tetapi menjadi standar tak tertulis yang menopang seluruh internet. Curl adalah salah satu dari sedikit tool yang bisa dikatakan "ada di mana-mana".
Inti masalah yang dipecahkan curl sangat sederhana untuk diucapkan, tetapi sulit dikerjakan dengan baik: satu tool untuk mentransfer data lewat URL syntax di berbagai protokol.
Sebelum curl, setiap protokol membutuhkan tool berbeda: ftp untuk FTP, telnet untuk Telnet, dan seterusnya. Curl menyatukan semuanya dengan satu syntax yang sama — URL. Ini dia daftar protokol yang didukung curl 8.21:
| Kategori | Protokol |
|---|---|
| Web | HTTP, HTTPS, WebSocket (ws, wss) |
| File transfer | FTP, FTPS, SFTP, SCP, TFTP |
| SMTP, SMTPS, POP3, POP3S, IMAP, IMAPS | |
| Direktori | LDAP, LDAPS |
| Messaging | MQTT |
| Remote access | TELNET |
| Lainnya | DICT, GOPHER, SMB, SMB (CIFS) |
Dengan satu syntax yang sama, kalian bisa mengirim file ke server FTP dengan curl ftp://..., membaca email dengan curl imap://..., atau berkomunikasi dengan broker MQTT — tanpa berganti tool.
| Skenario | Mengapa Curl |
|---|---|
| Scripting & otomasi | CLI murni, mudah dipanggil dari bash/Python, exit code yang jelas |
| Testing API | Header, method, dan body bisa diatur penuh; output mudah dipipakan ke jq |
| CI/CD | Tersedia di hampir semua image builder dan runner |
| Troubleshooting jaringan | Verbose mode memperlihatkan detail DNS, TCP, TLS, dan HTTP |
Kalian akan menghabiskan sebagian besar series ini dengan curl CLI, jadi mari tetapkan batasnya sejak awal. Cek dulu build kalian — daftar protokol dan fiturnya bisa dibaca lewat curl --version:
Satu hal yang menenangkan: semua yang kalian pelajari di CLI berlaku juga di libcurl. Setiap opsi CLI pada dasarnya adalah pembungkus dari satu pengaturan libcurl — -L adalah CURLOPT_FOLLOWLOCATION, -d adalah CURLOPT_POSTFIELDS, dan seterusnya. Belajar CLI adalah jalan terpendek menuju pemahaman libcurl.
| Tahun | Tonggak |
|---|---|
| 1996 | Daniel Stenberg menulis httpget untuk data nilai tukar di Irssi |
| 1998 | Seluruh cabang kode dipersatukan sebagai curl |
| 2000-an awal | libcurl dipisahkan menjadi library mandiri |
| 2026 | Rilis 8.21.0, sekitar rilis ke-275 |
Pada episode 1 ini, kalian telah menelusuri perjalanan curl dari sebuah kebutuhan sederhana di IRC pada 1996 — httpget — hingga menjadi standar de-facto transfer data berbasis URL yang berusia lebih dari 25 tahun dan berjumlah sekitar 275 rilis. Kalian juga memahami dua wajah curl (CLI dan libcurl) serta permasalahan nyata yang dipecahkannya: satu tool untuk puluhan protokol.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya, kita akan membedah konsep dasar dan arsitektur utama curl — apa yang sebenarnya terjadi di balik satu baris perintah: dari parsing URL, resolusi DNS, koneksi TCP/TLS, hingga pengiriman dan penerimaan data. Kita juga akan mengenal opsi-opsi inti dan bahasa exit code yang akan menemani kalian sepanjang series. Sampai jumpa di episode 2!