TickerQ 8.0.0-beta.1

Prefix Reserved
This is a prerelease version of TickerQ.
There is a newer version of this package available.
See the version list below for details.
dotnet add package TickerQ --version 8.0.0-beta.1
                    
NuGet\Install-Package TickerQ -Version 8.0.0-beta.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TickerQ" Version="8.0.0-beta.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TickerQ" Version="8.0.0-beta.1" />
                    
Directory.Packages.props
<PackageReference Include="TickerQ" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TickerQ --version 8.0.0-beta.1
                    
#r "nuget: TickerQ, 8.0.0-beta.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TickerQ@8.0.0-beta.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TickerQ&version=8.0.0-beta.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=TickerQ&version=8.0.0-beta.1&prerelease
                    
Install as a Cake Tool

TickerQ

Discord Community

NuGet NuGet Build NuGet Packages Documentation alternate text is missing from this package README image

Robust. Adaptive. Precise.
TickerQ is a fast, reflection-free background task scheduler for .NET โ€” built with source generators, EF Core integration, cron + time-based execution, and a real-time dashboard.

๐Ÿ“š Full Docs: https://tickerq.arcenox.com

Repo: https://github.com/Arcenox-co/TickerQ-UI (docs are open-source and anyone can help us improving.)

Note: As of v2.2.0, all TickerQ packages are versioned together โ€” even if a package has no changes โ€” to keep the ecosystem in sync. Always update all packages to the same version.


โœจ Features

  • Time and Cron Scheduling
  • Stateless Core with source generator
  • EF Core Persistence
  • Live Dashboard UI
  • Live Dashboard UI - View Screenshots
  • Retry Policies & Throttling
  • Dependency Injection support
  • Multi-node distributed coordination

๐Ÿ“ฆ Installation

Core (required)

dotnet add package TickerQ

Entity Framework Integration (optional)

dotnet add package TickerQ.EntityFrameworkCore

Dashboard UI (optional)

dotnet add package TickerQ.Dashboard

โš™๏ธ Basic Setup

In Program.cs or Startup.cs

builder.Services.AddTickerQ(options =>
{
    opt.SetMaxConcurrency(10);
    options.AddOperationalStore<MyDbContext>(efOpt => 
    {
        efOpt.SetExceptionHandler<MyExceptionHandlerClass>();
        efOpt.UseModelCustomizerForMigrations();
    });
    options.AddDashboard(uiopt =>                                                
    {
        uiopt.BasePath = "/tickerq-dashboard"; 
        uiopt.AddDashboardBasicAuth();
    }
});

app.UseTickerQ(); // Activates job processor

๐Ÿ’ก Recommendation:
Use UseModelCustomizerForMigrations() to cleanly separate infrastructure concerns from your core domain model, especially during design-time operations like migrations.
Note: If you're using third-party libraries (e.g., OpenIddict) that also override IModelCustomizer, you must either merge customizations or fall back to manual configuration inside OnModelCreating() to avoid conflicts.

โ—๏ธIf Not Using UseModelCustomizerForMigrations() You must apply TickerQ configurations manually in your DbContext:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options) { }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        // Apply TickerQ entity configurations explicitly
        builder.ApplyConfiguration(new TimeTickerConfigurations());
        builder.ApplyConfiguration(new CronTickerConfigurations());
        builder.ApplyConfiguration(new CronTickerOccurrenceConfigurations());

        // Alternatively, apply all configurations from assembly:
        // builder.ApplyConfigurationsFromAssembly(typeof(TimeTickerConfigurations).Assembly);
    }
}

Add Migrations

Migrations would be created for Context that is declared at AddOperationalStore.

PM> add-migration "TickerQInitialCreate" -c MyDbContext

Job Definition

1. Cron Job (Recurring)

public class CleanupJobs(ICleanUpService cleanUpService)
{
    private readonly ICleanUpService _cleanUpService = cleanUpService;

    [TickerFunction(functionName: "CleanupLogs", cronExpression: "0 0 * * *" )]
    public asynt Task CleanupLogs(TickerFunctionContext<string> tickerContext, CancellationToken cancellationToken)
    {
        var logFileName = tickerContext.Request; // output cleanup_example_file.txt
        await _cleanUpService.CleanOldLogsAsync(logFileName, cancellationToken);
    }
}

This uses a cron expression to run daily at midnight.

๐Ÿ“… Cron Expression Formats

TickerQ supports both 5-part and 6-part cron expressions:

5-part format (standard):

minute hour day month day-of-week

Examples:

  • "0 0 * * *" - Daily at midnight
  • "0 */6 * * *" - Every 6 hours
  • "30 14 * * 1" - Every Monday at 2:30 PM

6-part format (with seconds):

second minute hour day month day-of-week

Examples:

  • "0 0 0 * * *" - Daily at midnight (00:00:00)
  • "30 0 0 * * *" - Daily at 00:00:30 (30 seconds past midnight)
  • "0 0 */2 * * *" - Every 2 hours on the hour
  • "*/10 * * * * *" - Every 10 seconds

Schedule Time Ticker:

