Skip to content

Bandingkan Teks & Text Diff

Bandingkan dua teks langsung di browser. Tampilan berdampingan, sorotan per kata, ekspor diff terpadu, opsi abaikan kapitalisasi/spasi/baris kosong. 100 % di browser — tanpa upload.

Tanpa Pelacakan Berjalan di Browser Gratis
Semua perbandingan berjalan secara lokal di browser Anda. Teks Anda tidak meninggalkan perangkat ini.
Opsi abaikan
Ditinjau untuk paritas dengan keluaran `diff -u`, kebenaran LCS intra-baris, dan aksesibilitas (peran ARIA, pengumuman perubahan oleh screen reader, penanganan RTL/LTR). — Tim Text Tooling Go Tools · May 21, 2026

Apa itu Text Diff?

Text diff adalah perbandingan terstruktur antara dua dokumen teks yang mencari himpunan terkecil dari penyisipan dan penghapusan untuk mengubah satu menjadi yang lain. Keluarannya membuat perubahan terlihat: hijau untuk baris ditambahkan, merah untuk yang dihapus, side-by-side atau dalam bentuk unified-patch (format `---/+++/@@` yang dipakai `git`, GitHub, dan perintah `patch` di Unix).

Di balik layar, setiap diff modern adalah algoritma Longest Common Subsequence (LCS). Makalah Eugene Myers 1986 dengan kompleksitas O((N+M)D) adalah implementasi efisien yang kanonik; dynamic programming klasik (yang dipakai di sini, dengan pemotongan prefix/suffix yang sama) lebih sederhana dan bekerja sempurna untuk input web tipikal. Setelah baris-baris berbaris, pasangan hapus + tambah yang bertetangga dilewatkan ke LCS kedua di level token sehingga renderer dapat menyorot hanya kata yang benar-benar berubah di dalam baris — itulah yang reviewer sebut intra-line atau word-level diff.

Kenapa tidak sekadar membandingkan string karakter demi karakter? Karena editan jarang datar: menyisipkan satu baris di tengah file 200 baris akan menggeser setiap baris di bawahnya. `===` naif akan menganggap 199 baris berbeda. LCS memberi tahu kebenarannya: satu baris ditambahkan, 199 baris tidak berubah.

Alat ini menjalankan seluruh perbandingan di browser Anda. Tanpa upload, tanpa file sementara, tanpa log. Aman untuk kode proprietary, kontrak yang sedang di-redline, log privat, atau apa pun yang tidak nyaman Anda tempel ke server pihak ketiga. Butuh diff JSON? Gunakan JSON Diff struktural agar urutan kunci dan spasi berhenti menjadi noise. Membandingkan dua konfigurasi dalam YAML atau CSV? Konversi dulu dengan YAML to JSON atau JSON to CSV, lalu diff dengan alat yang tepat untuk formatnya.

// Two strings that look 'mostly the same' but a naïve check disagrees
const a = 'hello world';
const b = 'hello, world!';

// Character equality
a === b; // false — but only 3 characters actually changed.

// LCS-style diff (this tool, at line + word granularity)
// → 1 line modified, inline highlight: 'hello[, ]world[!]'
// → unified patch:
//   --- original
//   +++ modified
//   @@ -1 +1 @@
//   -hello world
//   +hello, world!

Fitur Utama

Side-by-Side + Unified

Beralih antara tampilan visual dua kolom (untuk review manusia) dan format patch unified-diff kanonik (untuk `git apply`, alat code review, laporan bug).

Sorot kata di dalam baris

Saat dua baris dipasangkan sebagai dimodifikasi, hanya token yang berubah membawa latar berwarna. Mata Anda menemukan editan secara instan, bukan menyapu 80 karakter.

Abaikan huruf besar-kecil / spasi / baris kosong

Empat toggle independen: huruf besar-kecil, semua spasi, hanya spasi trailing, baris kosong. Mereplikasi `git diff -i -w -b` dalam dua klik.

