Perjalanan stabilisasi fzf dari 0.70 sampai 0.74: --popup yang matang di tmux dan Zellij, --listen yang semakin andal, gutter yang bisa dikustomisasi, highlight baris aktif, sampai synchronized update mode yang mengurangi kedipan. Ditutup dengan distribusi modern lewat paket .deb dan binary multi-platform.

Di episode 18 kalian belajar mendiagnosis fzf — dan jawaban yang paling sering muncul adalah "periksa versi dan upgrade". Episode 19 ini justru bercerita tentang arah sebaliknya: ke mana fzf berkembang selama rilis 0.70 sampai 0.74, dan mengapa perjalanan itu relevan bagi kalian. Banyak fitur yang kalian sudah kenal dari episode sebelumnya — --popup di episode 12, --listen dan --track/--id-nth di episode 16 — menjadi stabil dan dewasa di rentang ini, sementara fitur baru lain melengkapi cara fzf tampil di layar.
Bayangkan sebuah stadion yang sedang direnovasi bertahap: fondasi sudah kuat (algoritma pencarian), tetapi tribun penonton, papan skor, dan gerbang masuk diperbarui satu per satu. Seri 0.70-0.74 adalah renovasi itu — bukan perubahan arah, melainkan pemolesan yang membuat pengalaman menyeluruh lebih halus dan lebih siap untuk dipakai di lingkungan produksi.
Episode ini membahas peta perjalanan 0.70-0.74, pendewasaan --popup dan --listen, identitas lintas reload, --gutter dan --highlight-line, synchronized update mode, serta distribusi modern dengan paket .deb dan binary multi-platform.
Sebelum mendalami, mari letakkan peta lengkapnya. Setiap rilis membawa sesuatu yang bernilai:
| Rilis | Highlight Utama |
|---|---|
0.70 | Filtering 1.3x sampai 1.9x lebih cepat; aksi change-with-nth |
0.71 | --popup (tmux dan Zellij); --track/--id-nth; skala linear antar core CPU |
0.72 | Border inline untuk header dan footer; gaya border dashed |
0.73 | Integrasi Nushell; event every(N) dan $FZF_IDLE_TIME |
0.74 | --popup floating pane di tmux 3.7+; event result-final; aksi wait |
0.74.1+ | Synchronized update mode; perbaikan CHA di Zellij; paket .deb |
Perhatikan polanya: performa menguat di awal, antarmuka dan integrasi menyusul, lalu distribusi diakhiri. Fzf dewasa dari dalam ke luar.
--popup Menjadi DewasaDi episode 12 kalian mengenal --popup sebagai nama baru untuk --tmux dengan dukungan Zellij (sejak 0.71). Episode 19 menceritakan kelanjutannya. Di 0.74, --popup di tmux 3.7 ke atas membuka fzf di dalam floating pane, bukan popup modal:
border-native otomatis tersirat.Di Zellij, konsistensi yang sama diterapkan: --popup memakai border native secara default, dan fzf baru menggambar border sendiri jika kalian menyebut --border secara eksplisit:
fzf --popup
fzf --popup --border-label ' fzf '
fzf --popup --borderTip
Aturan praktis yang mudah diingat: --border memaksa fzf menggambar border sendiri, sekaligus mengubah floating pane kembali menjadi popup modal. Jika kalian ingin pane yang bisa digeser dan di-zoom, biarkan --popup memakai border native. Jika kalian ingin tampilan border yang persis sesuai keinginan, terima trade-off menjadi popup.
--listen Semakin Stabil--listen sudah kalian kuasai di episode 16 — server HTTP dan Unix socket untuk mengendalikan fzf dari luar. Di seri 0.70-0.74, jalur ini menjadi semakin andal:
GET / menyertakan field positions pada setiap match — indeks karakter yang cocok, siap dipakai untuk highlight eksternal.O(n^2) (satu request besar sanggup memblokir server single-threaded selama detik) kini efisien.$FZF_SOCK tetap menjadi jalur pilihan untuk komunikasi antar-proses di mesin yang sama, dengan $FZF_API_KEY sebagai kunci autentikasi.fzf --listen 6266
curl -XPOST localhost:6266 -d 'change-query(fzf)'
curl localhost:6266 | jq '.matches[0]'Bagi automation, stabilisasi ini berarti --listen layak dijadikan fondasi permanen workflow — bukan eksperimen.
--track dan --id-nthFitur lain yang lahir di 0.71 dan langsung menjadi standar: --track dengan --id-nth. Sebelumnya, setiap reload dianggap "daftar baru tanpa hubungan" — seleksi multi hilang, kursor meloncat. Dengan field identitas (misalnya PID pada daftar proses), fzf menemukan item yang sama di daftar baru, menjaga kursor, dan mempertahankan seleksi multi lintas reload-sync:
fzf --track --id-nth 1
fzf --track --id-nth ..Karena kita sudah membedahnya tuntas di episode 16, yang perlu diingat di sini adalah statusnya: fitur ini bukan lagi hal baru yang eksperimental, melainkan bagian stabil dari cara fzf berinteraksi dengan daftar yang hidup.
--gutter dan --gutter-rawSekarang kita masuk ke fitur yang lebih visual. Gutter adalah kolom di sisi kiri daftar tempat penanda pilihan berada. Sejak rilis 0.66, kolom ini bisa dikustomisasi dengan --gutter CHAR — mengganti karakter default dengan karakter apa pun yang kalian inginkan, dan mewarnainya dengan --color gutter:...:
fzf --gutter '▎'
fzf --gutter '▚' --color gutter:yellow
fzf --gutter ' ' --color gutter:reverseSementara itu, --gutter-raw CHAR mengatur karakter gutter pada raw mode — mode yang menampilkan item non-match tetap di posisinya dalam keadaan redup. Raw mode memperlihatkan konteks di sekitar hasil pencarian; gutter raw memberi sinyal visual yang membedakannya dari mode biasa:
fzf --bind 'alt-r:toggle-raw' --gutter-raw '▖'Note
Gutter bukan sekadar hiasan — ia adalah kolom informasi: penanda seleksi, pointer, dan status mode tinggal di sana. Dengan --gutter, kalian bisa mengecilkannya (▎), menyesuaikannya dengan tema (--color gutter:yellow), atau menyembunyikannya sama sekali dengan karakter spasi. Pilih sesuai kebutuhan visual, bukan karena tren.
--highlight-line: Sorot Seluruh Baris AktifSecara default, fzf hanya menyorot teks yang cocok di dalam item. --highlight-line menambahkan penyorotan pada seluruh baris aktif — mirip kursor baris penuh — sehingga mata kalian lebih mudah mengikuti posisi di daftar yang padat. Dipadukan dengan warna alt-bg (baris bergantian berwarna latar berbeda), daftar panjang terasa seperti tabel berstrip yang mudah dibaca:
fd -t f | fzf --highlight-line --color bg:237,alt-bg:238,current-bg:236Hasilnya: baris yang sedang disorot berdiri sendiri dengan latar current-bg, baris di atas dan bawahnya bergantian bg dan alt-bg. Efek zebra — sederhana, tetapi meningkatkan kecepatan pemindaian visual secara nyata pada daftar yang panjang.
Sekarang bagian yang paling teknis. Sejak 0.74.1, fzf membungkus setiap frame yang dirender dalam synchronized update mode (mode 2026) — protokol ANSI yang memberi tahu terminal: "tahan semua pembaruan sampai aku bilang selesai". Terminal yang mendukung mode ini tidak lagi menampilkan frame setengah jadi saat fzf menggambar ulang layar.
Hasilnya adalah pengurangan kedipan (flicker) yang terasa terutama pada dua situasi: ketika kursor berpindah cepat antar item dengan preview berat, dan ketika daftar di-reload. Bersamaan dengan itu, fzf mengurangi 10-23% output rendering dengan melewatkan urutan SGR yang berulang — lebih sedikit data dikirim ke terminal, lebih sedikit peluang kedipan.
Tip
Mode 2026 hanya bekerja pada terminal yang mendukungnya. Jika kedipan masih terasa, cek dua hal: terminal kalian (iTerm2, kitty, dan sebagian besar terminal modern mendukungnya), dan versi fzf — pastikan minimal 0.74.1. Di terminal lama, kedipan akan tetap ada; itu bukan bug, melainkan keterbatasan protokol.
.deb dan Binary Multi-PlatformPenutup peta perjalanan ini adalah cara fzf sampai ke mesin kalian. Sejak 0.74.1, setiap rilis menyertakan paket .deb untuk distro berbasis Debian — tidak perlu menunggu versi dari repo distro, tidak perlu build dari source:
curl -LO https://github.com/junegunn/fzf/releases/latest/download/fzf_0.74.1_amd64.deb
sudo dpkg -i fzf_0.74.1_amd64.debSelain itu, setiap rilis menyediakan binary untuk banyak platform — bukan sekadar macOS dan Windows. Cakupannya mencakup arsitektur langka:
| Kelompok Platform | Arsitektur |
|---|---|
| Linux | amd64, arm64, armv5 sampai armv7, loong64, ppc64le, riscv64, s390x |
| macOS | amd64, arm64 |
| Windows | amd64, arm64 |
| Sistem lain | Android (arm64), FreeBSD (amd64), OpenBSD (amd64) |
Bagi engineer yang bekerja di perangkat dan server yang beragam, ini berarti satu toolchain fzf yang sama bisa menemani kalian di laptop, di server ARM, di perangkat Android dengan Termux, hingga di server FreeBSD — tanpa kompilasi manual.
Important
Paket .deb resmi melengkapi cara lama, bukan menggantikannya. apt install fzf, official install script, dan build dari source tetap valid — pilih yang paling cocok dengan kebijakan mesin kalian. Yang berubah adalah ketersediaan: untuk distro Debian-based, versi terbaru kini bisa didapat langsung dari rilis resmi, bukan menunggu package maintainer.
| Kesalahan | Gejala | Solusi |
|---|---|---|
Mengira --popup selalu modal | Floating pane tidak muncul di tmux 3.7+ | Pastikan tmux minimal 3.7 dan jangan tambahkan --border |
Menyebut --border pada --popup | Popup modal, tidak bisa di-resize | Lepas --border agar border native yang dipakai |
| Gutter tidak berubah | Karakter tampil seperti spasi | Gunakan --color gutter:... atau karakter yang terlihat |
| Mengharapkan zero flicker di semua terminal | Kedipan masih ada | Upgrade fzf ke 0.74.1+, cek dukungan mode 2026 terminal |
.deb tidak ditemukan di release lama | Halaman release tidak punya paket | .deb baru tersedia sejak 0.74.1 |
| Mengira Android tidak didukung | Tidak bisa pasang di Termux | Unduh binary android_arm64 dari halaman release |
Pada episode 19 ini kalian menelusuri perjalanan stabilisasi fzf dari 0.70 sampai 0.74: peta rilis yang dimulai dari percepatan filtering; --popup yang matang menjadi floating pane di tmux 3.7+ dengan border native di Zellij; --listen yang semakin andal lewat field positions dan perbaikan O(n^2); --track dan --id-nth sebagai standar pelacakan lintas reload; --gutter dan --gutter-raw untuk kustomisasi visual; --highlight-line dengan strip alt-bg; synchronized update mode yang melawan kedipan; serta distribusi modern dengan .deb dan binary multi-platform termasuk Android dan FreeBSD.
Pesan untuk dibawa pulang: kematangan fzf terlihat dari kecepatan rilis yang tidak pernah berhenti dan distribusi yang semakin mudah. Apa yang dulu butuh build dari source kini tersedia sebagai paket satu perintah — dan fitur yang dulu eksperimental kini menjadi standar.
Setelah memahami ke mana fzf bergerak, pertanyaan berikutnya adalah di mana ia berdiam: di editor dan ekosistem developer. Di episode 20 kita membahas integrasi dengan editor & developer ecosystem — fzf di dalam Neovim (fzf.vim, fzf-lua, telescope.nvim), VS Code, serta bagaimana zoxide, gh CLI, lazygit, bat, dan delta membentuk workflow pengembangan yang mulus.