Dataset wilayah administrasi Indonesia (Provinsi, Kabupaten/Kota, Kecamatan, Kelurahan/Desa) yang telah disanitasi, dinormalisasi, dan dioptimasi untuk konsumsi publik.
Tersedia langsung dari GitHub dalam bentuk Static CDN JSON API (hemat bandwidth untuk cascading dropdown frontend), Relational CSV, dan SQL Dumps siap import.
| Entitas | Jumlah | Format Kode | Contoh Kode | Contoh Nama |
|---|---|---|---|---|
| Provinsi | 37 | 2 digit | 32 |
Jawa Barat |
| Kabupaten / Kota | 514 | 4 digit | 3201 |
Kab. Bogor |
| Kecamatan | 7.272 | 6 digit | 320101 |
Cibinong |
| Kelurahan / Desa | 83.763 | 10 digit | 3201011001 |
Cirimekar (Kode Pos: 16916) |
Catatan Data: Dataset ini merupakan data resmi Valtera yang telah dinormalisasi ke struktur relasional berindeks, dilengkapi pemetaan Kode Pos (PT Pos Indonesia) pada tingkat kelurahan/desa.
Dataset ini dapat langsung di-fetch melalui CDN gratis (jsDelivr) tanpa perlu server backend. Karena jsDelivr melayani file statis, request harus mengarah ke file .json langsung (bukan ke folder induk /dist/api).
| Data | URL Endpoint CDN | Ukuran |
|---|---|---|
| Provinsi | https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/provinces.json |
~2.1 KB |
| Kab/Kota | https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/regencies/{kode_provinsi}.json(Contoh Jawa Barat: .../regencies/32.json) |
~1.5 KB |
| Kecamatan | https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/districts/{kode_kabko}.json(Contoh Kab. Bogor: .../districts/3201.json) |
~2.5 KB |
| Kelurahan/Desa | https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/villages/{kode_kecamatan}.json(Contoh Cibinong: .../villages/320101.json) |
~2.0 KB |
const BASE_URL = 'https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api';
// 1. Ambil daftar provinsi
const provinces = await fetch(`${BASE_URL}/provinces.json`).then(r => r.json());
// 2. Ambil kab/kota setelah provinsi dipilih (contoh: Jawa Barat = 32)
const regencies = await fetch(`${BASE_URL}/regencies/32.json`).then(r => r.json());
// 3. Ambil kecamatan setelah kab/kota dipilih (contoh: Kab. Bogor = 3201)
const districts = await fetch(`${BASE_URL}/districts/3201.json`).then(r => r.json());
// 4. Ambil desa/kelurahan (contoh: Cibinong = 320101)
const villages = await fetch(`${BASE_URL}/villages/320101.json`).then(r => r.json());Dumps SQL telah dioptimasi dengan batch insert (500 baris per query) serta foreign key dan indeks relasional.
File tersedia di folder dist/sql/:
- MySQL:
dist/sql/mysql.sql - PostgreSQL:
dist/sql/postgresql.sql - SQLite:
dist/sql/sqlite.sql
# MySQL
mysql -u username -p database_name < dist/sql/mysql.sql
# PostgreSQL
psql -U username -d database_name -f dist/sql/postgresql.sql
# SQLite
sqlite3 regions.db < dist/sql/sqlite.sqlJika membutuhkan format CSV tabel terpisah per entitas untuk database seeder (Laravel, Django, Prisma, Go) atau analisis data:
dist/csv/provinces.csv(code,name)dist/csv/regencies.csv(code,province_code,name)dist/csv/districts.csv(code,regency_code,name)dist/csv/villages.csv(code,district_code,name,postal_code)
Tersedia juga file kompresi tunggal seluruh data untuk kebutuhan offline:
dist/indonesia-regions.min.json(~6 MB)
erDiagram
PROVINCES ||--o{ REGENCIES : contains
REGENCIES ||--o{ DISTRICTS : contains
DISTRICTS ||--o{ VILLAGES : contains
PROVINCES {
char(2) code PK "Contoh: '32'"
varchar(100) name "Contoh: 'Jawa Barat'"
}
REGENCIES {
char(4) code PK "Contoh: '3201'"
char(2) province_code FK
varchar(100) name "Contoh: 'Kab. Bogor'"
}
DISTRICTS {
char(6) code PK "Contoh: '320101'"
char(4) regency_code FK
varchar(100) name "Contoh: 'Cibinong'"
}
VILLAGES {
char(10) code PK "Contoh: '3201011001'"
char(6) district_code FK
varchar(100) name "Contoh: 'Cirimekar'"
char(5) postal_code "Contoh: '16916'"
}
Repositori ini telah dilengkapi file standar llms.txt agar asisten coding AI dapat langsung membaca spesifikasi, skema relasi, dan pemetaan endpoint CDN secara tepat tanpa halusinasi.
Jika Anda ingin AI (Cursor Composer, Claude Code, GitHub Copilot, ChatGPT) membuatkan kode integrasi, cukup salin prompt berikut:
Gunakan dataset wilayah Indonesia dari repositori https://github.com/danikz/valtera-indonesia-regions (spesifikasi mesin: https://raw.githubusercontent.com/danikz/valtera-indonesia-regions/main/llms.txt).
Tolong buatkan komponen cascading dropdown wilayah bertingkat (Provinsi -> Kab/Kota -> Kecamatan -> Kelurahan/Desa) menggunakan [React / Vue / Flutter / HTML & Vanilla JS].
Aturan implementasi:
1. Fetch data langsung dari CDN publik jsDelivr tanpa perlu backend server:
- Provinsi: https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/provinces.json
- Kab/Kota: https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/regencies/{province_code}.json
- Kecamatan: https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/districts/{regency_code}.json
- Kelurahan/Desa: https://cdn.jsdelivr.net/gh/danikz/valtera-indonesia-regions@latest/dist/api/villages/{district_code}.json
2. Terapkan reset state bertingkat saat parent dropdown berubah nilainya.
Jika ingin memperbarui master data di data/kode_wilayah.csv dan membangun ulang seluruh artefak:
# Menjalankan build generator (JSON CDN, CSV, SQL, Monolith)
python scripts/build.py
# Menjalankan validasi integritas relasi & format data
python scripts/validate.pyDilisensikan di bawah MIT License. Bebas digunakan untuk proyek komersial maupun non-komersial.