Skip to content(if available)orjump to list(if available)

Show HN: NaturalCron – Human-Readable Scheduling for .NET (With Fluent Builder)

Show HN: NaturalCron – Human-Readable Scheduling for .NET (With Fluent Builder)

6 comments

·August 2, 2025

Hi HN!

I built NaturalCron because I was tired of writing and debugging CRON syntax like:

/5 * * 5

Now you can write something human-readable in .NET:

var expression = new NaturalCronExpression("every 5 minutes on friday");

Or use a Fluent Builder for strong typing and IDE support:

var expression = NaturalCronExpressionBuilder .Every().Minutes(5) .On(DayOfWeek.Friday) .Build();

Great for: - Code-based scheduling in .NET apps - Overriding schedules from configs or databases - Displaying easy-to-read rules in UIs

NuGet: https://www.nuget.org/packages/NaturalCron GitHub: https://github.com/hugoj0s3/NaturalCron

Would love your feedback on syntax, builder design, and what features you'd like to see next!

BryanLegend

How flexible is the syntax? Can I write whatever and have a chance it parses correctly?

loloquwowndueo

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

Really? Does “Every day between Monday and Friday” include Monday and Friday? One could think the days between Monday and Friday are Tuesday, Wednesday and Thursday.

Why people don’t just learn cron syntax is beyond me.

perching_aix

> Why people don’t just learn cron syntax is beyond me.

Maybe the better question to ponder is why is it something that needs explicit learning. It's a basic task scheduler.

wordofx

Cron syntax sucks. Cron is good for a few small use cases but sucks for real world scheduling.

jiggawatts

> Why people don’t just learn cron syntax is beyond me.

Because it looks like line noise, is unreadable to anybody not a UNIX/Linux admin, and is a standard in the same sense that the directory separator is the backslash on the majority of deployed desktops and servers.

More importantly: It’s also not extensible without being completely changed, which makes it a poor design.

Fluent builders can be trivially expanded to support new capabilities without breaking existing code or configuration.

Cron’s syntax was likely a quick and nasty thing thrown together by some student at Berkeley or wherever in the stone ages of computing. We shouldn’t be bound by these accidents of history in the same way we shouldn’t keep using Roman numerals these days.

loloquwowndueo

> It’s also not extensible without being completely changed, which makes it a poor design.

Fair enough but let’s please not replace it with something where the literal first example in the GitHub read me is ambiguous.