npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

nusaindex

v1.0.0

Published

Validate, parse, and format Indonesian data, with reference data that stays current.

Readme

NusaIndex

Bahasa Indonesia | English

npm Go Reference CI OpenSSF Scorecard License: MIT

Cek, baca, dan format data Indonesia, lengkap dengan data referensi yang selalu terbaru. Untuk Go, TypeScript, terminal, dan agent AI.

NIK, NPWP (termasuk format 16 digit dan NITKU), nomor HP, plat nomor, NIP, NISN, kode bank, wilayah sampai desa, libur nasional dan cuti bersama, hari kerja, dan Rupiah.

Dokumentasi lengkap dan playground ada di nusaindex.haikalmumtaz.com.

Tidak resmi. Tidak berafiliasi dengan Dukcapil, DJP, Komdigi, Polri, Bank Indonesia, atau instansi pemerintah mana pun.

Sesi terminal: nusa nik membaca isi NIK, nusa phone menemukan merek XL, nusa rupiah terbilang mengeja 1.500.000,50, dan nusa mask text menyembunyikan NIK dan nomor HP di dalam kalimat.

Fitur

  • Library Go dan TypeScript asli dengan API yang sama dan hasil yang identik, dikunci oleh test vector bersama
  • Tanpa dependensi runtime dan jalan offline, jadi data penggunamu tidak pernah keluar dari aplikasi
  • Baca isi nomor: wilayah, tanggal lahir, dan jenis kelamin dari NIK, atau merek dan operator dari nomor HP
  • Data wilayah dari Kepmendagri terbaru, kode lama hasil pemekaran otomatis diarahkan ke kode baru, dan setiap dataset tercatat sumbernya di data/manifest.json
  • Libur, cuti bersama, dan hitungan hari kerja untuk gajian, SLA, dan jatuh tempo
  • Format dan terbilang Rupiah, masking data pribadi untuk log, dan data uji yang realistis
  • Skema Zod dan Valibot, CLI, dan server MCP untuk agent AI

Dipakai untuk apa

Formulir layanan publik dan website pemda, pendaftaran sekolah, fintech dan e-commerce, HR dan penggajian, logistik, kepatuhan UU PDP, pengujian, sampai chatbot. Contoh lengkapnya ada di halaman Kegunaan.

Yang tidak dilakukan

NusaIndex cuma mengecek apakah sebuah nomor strukturnya benar. Ia tidak bisa memastikan NIK, NPWP, plat, atau nomor HP itu asli, apalagi siapa pemiliknya. Untuk itu pakai layanan verifikasi resmi.

Instalasi

Go 1.25 ke atas:

go get github.com/haikalmumtaz233/nusaindex

Node.js 22.18 ke atas, Bun, Deno, edge runtime, atau browser modern:

npm install nusaindex
pnpm add nusaindex
bun add nusaindex
deno add npm:nusaindex

Mulai cepat

person, err := nik.Parse("3273275705901349")
if err == nil {
	fmt.Println(person.BirthDate, person.Sex)
}
import * as nik from "nusaindex/nik";

const person = nik.parse("3273275705901349");
if (person.ok) {
  console.log(person.value.birthDate, person.value.sex);
}

Dua-duanya mencetak 1990-05-17 female. Fungsi yang gagal tidak pernah melempar exception. Go mengembalikan error, TypeScript mengembalikan { ok: false, error }. Semua nomor di README ini dibuat dengan fake.

Status

Stabil sejak v1.0.0. API publik mengikuti Semantic Versioning, dan pembaruan data karena regulasi baru dirilis sebagai versi patch.

Command line

Paket nusaindex sudah termasuk perintah nusaindex (alias nusa):

nusaindex nik 3171014501909999
nusaindex rupiah terbilang 1500000.5
nusaindex region search gambir --level district
nusaindex workday add 2026-08-14 3
nusaindex mask text --stdin < app.log > app.redacted.log
nusaindex nik --csv --column nik < customers.csv

Argumen bisa tersimpan di riwayat shell, jadi kirim data asli lewat --stdin atau --csv. Tambahkan --json kalau hasilnya mau dibaca program lain. Exit code-nya 0 kalau semua nilai valid, 1 kalau ada yang tidak valid, dan 2 kalau perintahnya salah.

Server MCP

nusaindex-mcp membuka fitur yang sama untuk agent AI lewat stdio, dengan sepuluh tool yang cuma membaca:

{
  "mcpServers": {
    "nusaindex": { "command": "npx", "args": ["-y", "nusaindex-mcp"] }
  }
}

Di Claude Code cukup satu perintah:

claude mcp add nusaindex -- npx -y nusaindex-mcp

Kalau Claude Desktop di Windows gagal menjalankan npx, pakai "command": "cmd" dengan "args": ["/c", "npx", "-y", "nusaindex-mcp"].

Apa pun yang kamu ketik di chat AI sudah terkirim ke penyedia AI sebelum sampai ke server lokal ini, jadi pakai tool fake untuk demo.

Klien MCP: diminta tiga NIK uji di Kota Bandung, tool fake mengembalikan tiga NIK. Ditanya soal 0859-5257-171, tool parse menjawab +628595257171, nomor seluler XL (XLSmart).

Library validasi

Skema TypeScript ada di subpath tersendiri, jadi zod dan valibot tetap jadi peer dependency opsional:

import { z } from "zod";
import * as id from "nusaindex/zod";

const Customer = z.object({ nik: id.nik(), phone: id.phone(), deposit: id.rupiah() });

nusaindex/valibot punya fungsi yang sama. Pesan error tidak pernah memuat input.

Di Go, daftarkan fungsi Valid ke go-playground/validator. NusaIndex sendiri tidak bergantung padanya:

validate := validator.New()
_ = validate.RegisterValidation("nik", func(fl validator.FieldLevel) bool {
	return nik.Valid(fl.Field().String())
})

type Customer struct {
	NIK string `validate:"required,nik"`
}

Data uji

fake (paket Go, atau nusaindex/fake di TypeScript) membuat NIK, NPWP, nomor HP, NIP, NISN, dan plat yang strukturnya valid dari sebuah seed, dengan hasil yang sama di Go dan TypeScript. Cuma untuk pengujian, karena nomornya bisa saja milik orang sungguhan.

Keamanan

Laporkan celah keamanan secara privat lewat tombol Report a vulnerability di tab Security. Detailnya ada di SECURITY.md.

Lisensi

MIT, untuk kode maupun data. Sumber dan regulasi tiap dataset tercatat di NOTICE dan data/manifest.json.