Ultra-Advanced, Distributed, Extensible Job Scheduler for .NET
Chronux is a production-grade background job and trigger orchestration library for .NET — offering the power of Quartz.NET with the developer ergonomics and distributed support of Hangfire Pro. Built for modern .NET 8/9+ applications with full support for pluggable storage, clustering, middleware, and retries.
- ✅ Clean, fluent job registration
- ⏰ Cron, delay, and interval triggers with timezone support
- 🔁 Retry policies, dead-letter queue, and fault-tolerance
- 🔒 Distributed locks (SQL / Redis Redlock)
- 🧩 Storage-agnostic architecture (SQL Server, Redis)
- 🧠 Misfire detection and recovery
- ⚙️ Extensible via middleware and decorators
- 🚀 Ready for clustering and horizontal scaling
- 🌐 Server Mode (coming soon)
Chronux supports pluggable persistence via IChronuxStorageProvider.
| Backend | Status | Notes |
|---|---|---|
| SQL Server | ✅ Stable | Job + trigger persisted |
| Redis | ✅ Stable | Fast, ephemeral + Redlock |
| In-Memory | ✅ Built-in | Good for dev/test only |
var redis = ConnectionMultiplexer.Connect("localhost:6379");
builder.Services.AddChronux(cfg =>
{
cfg.AddJob<SendWelcomeEmail>().WithTrigger(new CronTrigger("welcome", "0 * * * *"));
}, options =>
{
options.SerializerInstance = new JsonChronuxSerializer();
options.UseRedisStorage(builder.Services, redis, useClusterLocks: true, nodeId: "node-a");
});Jobs must implement:
public sealed class SendWelcomeEmail : IChronuxJob<WelcomeInput>
{
public ValueTask<JobResult> ExecuteAsync(WelcomeInput input, JobExecutionContext context, CancellationToken ct)
{
// your logic here
}
}Chronux is fully configurable via ChronuxOptions:
DefaultRetryPolicySerializerInstanceMisfireStrategyStorageProvider,DeadLetterStoreDistributedLockProvider- See
docs/configuration.mdfor details
Chronux is modular and open for extension:
IChronuxJob<TInput>IJobMiddlewarefor global interceptorsIDeadLetterStore,IChronuxStorageProviderIDistributedLockProvider(e.g., Redlock, SqlLock)IJobDecoratorfor instrumentation, metrics, fallback, etc.
- See
docs/for full documentation
MIT © 2025 Mohammad Anzawi (@anzawi)