thikkit
The complete bilingual address dataset for Bangladesh

Every Bangladeshi address.
In one npm package.

8 divisions · 64 districts · 603 admin units (495 upazilas + 108 metropolitan thanas).English + Bangla, hand-verified. Zero runtime dependencies. TypeScript-first.

Get started
$npm install thikkit
Live on npmMIT licensedZero deps
0
Divisions
all of Bangladesh
0
Districts
complete coverage
0
Admin units
upazilas + thanas
0%
Bilingual
EN + BN, no nulls
What you get

Everything an address dropdown actually needs

No more pasting in half-curated thana lists. The data, the API, the types — all in one tiny package.

Full BD coverage

Every division, district, upazila and metropolitan thana — including DMP, CMP, KMP, RMP, SMP, BMP, GMP, MMP and Rangpur Metro.

8
divisions
64
districts
603
units

Bilingual

100% English + Bangla, hand-verified.

Zero deps

No runtime dependencies. 87 kB total.

Cross-language search

Substring match across both English and Bangla, all three levels.

TypeScript-first

Full type definitions, ESM + CJS, autocomplete everywhere.

Sort & paginate

Every list helper supports sortBy, order, page, limit.

Filter by type

Distinguish rural upazilas from metropolitan thanas.

Verified data

Sourced from BBS + each metropolitan police authority's 2024 jurisdiction.

Quick start

From zero to wired in under a minute

Install, import, and you've replaced your half-broken address dropdown.

sh
npm install thikkit

Then in your code

Works with Next.js, Remix, Vite, Node, Bun, Deno — anywhere ESM or CJS runs. Edge-runtime safe (no Node-only APIs).

address-form.tsxts
import { divisions, districts, unitNames, search } from "thikkit";

"tok-comment">// All 8 divisions
divisions();
"tok-comment">// → [{ id: "barisal", en: "Barisal", bn: "বরিশাল" }, ...]

"tok-comment">// 13 districts in Dhaka division
districts({ divisionId: "dhaka" });

"tok-comment">// Every admin unit in Dhaka district(50+ — DMP thanas + rural upazilas)
unitNames("dhaka-dhaka");
"tok-comment">// → ["Adabor", "Badda", "Banani", ..., "Wari"]

"tok-comment">// Same list in Bangla
unitNames("dhaka-dhaka", "bn");
"tok-comment">// → ["আদাবর", "বাড্ডা", "বনানী", ..., "ওয়ারী"]

"tok-comment">// Search across both languages
search("mirpur");      "tok-comment">// English query
search("ঢাকা");        "tok-comment">// Bangla query
Live demo

Powered by thikkit, right here

This whole page imports thikkit. The widgets below run real lookups against the actual package.

603 units · 8 divisions · 64 districts
API

Tiny surface, real-world recipes

Three drop-in patterns that cover most e-commerce / delivery use cases.

01

Cascading dropdowns (React)

Plug-and-play Division → District → Upazila/Thana selector.

example-1.tsts
import { divisions, districts, unitNames } from "thikkit";
import { useState } from "react";

export function AddressForm() {
  const [divId, setDivId]   = useState("");
  const [distId, setDistId] = useState("");
  const [unit, setUnit]     = useState("");

  return (
    <>
      

      

      
    
  );
}
02

Server-side validation

Verify a submitted address against the dataset before saving an order.

example-2.tsts
import { getUnit, getDistrict } from "thikkit";

export function validateAddress(input: {
  divisionId: string;
  districtId: string;
  unitId: string;
}) {
  const unit = getUnit(input.unitId);
  if (!unit) return { ok: false, error: "Unknown area" };

  if (unit.districtId !== input.districtId)
    return { ok: false, error: "Area doesn't belong to that district" };

  const district = getDistrict(input.districtId);
  if (!district || district.divisionId !== input.divisionId)
    return { ok: false, error: "District doesn't belong to that division" };

  return { ok: true, unit };
}
03

Autocomplete (any framework)

One function powers a search box that finds anywhere in Bangladesh, in either language.

example-3.tsts
import { search } from "thikkit";

function autocomplete(query: string) {
  return search(query, { types: ["unit"], limit: 8 }).map(r => ({
    label: `${r.en} · ${r.bn}`,
    value: r.id,
    parent: r.parentIds?.districtId,
  }));
}

autocomplete("mir");
"tok-comment">// → [
"tok-comment">//     { label: "Mirpur · মিরপুর",  value: "dhaka-dhaka-mirpur",  parent: "dhaka-dhaka" },
"tok-comment">//     { label: "Mirpur · মিরপুর",  value: "khulna-kushtia-mirpur", parent: "khulna-kushtia" },
"tok-comment">//     ...
"tok-comment">//   ]
Comparison

Why thikkit, not the alternatives

Other npm BD-address packages exist but ship with gaps — especially metropolitan thanas. That's the whole reason this exists.

CapabilitythikkitOther packagesRoll-your-own
Divisions888
Districts6458–6464
Total admin units603426–521~440
Dhaka district options555–20~20
Bangla translationspartialpartial
Metropolitan thanas (DMP, CMP, ...)partialmissing
TypeScript typespartialpartial
Cross-language search
Sort + paginate
Zero runtime dependencies

Ship a complete BD address form today

One install. Bilingual. Full coverage. No Mirpur missing.

$npm install thikkit
View on npm Star on GitHub