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.
npm install thikkitEverything 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.
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.
From zero to wired in under a minute
Install, import, and you've replaced your half-broken address dropdown.
npm install thikkitThen in your code
Works with Next.js, Remix, Vite, Node, Bun, Deno — anywhere ESM or CJS runs. Edge-runtime safe (no Node-only APIs).
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 queryPowered by thikkit, right here
This whole page imports thikkit. The widgets below run real lookups against the actual package.
Tiny surface, real-world recipes
Three drop-in patterns that cover most e-commerce / delivery use cases.
Cascading dropdowns (React)
Plug-and-play Division → District → Upazila/Thana selector.
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 (
<>
>
);
}Server-side validation
Verify a submitted address against the dataset before saving an order.
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 };
}Autocomplete (any framework)
One function powers a search box that finds anywhere in Bangladesh, in either language.
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">// ]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.
| Capability | thikkit | Other packages | Roll-your-own |
|---|---|---|---|
| Divisions | 8 | 8 | 8 |
| Districts | 64 | 58–64 | 64 |
| Total admin units | 603 | 426–521 | ~440 |
| Dhaka district options | 55 | 5–20 | ~20 |
| Bangla translations | partial | partial | |
| Metropolitan thanas (DMP, CMP, ...) | partial | missing | |
| TypeScript types | partial | partial | |
| Cross-language search | |||
| Sort + paginate | |||
| Zero runtime dependencies |
Ship a complete BD address form today
One install. Bilingual. Full coverage. No Mirpur missing.