Minimal API style
Register jobs the same way you map endpoints. Parameters resolve from DI and run arguments. Native AOT and trimming support.
Minimal API style
Register jobs the same way you map endpoints. Parameters resolve from DI and run arguments. Native AOT and trimming support.
Distributed
Runs across multiple nodes with coordinated claiming and retry handling. Nodes can register the same or different jobs.
Built-in dashboard
Live logs, progress, run history, node monitoring, and a REST API.
Job configuration
Cron, retries, queues, rate limits, timeouts, lifecycle callbacks, filters, streaming with IAsyncEnumerable<T>, and OpenTelemetry.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSurefire();builder.Services.AddSurefireDashboard();
var app = builder.Build();
app.AddJob("Add", (int a, int b) => a + b);
app.AddJob("DataImport", async (ILogger<Program> logger, CancellationToken ct) =>{ for (var i = 1; i <= 10; i++) { logger.LogInformation("Step {Step}/10", i); await Task.Delay(1000, ct); }}).WithDescription("Imports data") .WithCron("* * * * *");
app.MapSurefireDashboard();
app.Run();