Docs

Two installs. The skills teach your agent, the library does the formatting.

Skills

In Claude Code, add the marketplace, then install the plugin. In Cursor, copy cursor/rules into your project’s .cursor/rules.

Four skills load on their own when the task calls for them: RTL layout, type pairing, Gulf formats and bilingual copy.

@dualkit/format

The package is on its way to npm. Until it lands, this installs the same build from the GitHub release, and npm i @dualkit/format takes over afterwards.

formatMoney(1234.5, { currency: "AED" })AED 1,234.50Money in AED or SAR. Add locale: "ar" and numerals: "arab" for Arabic.
formatHijri(date, { timeZone: "Asia/Riyadh" })1 Ramadan 1447 AHUmm al-Qura dates. Always pass the time zone.
toWesternDigits("٠٥٠١٢٣٤٥٦٧")0501234567Normalise typed digits before you validate or store them.
parseUaePhone("+971 50 123 4567"){ ok: true, value: { e164, type } }Every common way of writing a UAE mobile or landline.
parseEmiratesId("784-1990-1234567-6"){ ok: true, value: { formatted, year } }Checks the 784 prefix and the Luhn check digit.
parseIban(value, { country: "AE" }){ ok: true, value: { formatted, bankCode } }AE, SA, BH, KW and QA. Length per country and mod 97.

The parse functions never throw. They return { ok: false, error: { code, message } }, and the code is stable, so you can map it to your own Arabic and English copy.

Source

Everything is MIT licensed and lives at github.com/dualkit/dualkit. Open an issue if any Arabic reads wrong.