Ekspor unified diff

Salin patch `---/+++/@@` yang bersih dengan tiga baris konteks. Langsung jatuh ke komentar PR, laporan bug, atau `patch -p1`.

100% berbasis browser

Input tidak pernah meninggalkan perangkat Anda. Tanpa upload, tanpa analitik atas teks. Bekerja offline setelah halaman dimuat. Aman untuk kode proprietary dan prosa rahasia.

Sadar Unicode + RTL

Memecah token pada batas kata Unicode. Konten Arab, Ibrani, CJK dibandingkan dengan rapi; varian line-ending (CRLF, LF, CR) semua dinormalkan.

Contoh

Code review — satu rename variabel

function getUser(id) {
  const u = db.users.find(x => x.id === id);
  return u;
}
function getUser(userId) {
  const u = db.users.find(x => x.id === userId);
  return u;
}

Tampilan side-by-side menyorot setiap baris yang mengandung rename, sementara diff kata di dalam baris meredupkan token yang tidak berubah sehingga reviewer langsung melihat identifier mana yang berubah.

Edit kontrak — satu klausa ditambahkan

1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
3. Disputes are resolved in California courts.
1. The service is provided as-is.
2. Either party may terminate with 30 days notice.
2a. Termination notice must be in writing.
3. Disputes are resolved in California courts.

Satu klausa sisipan (baris 2a) adalah satu-satunya perbedaan. Baris konteks di sekitarnya tetap bersih — berguna untuk redlining kontrak atau dokumen kebijakan.

Investigasi log — waktu request berubah

GET /api/users 200 14ms
POST /api/orders 201 88ms
GET /api/orders/42 200 21ms
GET /api/users 200 14ms
POST /api/orders 201 4200ms
GET /api/orders/42 500 21ms

Dua baris berubah. Sorot di dalam baris menunjukkan pergeseran latensi 88ms → 4200ms dan kode status 200 → 500. Khas untuk timeline insiden.

Spasi di ujung baris — aktifkan 'Abaikan trailing'

  margin: 0;  
  padding: 0;
  border: none;
  margin: 0;
  padding: 0;
  border: none;

Tanpa opsi tersebut, baris 1 dilaporkan berbeda (ada spasi trailing). Aktifkan 'Abaikan spasi / tab trailing' dan diff menjadi nol — trik yang sama dengan `git diff -b`.

Cara Menggunakan

  1. 1

    Tempel kedua versi

    Teks asli di kiri, teks yang dimodifikasi di kanan. Diff live merender saat Anda mengetik; input besar (>200 KB gabungan) beralih ke tombol Diff manual.

  2. 2

    Aktifkan opsi abaikan yang Anda butuhkan

    Abaikan huruf besar-kecil, abaikan semua spasi, abaikan spasi trailing, atau abaikan baris kosong — masing-masing independen, persist antar kunjungan.

  3. 3

    Baca diff atau ambil patchnya

    Side-by-Side untuk review manusia, Unified untuk format patch `---/+++/@@`. Salin unified diff mengirim patch bersih ke clipboard Anda untuk code review atau `patch -p1`.

Jebakan Diff yang Umum

Seluruh file 'berubah' setelah copy Windows-vs-Unix

Jika Anda menempel dari Notepad di Windows ke original yang diedit di Unix, setiap baris akan menampilkan perbedaan `\r`. Aktifkan 'Abaikan spasi / tab trailing' untuk membungkam karakter CR.

✗ Salah
Diff: 200 modifications (all because of trailing \r)
✓ Benar
Ignore trailing spaces / tabs → 2 real changes

Diff indentasi-saja sedang berteriak

Memformat ulang tab ↔ spasi meledakkan diff baris demi baris. 'Abaikan semua spasi' menciutkan diff ke perubahan semantik yang sesungguhnya.

