NaturalCron

June 2, 2026 ยท View on GitHub

NuGet License: MIT Awesome

NaturalCron is a human-readable scheduling engine for .NET. It lets you write schedules in a clear and intuitive way instead of memorizing cryptic cron strings.

Why? Because memorizing 0 18 * * 1-5 is harder than understanding every day between monday and friday at 6:00pm.

Readable schedules reduce mistakes, write expressions that you can understand at a glance.

Note: NaturalCron is not a cron converter. It is a self-contained scheduling engine with its own expressive syntax. If you need a classic cron string for an external system, the optional NaturalCron.CronConverter package can translate expressions โ€” but be aware that some NaturalCron features have no cron equivalent.

๐Ÿ’ก Why use NaturalCron?

  • Readable syntax: every 30 minutes in [jan, jun] between 09:00 and 18:00
  • Fluent Builder API: Strongly typed for .NET developers.
  • No online generators needed.
  • Features:
    • Ranges
    • Weekday list
    • Closest weekday, first/last day handling
    • Time zone support with IANA TZ names

๐Ÿš€ Quick Start

Using an Expression

using System;
using NaturalCron;

// Define an advanced expression
string expression = "every 30 minutes in [jan, jun] between 09:00 and 18:00";

// Parse and calculate next occurrence (local time)
NaturalCronExpr schedule = NaturalCronExpr.Parse(expression);
DateTime next = schedule.GetNextOccurrence(DateTime.Now);

Console.WriteLine($"Next occurrence: {next}");

Using Fluent Builder

using System;
using NaturalCron;
using NaturalCron.Builder;

NaturalCronExpr schedule = NaturalCronBuilder
.Every(30).Minutes()
.In(NaturalCronMonth.Jan)
.Between("09:00", "18:00")
.Build();

DateTime next = schedule.GetNextOccurrenceInUtc(DateTime.UtcNow);

Console.WriteLine($"Next occurrence in UTC: {next}");

โšก Try it online: Run on .NET Fiddle

๐Ÿ†š Cron vs NaturalCron

TaskCron ExpressionNaturalCron Expression
Every 5 minutes*/5 * * * *every 5 minutes
Every weekday at 6 PM0 18 * * 1-5every day between mon and fri at 18:00
Every 30 min in Jan and Jun (9:00-18:00)(Complex in cron)every 30 minutes in [jan, jun] between 09:00 and 18:00

๐Ÿ“ Syntax Overview

Examples:

every 5 minutes
every day at 18:00
every 30 minutes in [jan, jun] between 09:00 and 18:00
every day at 10:00 on [monday, wednesday, friday]

๐Ÿ“ฆ Installation

dotnet add package NaturalCron

๐Ÿ“– Documentation

  • Expression Syntax โ€” Learn how to write human-readable recurrence rules.
  • Fluent Builder Guide โ€” Build expressions easily with type safety and IntelliSense.
  • API Reference โ€” Full API details and usage examples.
  • Cron Converter โ€” Translate NaturalCron expressions to classic cron strings, and what is not supported.

๐Ÿ”Œ JobMaster Integration (Alpha)

Looking for a complete job scheduling solution with NaturalCron support? Check out JobMaster โ€” a powerful .NET job scheduling library that natively integrates with NaturalCron for human-readable scheduling.

๐Ÿค Contributing

Contributions, bug reports, and feature requests are welcome!

Please open an issue or submit a pull request.