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 🙏

© 2025 – Pkg Stats / Ryan Hefner

postalcodes-india

v1.1.3

Published

Fast and lightweight Indian postal code (PIN) lookup library with hierarchical location data - states, districts, sub-districts, and coordinates. Zero dependencies and full TypeScript support.

Downloads

366

Readme

postalcodes-india

A lightweight and efficient Indian postal code lookup library with no external dependencies. Compatible with both Node.js and browser/React environments.

npm version Tests npm downloads license bundle size

I try my best to monitor the required dependencies daily and publish updates to the npm package whenever changes are detected.

🔄 Data Last Checked/Updated: 06th November 2025

Features

  • Fast in-memory postal code lookups
  • Multiple lookup methods for different use cases
  • Find postal codes by place, state, and district
  • Find postal codes within a radius of coordinates
  • Returns complete information including state, district, sub-district, and coordinates
  • TypeScript support with full type definitions
  • Zero runtime dependencies
  • Universal compatibility: Works in Node.js, browsers, and React applications
  • Tree-shakable: Import only what you need

Why Choose postalcodes-india?

  • 🚀 Zero Dependencies - No bloat, just pure functionality
  • ⚡ Lightning Fast - In-memory lookups with instant results
  • 🌐 Universal - Same code works in Node.js, React, Next.js, and browsers
  • 📦 Tiny Bundle - Minimal impact on your bundle size
  • 🔄 Always Up-to-Date - Data checked and updated daily
  • 💪 Type-Safe - Full TypeScript support out of the box
  • 🇮🇳 Complete Coverage - All 19,000+ Indian postal codes

Compared to alternatives:

  • Unlike API-based solutions, no rate limits or network latency
  • Unlike other npm packages, we support both Node.js and browsers seamlessly
  • Tree-shakable design - import only what you need

🚀 Try It Now

Live Demo: CodeSandbox Demo

Quick Example:

import postalcodes from "postalcodes-india"

// One line to get complete postal code info
const info = postalcodes.find("560029")
// → { place: 'Bangalore', state: 'Karnataka', district: 'Bangalore', ... }

Looking for US ZIP codes? Check out zipcodes-us 🇺🇸

Installation

npm install postalcodes-india

Usage

In Node.js (ESM)

import postalcodes from "postalcodes-india"

// Complete lookup with validity check
const info = postalcodes.find("560029")
console.log(info)

In Node.js (CommonJS)

const postalcodes = require("postalcodes-india")

// Complete lookup with validity check
const info = postalcodes.find("560029")
console.log(info)

In React

import React, { useState } from "react"
import postalcodes from "postalcodes-india"

function PostalCodeLookup() {
  const [code, setCode] = useState("")
  const [result, setResult] = useState(null)

  const handleLookup = () => {
    const info = postalcodes.find(code)
    setResult(info)
  }

  return (
    <div>
      <h2>Postal Code Lookup</h2>
      <input type="text" value={code} onChange={(e) => setCode(e.target.value)} placeholder="Enter postal code" />
      <button onClick={handleLookup}>Lookup</button>

      {result && (
        <div>
          <h3>Results:</h3>
          {result.isValid ? (
            <ul>
              <li>State: {result.state}</li>
              <li>District: {result.district}</li>
              <li>Sub-District: {result.subDistrict}</li>
              <li>Place: {result.place}</li>
              <li>
                Coordinates: {result.latitude}, {result.longitude}
              </li>
            </ul>
          ) : (
            <p>Invalid postal code</p>
          )}
        </div>
      )}
    </div>
  )
}

export default PostalCodeLookup

In Browser (via CDN)

<script src="https://cdn.jsdelivr.net/npm/postalcodes-india/dist/index.umd.js"></script>
<script>
  // The library is available as a global variable 'postalcodes'
  const info = postalcodes.find("110001")
  console.log(info)
</script>

Tree-shaking (Import only what you need)

import { find, findByRadius } from "postalcodes-india"

// Use specific functions without importing the entire library
const info = find("400001")
const nearby = findByRadius(19.076, 72.8777, 5) // 5km radius around Mumbai

💡 Common Use Cases

Validate Postal Codes

// Check if a postal code is valid
const info = postalcodes.find("560029")
if (info.isValid) {
  console.log(`Valid postal code in ${info.place}, ${info.state}`)
}

Auto-Complete Location from Postal Code

// User enters postal code, auto-fill location details
const { place, district, state } = postalcodes.find(userPostalCode)
addressForm.city.value = place
addressForm.district.value = district
addressForm.state.value = state

Find All Postal Codes in a District

// Get all postal codes for a specific district
const allBangalorePostals = postalcodes.findByDistrict("Bangalore", "29")
console.log(`Bangalore has ${allBangalorePostals.length} postal codes`)

Geographic Proximity Search

// Find postal codes within 20 kilometers of coordinates
const nearbyPostals = postalcodes.findByRadius(12.9716, 77.5946, 20)
// Use these for location-based features

Display Location Hierarchy

// Show complete location hierarchy from postal code
const hierarchy = postalcodes.findHierarchy("560029")
console.log(`${hierarchy.place}, ${hierarchy.subDistrict}, ${hierarchy.district}, ${hierarchy.state}`)

Examples

import postalcodes from "postalcodes-india"

