Nusantara Languages
Peta 726 bahasa di Indonesia, terhubung ke pohon silsilahnya sehingga setiap cabang menyalakan wilayahnya

- bahasa Indonesia dalam satu peta terhubung
- 726
- rumpun bahasa di pohon silsilah
- 56
- bahasa dengan peta wilayah penutur
- 58%
- pasangan warna rumpun yang diperbaiki untuk buta warna
- 48 → 2
Di halaman ini
Masalahnya
Indonesia punya lebih dari 700 bahasa, salah satu yang terpadat di dunia. Bagi kebanyakan orang, bentuk keragaman itu tidak kelihatan. Bahasa mana yang bersaudara? Bagaimana rumpun-rumpunnya menyebar di kepulauan ini? Peta bahasa sudah ada, pohon silsilah bahasa juga ada, tapi belum ada yang menghubungkan keduanya menjadi satu hal yang bisa dijelajahi.
Saya membangun Nusantara Languages untuk pelajar, linguis, dan siapa pun yang penasaran di mana rumpun-rumpun bahasa Indonesia bertemu. Contoh paling jelas adalah garis pertemuan rumpun Austronesia dan Papua yang melintasi Halmahera. Ini proyek pribadi yang open source. Situs ini tidak berafiliasi dengan "Peta Bahasa" resmi Badan Bahasa, jadi tidak memakai nama maupun tampilannya.
Yang saya bangun
Peta dan pohon silsilah adalah satu objek
Peta dan pohon membaca data yang sama. Arahkan kursor ke satu cabang pohon, dan semua wilayah di kelompok itu menyala di peta. Klik sebuah wilayah, dan pohon bergulir ke sana lalu membuka garis leluhurnya. Karena keduanya membaca satu struktur, keduanya tidak mungkin berbeda. Logika pohon dan geometrinya saya tulis sebagai fungsi biasa, sehingga logika yang paling rumit bisa diuji tanpa browser.
Kecepatan saya ukur sebelum styling
Situs ini statis dan tidak memanggil jaringan saat dibuka. Satu langkah build mengambil sumber data sedunia, menyaring Indonesia, menyederhanakan bentuk wilayah, lalu menulis satu bundle data beserta laporan cakupannya. Sebelum styling apa pun, saya mengukur apakah hover tetap terasa instan dengan 726 bahasa di layar. Hasilnya sekitar 0,01 milidetik dari batas 2 milidetik. Karena itu saya bisa tetap memakai gambar vektor biasa, dan membuat peta serta parser pohonnya sendiri.
Atlas yang direncanakan saya lepas karena lisensinya
Rencananya, wilayah bahasa digambar dari atlas tahun 1980-an, sumber yang diharapkan membuat petanya indah. Saat pengecekan lisensi, ternyata atlas itu hanya boleh dipakai untuk tujuan nonkomersial. Itu bertentangan dengan lisensi terbuka yang dipakai data situs ini. Saya menolak sumber itu, mencatat alasannya di halaman metode, dan beralih ke dua dataset berlisensi terbuka dari rentang 1990 sampai 2020. Era petanya ikut berubah. Ethnologue dilarang sepenuhnya, dan sebuah tes membuktikan tidak ada datanya yang ikut terbit. Kalau suatu angka hanya tersedia di sana, halaman tidak menampilkannya dan menyebutkan hal itu.
Bahasa tanpa wilayah tetap menjadi titik
Dari 726 bahasa, 421 punya peta wilayah penutur. Sisanya, 305 bahasa, tampil sebagai titik berlabel dengan gaya berbeda. Saya tidak meregangkannya menjadi bentuk wilayah supaya peta tampak lengkap. Angka 58% itu dihitung oleh proses build dari datanya, jadi tidak bisa melenceng. Garis pantainya diambil dari dataset geografis, tidak pernah dijiplak dari wilayah bahasa. Warna rumpun saya pilih agar tetap bisa dibedakan oleh tiga jenis buta warna, dan status terancam punah ditampilkan sebagai arsiran di atas warna rumpun.
Hasilnya
Nusantara Languages sudah live dalam bahasa Inggris dan Indonesia, sepenuhnya statis, dan bisa dipakai offline. Selain peta dan pohon, situs ini menjawab tiga pertanyaan dari data yang sama. Bahasa mana kerabat terdekat sebuah bahasa? Seberapa jauh sebuah rumpun menyebar? Austronesia membentang sekitar 5.010 km, Timor-Alor-Pantar sekitar 350 km. Bahasa dari rumpun berbeda mana saja yang bersentuhan? Ada 67 pasang. Setiap jawaban menampilkan aturan dan batasannya di samping angkanya. Pengguna juga bisa mewarnai per subkelompok, mengikuti tur terpandu ke garis-garis pertemuan rumpun, dan mengekspor PNG yang sudah memuat atribusi, sesuai syarat lisensinya. Situs ini menyatakan bahwa batas antarbahasa bersifat bertahap, serta berapa bahasa yang punya wilayah dan berapa yang berupa titik. Saya membangunnya sendiri antara Agustus dan September 2026.
Di balik layarDetail teknis untuk engineer
- Static export Next.js di GitHub Pages; React, TypeScript strict, Tailwind, Zod untuk manifest sumber, Vitest,
tsxuntuk skrip pipeline, pnpm. Tipografinya Newsreader untuk judul dan teks panjang, IBM Plex Sans Condensed untuk label, IBM Plex Mono untuk data dan angka, semuanya di-hosting sendiri lewatnext/font. - Dua bug yang hanya muncul di browser lolos dari type checker dan test suite. Tag
<style>dengan teks anak merusak hydration, diperbaiki dengan beralih kedangerouslySetInnerHTML. Mengelompokkan daratan berdasarkan jenis geometri diam-diam menghilangkan 273 pulau kecil; perbaikannya mengelompokkan berdasarkan ada-tidaknya pulau tetangga. - Tanpa pustaka peta, GIS, Newick, atau topologi. Parser Newick dan plate SVG beserta hit-testing hover-nya ditulis sendiri;
lib/treedanlib/geoberupa fungsi murni yang diuji di Node. sources:buildmengambil data, memeriksa lisensi, menyaring Indonesia, menyederhanakan poligon, mencocokkan silsilah, lalu menulis bundle besertacoverage.json. Dump mentah sedunia tidak pernah di-commit.- Anggaran render M0: 19.570 vertex dari batas 60.000, hover sekitar 0,01 ms dari batas 2 ms, jadi SVG dipertahankan dan canvas tidak diperlukan.
- Gate lisensi mewajibkan setiap sumber mendeklarasikan lisensi yang di-pin dan dicek mesin. Atlas Wurm & Hattori (diterbitkan ulang sebagai GeoJSON oleh Glottography) berlisensi CC-BY-NC-4.0, tidak cocok dengan CC-BY-SA-4.0 milik bundle, dan tercatat di manifest sebagai
decision: 'refused'. Penggantinyaasher2007worlddanschapper2020papuan, keduanya CC-BY-4.0.test:licencememastikan tidak ada field turunan Ethnologue. - Bahasa berbentuk titik memakai koordinat Glottolog, yang sering berupa titik tengah populasi. Convex hull dan isian Voronoi dilarang oleh invarian yang diuji. Garis pantai Natural Earth ditambahkan kembali di tengah proyek setelah pulau-pulau tampak "tergerogoti"; lapisannya
pointer-events-none. - Warna rumpun diambil dari set OKLCH yang dikurasi dan dinilai terhadap tiga jenis buta warna; pasangan warna yang mudah tertukar turun dari 15 menjadi 0 pada penglihatan normal. Saturasi hanya dipakai untuk pilihan yang aktif.
- Aksesibilitas: pohon memakai
role="tree"dengan roving tabindex, satu tab stop, turun dari 1.716 saat terbuka penuh. Beberapa role ARIA tanpa perilaku keyboard yang sesuai (tablist,combobox) dihapus dan diganti elemen HTML bawaan. - Gate yang tidak stabil memakai
Math.max(...samples)terhadap batas 16 ms; hasil yang teramati berkisar 0,57 ms sampai 27,34 ms. - 726 bahasa, 56 rumpun tingkat atas, 23 bahasa isolat. Pasangan yang bersentuhan dihitung dengan cek kedekatan antarsegmen. Anggaran JS: 234 KB gzip di luar geometri, diukur terhadap target 250 KB.
- Sekitar 21.135 baris TypeScript, 579 tes di 37 berkas tes, 18 komponen, sekitar 10 route, 112 commit dari 12 Agustus sampai 27 September 2026.
Tangkapan layar
Sedang merekrut, atau membangun hal serupa?
Saya terbuka untuk posisi full-time dan proyek freelance tertentu.