Library / SDK
fluentscheduler/FluentScheduler avatar
fluentscheduler/FluentScheduler

FluentScheduler: a fluent job scheduler for .NET, and what version 6 changes

Automated job scheduler with fluent interface for the .NET platform.

2,767 stars410 forksC#Unlicense

At a glance

What is it?
FluentScheduler schedules recurring work in .NET through a fluent chain such as run.Every(5).Minutes(). The version-6 branch is a rewrite, version 5 is deprecated, and the documentation site is where the real detail lives.
Who is it for?
Adopt FluentScheduler when you want recurring in-process work declared as a fluent chain, your project is on the version-6 line, and you accept that the README points to the documentation site for anything beyond the smallest example. Do not adopt it if you are still on version 5, if you need a distributed scheduler with persistence and failover, or if you expect the README alone to explain the API.
Can I use it commercially?
Yes. Unlicense is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What FluentScheduler is for, and who should pick it

FluentScheduler is an automated job scheduler with a fluent interface for the .NET platform. The problem it addresses is ordinary and recurring: you have a piece of work that must run on a cadence, and you do not want to hand-roll a timer loop with its own bookkeeping. The README example is three lines. A Schedule is constructed from a lambda and a configuration lambda, and then started.

The audience is a .NET developer who wants the schedule to read like a sentence. The repository topics are fluent and scheduler, and that pairing is the whole pitch. The configuration lambda receives a run object, and the cadence is expressed as a chain: run.Every(5).Minutes(). There is no cron string to parse and no XML to maintain.

The repository is not archived, and the last push was on 2026-03-19. The default branch is version-6, and the README states plainly that version 5 of the library is now deprecated, with a link to the version-5 branch for anyone who still needs it. That deprecation matters more than it looks: a large amount of code in the wild targets version 5, and the README's own framing tells you the current line is version 6.

How a schedule is built and started

The mechanism visible in the README is a small object graph. You create a Schedule, you hand it an action to execute and a configuration delegate that describes when to execute it, and you call Start. In the README's example the action writes a line to the console and the configuration is run.Every(5).Minutes().

The fluent chain is the scheduling mechanism. Every(5) sets an interval, and Minutes() fixes the unit. The delegate form means the schedule is data you construct at runtime rather than a class you must subclass, which is why the example fits in a handful of lines.

What the README does not show is the rest of the surface. It links to a documentation site at fluentscheduler.github.io and labels it as the place to look when learning. The repository layout supports that: there is a Documentation directory alongside the FluentScheduler project, a unit test project, and a separate test application. If you want to know how a schedule is registered, how jobs are named, or how the scheduler behaves when a job overruns its interval, the README is silent and the documentation site is the source to read. Treat the README as a landing page, not as an API reference.

Installing FluentScheduler from NuGet and running a first schedule

The package is published on NuGet as FluentScheduler, and the README carries a NuGet badge pointing at that package id. Add it to your project from the NuGet feed, and the package reference appears in your project file.

The README gives this example as the smallest complete use. It constructs a schedule that writes a line every five minutes and then starts it. Run it and you should see the message printed on that cadence while the process stays alive.

cs
var schedule = new Schedule(
    () => Console.WriteLine("5 minutes just passed."),
    run => run.Every(5).Minutes()
);

schedule.Start();

Two things are worth noticing before you build on this. The cadence lives entirely inside the configuration lambda, so changing the interval means changing that chain and nothing else. And the schedule only runs while the hosting process runs, which is the normal shape for an in-process scheduler but is easy to forget when you test it in a console app that exits immediately. For a fuller example, the repository includes a FluentScheduler.TestApplication project, and the documentation site is where the README sends you for the rest.

The version 5 to version 6 split is the main migration risk

The README's most consequential sentence is the one about version 5 being deprecated. The default branch is version-6, the most recent release listed is 6.0.0 from 2025-12-19, and there were 6.0.0-alpha.4 and 5.5.3 releases before it. A 5.x release and a 6.x release exist side by side in the release history, which means the two lines are genuinely different targets rather than a rename.

