Stop memorizing cron syntax. Write what you mean, in English or Arabic, and get a valid cron expression.
cronTalk("every monday at 9am") // โ "0 9 * * 1"
cronTalk("ูู ููู
ุงุซููู ุงูุณุงุนุฉ 9") // โ "0 9 * * 1"
cronTalk("every 15 minutes") // โ "*/15 * * * *"
cronTalk("first day of every month") // โ "0 0 1 * *"
cronTalk("weekdays at 7:30am") // โ "30 7 * * 1-5"Install โข Examples โข Supported phrases โข API
npm install cron-talkpip install cron-talkimport { cronTalk } from "cron-talk";
cronTalk("every day at midnight") // "0 0 * * *"
cronTalk("every hour") // "0 * * * *"
cronTalk("every 5 minutes") // "*/5 * * * *"
cronTalk("every weekday at 9am") // "0 9 * * 1-5"
cronTalk("every saturday") // "0 0 * * 6"
cronTalk("every january") // "0 0 1 1 *"
cronTalk("first monday of every month") // "0 0 * * 1#1"
// Arabic โ first library to support it natively:
cronTalk("ูู ุฎู
ุณ ุฏูุงุฆู") // "*/5 * * * *"
cronTalk("ูู ููู
ุงูุณุงุนุฉ ู
ูุชุตู ุงูููู") // "0 0 * * *"
cronTalk("ูู ุฌู
ุนุฉ ุงูุณุงุนุฉ 8 ู
ุณุงุกู") // "0 20 * * 5"
cronTalk("ูู ุฃูู ุดูุฑ") // "0 0 1 * *"| Phrase (EN) | Phrase (AR) | Cron |
|---|---|---|
| every minute | ูู ุฏูููุฉ | * * * * * |
| every N minutes | ูู N ุฏูุงุฆู | */N * * * * |
| every hour | ูู ุณุงุนุฉ | 0 * * * * |
| every N hours | ูู N ุณุงุนุงุช | 0 */N * * * |
| every day | ูู ููู | 0 0 * * * |
| every week | ูู ุฃุณุจูุน | 0 0 * * 0 |
| every month | ูู ุดูุฑ | 0 0 1 * * |
| every year | ูู ุณูุฉ | 0 0 1 1 * |
| English | ุงูุนุฑุจูุฉ |
|---|---|
| monday | ุงูุงุซููู / ุงุซููู |
| tuesday | ุงูุซูุงุซุงุก / ุซูุงุซุงุก |
| wednesday | ุงูุฃุฑุจุนุงุก / ุงุฑุจุนุงุก |
| thursday | ุงูุฎู ูุณ / ุฎู ูุณ |
| friday | ุงูุฌู ุนุฉ / ุฌู ุนุฉ |
| saturday | ุงูุณุจุช / ุณุจุช |
| sunday | ุงูุฃุญุฏ / ุงุญุฏ |
| weekday | ุฃูุงู ุงูุนู ู |
| weekend | ุนุทูุฉ ููุงูุฉ ุงูุฃุณุจูุน |
9am,9:00 am,09:00,9pm,21:00midnight/ู ูุชุตู ุงููููnoon/ุงูุธูุฑุงูุณุงุนุฉ 8 ุตุจุงุญุงู,ุงูุณุงุนุฉ 8 ู ุณุงุกู
Converts natural language to a 5-field cron expression.
import { cronTalk } from "cron-talk";
cronTalk("every 30 minutes"); // "*/30 * * * *"
cronTalk("ูู ููู
8 ุตุจุงุญุงู", { locale: "ar" }); // explicit localeOptions:
locale?: "en" | "ar" | "auto"(default:"auto"โ detects from input)strict?: boolean(default:falseโ throws on unknown phrases instead of best-effort)
Reverse: cron โ human-readable.
cronTalk.explain("*/15 * * * *"); // "every 15 minutes"
cronTalk.explain("0 9 * * 1-5", "ar"); // "ูู ููู
ุนู
ู ุงูุณุงุนุฉ 9 ุตุจุงุญุงู"Returns the next time the cron will fire.
cronTalk.next("0 9 * * 1");
// โ Date of next Monday at 9:00 AMcronTalk.validate("0 9 * * 1");
// โ { valid: true }
cronTalk.validate("0 25 * * *");
// โ { valid: false, reason: "Hour must be 0โ23" }The Python package exposes the same API:
from cron_talk import cron_talk, explain, next_time, validate
cron_talk("every monday at 9am") # "0 9 * * 1"
cron_talk("ูู ุงุซููู ุงูุณุงุนุฉ 9 ุตุจุงุญุงู") # "0 9 * * 1"
explain("0 9 * * 1-5") # "every weekday at 9 AM"
next_time("0 9 * * 1") # datetime(...)
validate("0 9 * * 1") # {"valid": True}| Existing libs | cron-talk |
|---|---|
| English-only | โ English + Arabic |
| Heavy deps | โ Zero runtime deps |
| One language | โ TS + Python parity |
No .explain() |
โ Full reverse parser |
MIT ยฉ 2026 Kasim Mohammed