// Complete lookup with validity check
const info = postalcodes.find("744301")
console.log(info)
/* Output:
{
  state: 'Andaman & Nicobar Islands',
  stateCode: '01',
  district: 'Nicobar',
  subDistrict: 'Carnicobar',
  place: 'Sawai',
  latitude: 7.5166,
  longitude: 93.6031,
  isValid: true
}
*/

// For invalid postal codes, returns empty values with isValid: false
const invalid = postalcodes.find("000000")
console.log(invalid)
/* Output:
{
  state: '',
  stateCode: '',
  district: '',
  subDistrict: '',
  place: '',
  latitude: 0,
  longitude: 0,
  isValid: false
}
*/

// Get just the state information
const stateInfo = postalcodes.findState("744301")
console.log(stateInfo) // { state: 'Andaman & Nicobar Islands', stateCode: '01', isValid: true }

// Get just the district information
const districtInfo = postalcodes.findDistrict("744301")
console.log(districtInfo) // { district: 'Nicobar', districtCode: '638', state: 'Andaman & Nicobar Islands', stateCode: '01', isValid: true }

// Get just the place
const placeInfo = postalcodes.findPlace("744301")
console.log(placeInfo) // { place: 'Sawai', isValid: true }

// Get just the coordinates
const coords = postalcodes.findCoordinates("744301")
console.log(coords) // { latitude: 7.5166, longitude: 93.6031, isValid: true }

// Get complete location hierarchy
const hierarchy = postalcodes.findHierarchy("744301")
console.log(hierarchy)
/* Output:
{
  state: 'Andaman & Nicobar Islands',
  stateCode: '01',
  district: 'Nicobar',
  districtCode: '638',
  subDistrict: 'Carnicobar',
  place: 'Sawai',
  isValid: true
}
*/

// Find postal codes for a place and state
const placePostals = postalcodes.findByPlace("Sawai", "01")
console.log(`Found ${placePostals.length} postal codes`)

// Find postal codes in a district
const districtPostals = postalcodes.findByDistrict("Nicobar", "01")
console.log(`Nicobar district has ${districtPostals.length} postal codes`)

// Find postal codes within 10 kilometers of coordinates
const nearby = postalcodes.findByRadius(7.5166, 93.6031, 10)
console.log(`Found ${nearby.length} postal codes within 10km radius`)

// Get all states
const states = postalcodes.getStates()
console.log(`India has ${states.length} states and union territories with postal codes`)

API

find(postalCode: string): PostalLookupResult

Returns complete information for a postal code with an isValid flag. Always returns an object, even for invalid postal codes.

interface PostalLookupResult {
  state: string // Full state/UT name
  stateCode: string // State code
  district: string // District name
  subDistrict: string // Sub-district/tehsil name
  place: string // Place name
  latitude: number // Decimal latitude
  longitude: number // Decimal longitude
  isValid: boolean // Whether the postal code exists
}

// Internal PostalCodeInfo interface used by findByPlace, findByDistrict, and findByRadius methods
interface PostalCodeInfo {
  postalCode: string // 6-digit postal code
  placeName: string // Place name
  stateName: string // Full state/UT name
  stateCode: string // State code
  districtName: string // District name
  districtCode: string // District code
  subDistrictName: string // Sub-district name
  latitude: number // Latitude in decimal degrees
  longitude: number // Longitude in decimal degrees
}

findState(postalCode: string): StateResult

Returns state information for a postal code with validity check.

interface StateResult {
  state: string // Full state/UT name
  stateCode: string // State code
  isValid: boolean // Whether the postal code exists
}

findDistrict(postalCode: string): DistrictResult

Returns district information for a postal code with validity check.

interface DistrictResult {
  district: string // District name
  districtCode: string // District code
  state: string // State name
  stateCode: string // State code
  isValid: boolean // Whether the postal code exists
}

findPlace(postalCode: string): { place: string; isValid: boolean }

Returns place name for a postal code with validity check.

findCoordinates(postalCode: string): Coordinates

Returns latitude and longitude for a postal code with validity check.

interface Coordinates {
  latitude: number // Decimal latitude
  longitude: number // Decimal longitude
  isValid: boolean // Whether the postal code exists
}

findHierarchy(postalCode: string): LocationHierarchy

Returns complete location hierarchy for a postal code.

interface LocationHierarchy {
  state: string // State name
  stateCode: string // State code
  district: string // District name
  districtCode: string // District code
  subDistrict: string // Sub-district name
  place: string // Place name
  isValid: boolean // Whether the postal code exists
}

findByPlace(place: string, stateCode: string): PostalCodeInfo[]

Finds all postal codes for a given place and state. Returns an array of PostalCodeInfo objects.

findByDistrict(districtName: string, stateCode: string): PostalCodeInfo[]

Finds all postal codes in a given district. Returns an array of PostalCodeInfo objects.

findByRadius(latitude: number, longitude: number, radiusKm: number): PostalCodeInfo[]

Finds postal codes within a radius of coordinates, sorted by distance. Returns an array of PostalCodeInfo objects.

getStates(): Array<{ code: string, name: string }>

Returns all states and union territories with their codes and names.

Related Projects

Looking for US ZIP codes? Check out zipcodes-us - the same functionality for the United States! 🇺🇸

Data Source

This package uses GeoNames postal code data (under Creative Commons Attribution 4.0 License).

License

MIT