✗ Salah
Diff: 87 modifications (all are indent changes)
✓ Benar
Ignore all whitespace → 4 actual changes

Paragraf identik ditandai karena satu baris kosong

Menambah atau menghapus satu baris kosong di prosa bisa menggeser-luruskan seluruh wilayah. 'Abaikan baris kosong' memperbaikinya tanpa menyentuh konten.

✗ Salah
Diff: paragraph 2 'completely changed' (one blank line moved)
✓ Benar
Ignore blank lines → no changes in paragraph 2

Diff bilang 'identik' tapi file-nya berbeda

Hampir selalu karena opsi abaikan huruf besar-kecil atau spasi yang tertinggal aktif dari sesi sebelumnya. Buka panel Opsi abaikan — setiap toggle ditampilkan di sana. Matikan semuanya jika Anda ingin perbandingan byte-strict.

✗ Salah
0 differences shown, but `cmp` says the files differ
✓ Benar
Disable all Ignore options → real diff appears

JSON yang ditempel tampak seperti 'semuanya berubah'

Text diff menganggap urutan kunci signifikan; JSON tidak. Untuk payload JSON gunakan alat JSON Diff khusus — ia mengabaikan urutan kunci dan menghormati keketatan tipe.

✗ Salah
Text diff on JSON: 100% of lines changed (just a key reorder)
✓ Benar
<a href="/id/tools/json-diff">JSON Diff</a>: 0 differences

Peringatan diff terpotong diabaikan

Di atas 5.000 baris per sisi, input dipotong. Jika peringatan muncul, beralih ke command line `diff -u file1 file2` atau `git diff --no-index` — keduanya streaming dan menangani gigabyte.

✗ Salah
Pasted a 20,000-line log — only first 5,000 lines diffed
✓ Benar
`diff -u a.log b.log` in terminal handles full file

Skenario Penggunaan Umum

Cuplikan code review
Letakkan dua versi sebuah fungsi ke dalam kotak untuk melihat rename, branch yang dihapus, atau guard clause baru sekilas mata. Sorot kata inline lebih cepat daripada menyapu diff GitHub untuk perubahan satu baris.
Redline kontrak / kebijakan
Tempel kontrak kemarin vs revisi hari ini. Klausa sisipan langsung melompat keluar; paragraf yang tidak berubah menciut jadi abu-abu. Ekspor unified patch untuk jejak review legal.
Investigasi timeline log
Bandingkan irisan log pra-insiden SRE dengan irisan saat insiden. Pergeseran latensi, kode status, dan frekuensi langsung muncul ke permukaan tanpa `awk`.
Revisi draft / prosa
Tempel draft Anda dan versi editor Anda. Diff kata inline menunjukkan persis kalimat mana yang ditulis ulang — tak ternilai untuk menerima atau menolak perubahan satu per satu.
Review terjemahan
Diff terjemahan lama dengan terjemahan ulang untuk memastikan teks baru mempertahankan makna, struktur, dan placeholder. Aktifkan 'Abaikan spasi trailing' untuk membungkam noise yang sering diperkenalkan penerjemah.
Audit file konfigurasi / .env
Bandingkan dua `.env`, `docker-compose.yaml`, atau file shell rc. Dengan 'Abaikan baris kosong' aktif, diff fokus pada perbedaan fungsional ketimbang churn pemformatan.

Detail Teknis

LCS dengan pemotongan prefix/suffix
Baris awal dan akhir yang sama dilepas sebelum menjalankan LCS dynamic programming. Diff 'dua konfigurasi 2.000 baris dengan satu baris berubah' menciut ke tabel DP 1×1 dan dirender di bawah satu milidetik.
Diff intra-baris level token
Hunk hapus + tambah yang bertetangga dipasangkan dan ditokenkan via run kata/non-kata/spasi Unicode. Pass LCS kedua menghasilkan span token hijau/merah yang membuat baris dimodifikasi terbaca.
Unified diff = kompatibel git/patch
Output mengikuti format `---/+++/@@ -L,C +L,C @@` yang didefinisikan untuk GNU patch dan dipakai Git, GitHub, dan setiap alat code review. Terapkan dengan `pbpaste | patch -p0`.
Batas input 5.000 baris per sisi
Di atas batas, diff dipotong dan memberi peringatan. Untuk input multi-megabyte gunakan command line `diff -u` atau `git diff --no-index` — keduanya streaming dan menangani gigabyte.

