Background jobs.
Everything in view.
Schedule, retry, and chain jobs with Redis.
Monitor them in a live Blazor dashboard.

Built for background work.
Run on your schedule
Immediate, delayed, recurring, and cron jobs with time-zone support.
Retry failed jobs
Backoff, attempt limits, cancellation, and dead-letter handling.
Chain jobs
Run each step after its predecessor succeeds. Wait through retries.
Coordinate workers
Shared leases, concurrency limits, and rate limits across instances.
Generated at compile time.
The source generator discovers your job methods and creates typed invokers. No runtime reflection for job dispatch.
The dashboard is a client.
Blazor WebAssembly runs the interface in your browser, keeping UI rendering off the server and background runner. The optional dashboard connects to Flywheel over HTTP and SignalR.
API requests and live updates still use server resources; the UI needs no server-side rendering session.
Inspect every execution.
View attempts, timing, and captured ILogger output.

Your first job.
Requires .NET 10 and Redis 6.0.9 or newer.
Setup guideJobs can run more than once. Make handlers safe to retry.
dotnet add package Soenneker.Flywheel.Core
dotnet add package Soenneker.Flywheel.Redis
dotnet add package Soenneker.Flywheel.Generators// Program.cs
builder.Services.AddFlywheel()
.AddRedis(options =>
options.ConnectionString = "localhost:6379")
.AddGeneratedJobs();
await client.Enqueue(
FlywheelJobs.MessageJobs_Write,
new Message("Hello from Flywheel"));