• Adds retries to the database maintenance job when using Postgres.


  • Fixes risks for deadlocks when job progress hasn't finished writing before the job is done. When a job finishes and cleanup attempts to delete job progress before the job progress has finished writing a deadlock could occur because the update and cleanup/delete tries to write the same row.


  • Removes a query hint when using SQL Server that required READ COMMITTED isolation level. The recommended isolation level is READ COMMITTED SNAPSHOT, but is not a hard requirement.


  • Makes it possible to initiate a soft graceful shutdown which means that all jobs, functions, etc that has already started will run until finished but no new work will be started. See more here.


  • Fixes regression around running internal Nexus migrations.


  • Makes it possible to pass a transaction to DbConnectionScope.


  • Makes it possible to stop queue processing when an error occur, and pause it until no messages in the queue has an Error or AwaitingRetry status any more. See more here.


  • Adds IDbConnectionScope which lets you pass an existing db connection object to Nexus. See more here.


  • Fixes an issue where extra job runs (such as a retry) disappeared if they needed to aquire a mutex and that mutex was already taken


  • IQueueItemUpdater.DeleteAndReturnAllAsync() added as a safe way to read and delete all messages in a queue in a single and safe operation
  • IScheduledJobMetaDataRepository.GetJobMetaDataAsync<TJob>() added


  • Let outcome descriptions line break in admin UI


  • Expire the jobs meta data cache after five seconds to prevent stale cache issues


  • Add debug logging to queue processing jobs


  • Use long for queue message ids everywhere
  • Ensure that changing a job schedule doesn't immediately trigger a new run if the schedule is moved forward in time


  • Fix issue causing MaxNumberOfMessagesPerRun not to work on queue jobs


  • Make it possible to control how many messages a single queue job run is allowed to process
  • Show the Nexus version in the admin UI
  • Don't show a Disable button for a health check for a disabled job


  • Fix issuing causing some health checks to not show up in admin UI


  • Fix issuing making it impossible to resolve a failed job run


  • Fix links to job details in health check details
  • Add caching for health check statistics to avoid polling the database on the health overview
  • Health periods are now not filled out to include the space in time between two periods


  • Change job health check to not generate a unique result description every time it's called


  • Stores health check results so it's possible to see the history of a health check in the Admin UI


  • Fix issue which caused migrations to be run out-of-order


  • Make it possible to use Nexus job logs in the admin UI without Serilog.

Previously you needed to use Serilog in order for your job logs to get the correct context/scope values attached to know which job they originated from. Nexus now uses standard .NET logging for this which means that you no longer need to use Serilog for it. See more in the documentation under Jobs / Logs.


  • Reset healthchecks when an instance is starting. If an instance crashed or was deployed in the middle of when a healthcheck was running it can still be reported as running after the deploy or restart finishes. This fixes that all healthchecks are reset that claims to be running on the instance that is just starting up.


  • Added JobResults.CompletedWithWarnings() which lets a job return a successful status but have the run flagged with a warning sign in the Admin UI and the job health check status become Degraded


  • Messages that are Leased will now be transitioned into a new status called Abandoned if the lease expires due to a server crash. See docs about abandoned messages.
  • Messages that are scheduled for a retry now has a new status called AwaitingRetry instead of being in the Error status.
  • A new max retry limit has been introduced which defaults to 10. If the same message has been retried more times than that the message is transitioned to the Error status and won't be automatically retried again.
  • Instance id and correlation id is now set on queue messages when they are leased to be able to find logs for the job that processed a message.


  • Minor styling issue fixed in Functions list in Admin UI


  • Make it possible to group queues in the Admin UI by category just like what's possible for jobs


  • Fix issue where the admin UI could display "0" instead of "No logs found"
  • Make it possible to have a new job be initially disabled


  • Fix issue which could cause an infinite loop in ScheduledJobExecutorService when using multiple servers and jobs that executes frequently
  • Lowered log level from information to debug on some logs that occur frequently


  • Includes debug symbols in new snupkg packages, published to the Github NuGet feed


  • Removed unnecessary database calls that were made to release job mutexes, even for jobs without any mutexes
  • Nexus will now react slightly quicker to the cancellation token that signals that the app is shutting down
  • A new way of dealing with exceptions in background services ensures that Nexus is more resilient against intermittent database failures


  • Made it possible to customize the example message shown in the admin UI when enqueueing a new message manually.
  • IScheduledBatchQueueJob.GetBatchSize() has been deprecated in favor of IScheduledBatchQueueJob.BatchSize. The GetBatchSize() method will be removed in the next major version.


  • Add missing indexes to mutex table to avoid deadlocks when attempting to release job mutexes


  • Apply less locking when fetching job data from SQL Server to avoid deadlocks


  • Fix issue in API usage of Nexus Functions with SQL Server


  • Fix concurrency issue with leasing queue messages and marking functions as running when using Postgres.


  • Fix issue where instance heartbeat healthchecks reported the time in 12 hour
  • Fix text overflow in health check admin UI for long descriptions


  • Dispose CancellationTokenSource in ScheduledJobExecutorService after use


  • Add horizontal scrollbar for long queue processing log in admin UI


  • Remove testing code in the admin UI that slipped through in 1.6.0


  • Make it possible for jobs to report their progress and display it in the admin UI
  • Use Tailwind instead of CSS Modules in admin UI


  • Use higher query timeout for all queries in IDatabaseMaintenanceService
  • Show resolved/dismissed state for latest run in job list


  • Fix issue with database polling instance events


  • Fix issue with admin UI not rendering correctly when not having a trailing slash in the url (ie just /admin and not /admin/)


  • Fix issue with duration incorrectly being stored as decimal in SQLite when integer is expected


  • Make it possible to mark a failed job run as resolved or dismissed with an optional markdown comment
  • Make it possible to add a comment to queue messages
  • Store both latest job run and latest meaningful job run to since some jobs run very frequently but doesn't perform work all the time
  • Fix when cancelling a queue job the historical run status becomes should be Cancelled rather than Completed


  • Add RetryLater as a successful job outcome


  • Fix issue with database maintenance on SQL Express


  • Reset any health checks marked as running when an instance is starting


  • Ask for a connection string every time the database is opened to make it possible to use connection strings with updated credentials


  • Add query timeout of 5 minutes for database maintenance queries
  • Make it possible to update queue message status by filtering on message JSON properties
  • Increase timeout when deleting old job runs and logs


  • Show a health check for a disabled job as disabled
  • Implement graceful shutdown which attempts to stop Nexus background processes before the .NET application begins to terminate to ensure that all jobs etc aren't running when the application terminates
  • Generate a unique Nexus instance id for Azure App Service where a single VM can run multiple applications


  • Increase query timeout for updating queue messages to correct status
  • Make it possible to update all queue items to a certain status
  • Make it possible to mark a queue item as processed and schedule another processing of the message in the future
  • Only show main menu items in the admin UI if they have been configured
  • Add WITH (HOLDLOCK) to all SQL Server MERGE statements to avoid insert conflicts


Initial stable release.