Praktik Terbaik

Pilih opsi abaikan sebelum membaca
Noise dari trailing space, CRLF, dan huruf besar-kecil menenggelamkan sinyal. Aktifkan opsi yang tepat dulu; diff jauh lebih mudah dibaca dan Anda berhenti melatih diri untuk menyapu lewat perubahan 'palsu'.
Pakai Unified untuk berbagi, Side-by-Side untuk meninjau
Kolom visual untuk mata Anda. Patch unified untuk terminal semua orang. Unified diff yang disalin jatuh ke pesan Slack, komentar Jira, atau `patch -p1` tanpa terjemahan.
Cek kewarasan dengan % kemiripan
Jika dua file 'hampir sama' tapi skor kemiripan 30%, Anda punya masalah line-ending atau spasi. Aktifkan 'Abaikan semua spasi' dan cek ulang sebelum membaca diff.

Pertanyaan yang Sering Diajukan

Apakah teks yang saya tempel dikirim ke server Anda?
Tidak. Setiap perbandingan berjalan di JavaScript di dalam browser Anda. Teks Anda tidak diupload, tidak dicatat, tidak disimpan ke disk, dan tidak dikirim ke pihak ketiga manapun. Hanya preferensi UI (mode tampilan dan toggle opsi abaikan) yang disimpan ke localStorage agar halaman mengingatnya saat kunjungan berikutnya — bukan teksnya. Anda bisa memverifikasi dengan membuka DevTools → Network: tidak ada request yang ditembakkan saat Anda menekan Diff.
Apa beda text diff dengan JSON diff?
Text diff membandingkan baris demi baris — cocok untuk prosa, kode, log, kontrak, file konfigurasi. JSON Diff memahami model data JSON: urutan kunci tidak relevan, tipe data ketat, array bisa dicocokkan berdasarkan kunci. Jika Anda menempel JSON ke text diff, perubahan urutan kunci dan perbedaan spasi akan ditandai sebagai perubahan; JSON Diff mengabaikannya. Pakai text diff untuk konten tak terstruktur, JSON Diff untuk respons API dan payload konfigurasi.
Bagaimana cara mengabaikan spasi, huruf besar-kecil, atau baris kosong?
Klik panel 'Opsi abaikan' di atas hasil diff. 'Abaikan huruf besar-kecil' membuat A dan a setara. 'Abaikan semua spasi' menggabungkan setiap spasi, tab, dan newline sebelum perbandingan. 'Abaikan spasi / tab trailing' hanya memangkas spasi di akhir baris — perilaku standar `git diff -b`. 'Abaikan baris kosong' membuang baris yang hanya berisi spasi atau kosong sebelum perbandingan. Setiap opsi independen dan tersimpan antar kunjungan.
Apa itu unified diff (dan kapan saya menyalinnya)?
Unified diff adalah format teks `---/+++/@@` yang dipakai oleh `patch`, `git apply`, GitHub PR, dan sebagian besar alat code review. Klik Salin unified diff untuk mendapatkan patch dengan tiga baris konteks di sekitar setiap perubahan — tempel ke laporan bug, komentar code review, atau perintah `patch -p1` dan patch akan diterapkan dengan rapi. Side-by-side untuk manusia, unified diff untuk mesin (dan reviewer kode yang berpikir seperti mesin).
Kenapa diff menampilkan seluruh baris berubah padahal saya hanya mengedit satu kata?
Sebenarnya tidak — perhatikan lebih dekat. Seluruh baris disorot karena ada bagian yang berubah, tapi di dalam sorotan hanya token yang berubah membawa latar terang (hijau untuk tambahan, merah dengan coretan untuk hapusan). Inilah diff kata di dalam baris: konteks baris tetap terbaca sementara mata Anda mendarat tepat di editan. Jika dua baris berturut-turut dimodifikasi, keduanya menampilkan sorot di dalam baris.
Bagaimana penanganan line ending CRLF vs LF?
Keduanya dikenali. Diff memecah pada `\r\n`, `\n`, dan `\r` tunggal, jadi teks Windows CRLF, Unix LF, dan Mac CR lama semuanya berbaris dengan benar. Jika Anda ingin menandai perubahan line ending secara spesifik, biarkan 'Abaikan spasi / tab trailing' tidak aktif — `\r` akan muncul sebagai karakter trailing. Untuk menghilangkan noise line ending sepenuhnya, aktifkan 'Abaikan semua spasi'.
Seberapa besar kedua input bisa?
Diff berjalan di main thread, jadi batas praktisnya sekitar 5.000 baris atau 1 MB per sisi; di atas itu kami memotong dan menampilkan peringatan. Live diff dinonaktifkan di atas 200 KB gabungan dan beralih ke tombol Diff manual. Untuk file multi-megabyte, gunakan command line `diff -u` atau `git diff --no-index` — keduanya streaming dan menangani gigabyte.
Bagaimana dengan diff kode? Apakah tool ini tahu bahasa saya?
Diff bersifat bahasa-agnostik: ia melihat baris dan token, bukan sintaks. Itu fitur untuk cuplikan review, edit konfigurasi, dan patch yang disalin-tempel. Jika Anda butuh diff kode semantik (fungsi yang di-rename lintas file, level AST), gunakan git, tampilan GitHub PR, atau alat structural diff khusus. Untuk 90% situasi code review — melirik sebuah fungsi, membandingkan dua cuplikan — diff baris + kata adalah yang Anda butuhkan.
Kenapa satu editan kadang muncul sebagai baris dihapus plus baris ditambahkan?
Saat terlalu banyak bagian baris yang berubah sehingga sorot level kata tidak berguna, diff melaporkannya sebagai baris hapus + tambah terpisah agar struktur tetap bersih. Heuristik yang sama menghasilkan keluaran yang mudah dibaca untuk penulisan ulang prosa dan blok kode yang ditulis ulang ketimbang diedit. Beralih ke tampilan Unified untuk melihat format pasangan `-`/`+` klasik yang dipakai di patch.
Bagaimana % kemiripan dihitung?
Yaitu jumlah baris yang tidak berubah (setelah menerapkan opsi abaikan) dibagi yang lebih besar antara dua jumlah baris, dibatasi 100%. Dua input identik = 100%. Menambah satu baris baru ke file 100 baris = 99%. Mengganti setiap baris = 0%. Berguna untuk menilai cepat 'ini editan kecil atau penulisan ulang total' sebelum membaca diff.
Bisakah saya membagikan diff ke kolega?
Bisa, dua cara. (1) Klik Salin unified diff dan tempel patch ke chat, Slack, atau komentar PR — siapa pun dengan terminal bisa `patch < clip`. (2) Ambil screenshot panel side-by-side untuk review visual. Kami sengaja tidak menyediakan tombol 'bagikan via URL': itu butuh mengupload teks Anda, yang tidak kami lakukan.
Apakah diff mendukung bahasa kanan-ke-kiri seperti Arab atau Ibrani?
Ya untuk konten teks — baris dan token sadar Unicode. Antarmuka memakai arah CSS logis, jadi pada locale RTL kolom gutter dan baris membalik secara alami. Di dalam sel diff, arah teks mengikuti konten, sehingga string Arab dan Ibrani tampil benar sementara penanda +/- tetap selaras dengan gutter.