//Schedule on-time job using ITimeTickerManager<TimeTicker>.
await _timeTickerManager.AddAsync(new TimeTicker
{
    Function = "CleanupLogs",
    ExecutionTime = DateTime.UtcNow.AddMinutes(1),
    Request = TickerHelper.CreateTickerRequest<string>("cleanup_example_file.txt"),
    Retries = 3,
    RetryIntervals = new[] { 30, 60, 120 }, // Retry after 30s, 60s, then 2min

    // Optional batching
    BatchParent = Guid.Parse("...."),
    BatchRunCondition = BatchRunCondition.OnSuccess
});

Schedule Cron Ticker:

//Schedule cron job using ICronTickerManager<CronTicker>.
await _cronTickerManager.AddAsync(new CronTicker
{
    Function = "CleanupLogs",
    Expression = "0 */6 * * *", // Every 6 hours (5-part format)
    // Or use 6-part format with seconds:
    // Expression = "0 0 */6 * * *", // Every 6 hours at :00:00
    // Expression = "*/30 * * * * *", // Every 30 seconds
    Request = TickerHelper.CreateTickerRequest<string>("cleanup_example_file.txt"),
    Retries = 2,
    RetryIntervals = new[] { 60, 300 }
});

๐Ÿ› ๏ธ Developer Tips

  • Use [TickerFunction] to register jobs
  • Use FunctionName consistently across schedule and handler
  • Use CancellationToken for graceful cancellation
  • Use Request to pass dynamic data to jobs
  • If you are getting random 403 responses, make sure that you don't have any filter in some endpoint that might be triggering it, thus causing issues with TickerQ's dashboard. Check this issue for more details.

๐Ÿ’– Sponsors & Backers

We want to acknowledge the individuals and organizations who support the development of TickerQ through OpenCollective. Your contributions help us maintain and grow this project. If you'd like to support, check out the tiers below and join the community!

Become a Sponsor or Backer on OpenCollective


๐Ÿ† Gold Sponsors

Become a gold sponsor and get your logo here with a link to your site.


๐Ÿฅˆ Silver Sponsors

Become a silver sponsor and get your logo here with a link to your site.


๐Ÿฅ‰ Bronze Sponsors

Become a bronze sponsor and get your logo here with a link to your site.


๐Ÿ™Œ Backers

Become a backer and get your image on our README on GitHub with a link to your site.

<a href="https://opencollective.com/tickerq/backer/0/website?requireActive=false" target="_blank"><img width="30" src="https://opencollective.com/tickerq/backer/0/avatar.svg?requireActive=false"></a>

๐Ÿค Contribution

PRs, ideas, and issues are welcome!

  1. Fork & branch
  2. Code your change
  3. Submit a Pull Request

๐Ÿ“„ License

MIT OR Apache 2.0 ยฉ Arcenox
You may choose either license to use this software.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on TickerQ:

Package Downloads
ZhileTime.Hope.TickerQ

Package Description

Volo.Abp.TickerQ

Package Description

Paramore.Brighter.MessageScheduler.TickerQ

TikcerQ integration for Paramore.Brighter Command Processor. Provides advanced message scheduling capabilities using TikcerQ for background job processing, delayed message delivery, and complex recurring task scheduling.

Sparkdo.TickerQ

Sparkdo TickerQ ๅบ“๏ผŒๆไพ›ๅŸบไบŽ TickerQ ็š„ๅฎšๆ—ถไปปๅŠกๅŠŸ่ƒฝ้›†ๆˆๅฎž็Žฐ

Sparkdo.BackgroundJobs.TickerQ

Sparkdo TickerQ ๅŽๅฐไฝœไธšๅบ“๏ผŒๆไพ›ๅŸบไบŽ TickerQ ็š„ๅŽๅฐไฝœไธšๅŠŸ่ƒฝ้›†ๆˆๅฎž็Žฐ

GitHub repositories (3)

Showing the top 3 popular GitHub repositories that depend on TickerQ:

Repository Stars
abpframework/abp
Open-source web application framework for ASP.NET Core! Offers an opinionated architecture to build enterprise software solutions with best practices on top of the .NET. Provides the fundamental infrastructure, cross-cutting-concern implementations, startup templates, application modules, UI themes, tooling and documentation.
BrighterCommand/Brighter
A framework for building messaging apps with .NET and C#.
clawdotnet/openclaw.net
Self-hosted OpenClaw gateway + agent runtime in .NET (NativeAOT-friendly)
Version Downloads Last Updated
10.3.0 11,910 4/13/2026
10.3.0-beta 94 4/13/2026
10.2.5 24,116 3/22/2026
10.2.4 933 3/21/2026
10.2.3 554 3/21/2026
10.2.2 7,529 3/16/2026
10.2.1 3,359 3/16/2026
9.3.0 393 4/13/2026
9.2.5 508 3/22/2026
9.2.4 198 3/21/2026
9.2.3 189 3/21/2026
9.2.2 961 3/16/2026
9.2.1 222 3/16/2026
8.3.0 472 4/13/2026
8.2.5 1,950 3/22/2026
8.2.4 184 3/21/2026
8.2.3 180 3/21/2026
8.2.2 411 3/16/2026
8.2.1 385 3/16/2026
8.0.0-beta.1 333 10/31/2025
Loading failed