WJb 1.2.0
dotnet add package WJb --version 1.2.0
NuGet\Install-Package WJb -Version 1.2.0
<PackageReference Include="WJb" Version="1.2.0" />
<PackageVersion Include="WJb" Version="1.2.0" />
<PackageReference Include="WJb" />
paket add WJb --version 1.2.0
#r "nuget: WJb, 1.2.0"
#:package WJb@1.2.0
#addin nuget:?package=WJb&version=1.2.0
#tool nuget:?package=WJb&version=1.2.0
⚡ WJb
If you can't explain why a job runs, you don't control your system.
Most background job systems eventually become:
Job
↓
Retry
↓
Pipeline
↓
Middleware
↓
???
Then somebody asks:
- Why did this run?
- Why was it retried?
- Who scheduled the next step?
- Where is that logic?
And nobody can answer in 30 seconds.
WJb
WJb is an explicit workflow and background job engine for .NET.
Job
↓
Action
↓
ActionResult
↓
Step
Every step is visible.
Every transition is explicit.
Every workflow is defined in code.
Simple by Default
Most job systems expose job states.
WJb exposes execution flow.
Enqueue
↓
Execute
↓
Done
Actions decide what happens next.
Stores record what happened.
Example
[ActionName("send-email")]
public sealed class SendEmailAction : JobAction<EmailInput>
{
public override ValueTask<ActionResult> ExecuteAsync(
EmailInput? input, CancellationToken ct = default)
{
return ValueTask.FromResult(
Results.Done()
.Next("log-email", new
{
Message = $"Email sent to {input?.To}"
}));
}
}
[ActionName("log-email")]
public sealed class LogEmailAction : JobAction<LogInput>
{
public override ValueTask<ActionResult> ExecuteAsync(
LogInput? input, CancellationToken ct = default)
{
Console.WriteLine(input?.Message);
return ValueTask.FromResult(Results.Done());
}
}
ActionResult
Complete without a result:
return Results.Done();
Complete with a result:
return Results.Done(customer);
Schedule the next step:
return Results.Done()
.Next("send-email", new { To = "john@example.com" });
Schedule multiple steps:
return Results.Done()
.Next("email")
.Next("audit")
.Next("metrics");
Failures are represented by exceptions:
throw new InvalidOperationException(
"SMTP server unavailable.");
Mental Model
Action = Business Logic
ActionResult = Output + Next Steps
Step = Workflow Transition
Executor = Runner
Store = Persistence
That's it.
Why WJb?
A workflow should be readable.
return Results.Done(order)
.Next("charge-payment")
.Next("send-email");
You can immediately see:
- What happened
- What was produced
- What runs next
No hidden pipelines.
No invisible middleware.
No magic retries.
Packages
| Package | Description |
|---|---|
| WJb | Explicit workflow and background job engine |
| WJb.UI.Blazor | Monitoring and administration UI |
| WJb.SqlServer | SQL Server store (commercial edition) |
| WJb.PostgreSql | PostgreSQL store (commercial edition) |
| WJb.MySql | MySQL store (commercial edition) |
| WJb.Sqlite | SQLite store (commercial edition) |
| WJb.IndexedDB | IndexedDB store (commercial edition) |
Use WJb If
You want to answer all of these immediately:
- Why did this job run?
- What did it do?
- What will run next?
- Why did it fail?
- When did it start?
- When did it finish?
License
WJb Non-Commercial License
WJb is free for personal, educational, evaluation, research, and other non-commercial use.
Commercial use requires a valid WJb Commercial License.
A commercial license grants perpetual rights to use the licensed version of WJb and includes all commercial WJb store packages.
See the included LICENSE file for complete licensing terms.
For licensing information:
Support WJb
If WJb helps your projects:
Background jobs should be explicit.
If a workflow exists, you should be able to read it.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on WJb:
| Package | Downloads |
|---|---|
|
WJb.UI.Blazor
Blazor monitoring and administration UI for WJb. Includes job monitoring, action management, service configuration, payload inspection, and action testing. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Initial stable release.