The failure mode is straightforward. A developer copies a snippet from an older tutorial, adds the current NuGet package, and the code does not compile because the snippet was written against the deprecated line. Nothing in the README warns you about specific API differences; it only tells you that version 5 is deprecated and points at the branch. That is enough to know the split exists and not enough to plan the work.

The second limitation is scope. FluentScheduler is a library you host inside your own process. The repository layout shows a library project, unit tests, and a test application, and the README describes schedules that you construct and start. Nothing in the README describes a server, a dashboard, a persistent job store, or coordination between multiple running instances. If your requirement is work that survives a process restart or runs exactly once across a cluster, this is the wrong tool, and the README does not pretend otherwise.

FluentScheduler compared with Coravel and TickerQ

The related searches around this project pair it with Coravel scheduler and TickerQ C#, which is a fair grouping: all three are .NET scheduling libraries rather than standalone services. The difference in approach is in how the schedule is expressed and where it lives.

FluentScheduler's defining choice is the fluent interval chain. The README's run.Every(5).Minutes() is the canonical shape, and the schedule object is constructed in code and started explicitly. Coravel is built around a different emphasis, with its own scheduler and task queue concepts, and TickerQ approaches scheduling as its own job model. Neither of those is described in this repository's README, so the honest comparison at this level is only about shape: FluentScheduler keeps the schedule as a constructed object with a chain, and the alternatives organise the same problem around their own abstractions.

If you are choosing between them, the deciding question is not which API reads better in a snippet. It is which one your team already runs in production, because migrating a working schedule later costs more than picking the slightly nicer chain now. The related searches also include CrontabSchedule and the general term crontab, which tells you that a lot of people arrive at this problem already thinking in cron expressions. FluentScheduler's answer to that is the fluent chain instead of a cron string, and whether that is an improvement depends on whether your team reads cron fluently or not.

Licence, maintenance and the cost of upgrading

FluentScheduler is released under the Unlicense, which the repository states in LICENSE.md. The Unlicense is a public-domain-style dedication rather than a permissive licence with attribution conditions, so the usual obligation to reproduce a copyright notice does not apply in the way it would under MIT or Apache-2.0. That is a real difference if your legal review treats attribution requirements as a checklist item. It is not legal advice, and if your organisation has a policy about public-domain dedications, that policy is the thing to check.

The maintenance picture is mixed and worth stating precisely. The repository is not archived, and the last push was on 2026-03-19. The most recent release is 6.0.0 from 2025-12-19, preceded by 6.0.0-alpha.4 and 5.5.3. So there is a stable 6.0.0 release and a branch that has seen commits after it.

Upgrade cost is dominated by the version 5 to version 6 move, not by routine patch upgrades. The README gives you the deprecation notice and the branch link but no migration guide, so the practical first step is to diff your usage against the version-6 documentation before you change a package reference. Budget for that reading time rather than assuming a version bump is mechanical.

Editorial conclusion

Adopt FluentScheduler when you want recurring in-process work declared as a fluent chain, your project is on the version-6 line, and you accept that the README points to the documentation site for anything beyond the smallest example. Do not adopt it if you are still on version 5, if you need a distributed scheduler with persistence and failover, or if you expect the README alone to explain the API. Verify first that the NuGet package you restore matches the branch you are reading, and then read the documentation site for the version-6 API before writing your first registry.

Frequently asked questions

How do I use a job scheduler in C# with FluentScheduler?

Construct a Schedule with an action and a configuration delegate, then call Start. The README's example passes a lambda that writes to the console and a run delegate using run.Every(5).Minutes().

What is a job scheduler?

In this context it is a library that runs a piece of work on a defined cadence inside your application. FluentScheduler describes itself as an automated job scheduler with a fluent interface for the .NET platform.

What are some open-source job schedulers?

FluentScheduler is one, released under the Unlicense. The related searches around it also name Coravel scheduler and TickerQ C#, which are separate .NET projects not documented in this repository.

Official sources

  1. fluentscheduler/FluentScheduler on GitHub
  2. License: Unlicense
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/fluentscheduler-fluentscheduler.svg)](https://hysenlabs.com/projects/fluentscheduler-fluentscheduler)