Changelog
v0.5.0
What’s Changed
Breaking Changes
- Renamed core APIs for consistency:
defineJobTypesis nowdefineJobTypeRegistry, processor registries usecreateJobTypeProcessorRegistry, andcreateInProcessWorkeracceptsprocessorRegistry.mergeJobTypeProcessorsis nowmergeJobTypeProcessorRegistries. continueWithrestricted to local types:continueWithtargets now validate against local job type definitions only. Blockers remain validated against the full set (local + external).- Removed rarely-used type exports:
CompletedJob,JobWithBlockers,PendingJob,BlockedJob
Performance
- Faster type checking: Navigation types rewritten in tail-recursive form with precomputed maps, reducing type instantiations by up to 86% in blocker-heavy scenarios.
Internal
- Enabled
isolatedDeclarationsfor improved.d.tscompatibility with alternative TypeScript tooling - Added Turborepo for task orchestration and caching
- Added processing capacity and type complexity benchmarks
Packages
All packages released at 0.5.0: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis, @queuert/nats, @queuert/otel, @queuert/dashboard.
v0.4.0
What’s Changed
Features
- Feature slices: New
mergeJobTypeRegistries()andmergeJobTypeProcessors()utilities for splitting job type definitions and processors into independent feature modules (slices), then merging them at the application level. Duplicate job types are detected at both compile time and runtime. - Cross-slice type safety:
defineJobTypesnow accepts an optionalTExternaltype parameter for compile-time validation of blocker and continueWith references across slice boundaries. - New type exports: Navigation types (
ResolvedJob,ResolvedJobChain,ResolvedJobWithBlockers, etc.), reference types (JobTypeReference,NominalJobTypeReference,StructuralJobTypeReference), and utility types (JobTypeRegistryDefinitions,EntryJobTypeDefinitions,BlockerChains,ContinuationJobs).
Improvements
- Narrowed trace context types:
ObservabilityAdapterandStateAdapterinterfaces now usestring | nullfor trace contexts instead ofunknown, making types more precise and predictable. - Postgres trace context columns changed from
jsonbtotextfor consistency with the narrowed types.
Breaking Changes
- Trace context types narrowed from
unknowntostring | null— affects customObservabilityAdapterandStateAdapterimplementations. - Postgres schema: trace columns changed from
jsonbtotext(migration required). - Navigation types renamed:
JobOf→ResolvedJob,JobChainOf→ResolvedJobChain,ChainJobTypes→ChainJobTypeNames,BlockedJobTypes→BlockedJobTypeNames,HasBlockers→JobTypeHasBlockers. - Handler/callback types renamed:
AttemptHandlerFn→AttemptHandler,PrepareFn→AttemptPrepare,CompleteFn→AttemptComplete,CompleteCallbackOptions→AttemptCompleteOptions,PrepareConfig→AttemptPrepareOptions. - Registry phantom property
$definitionsreplaced with symbol; useJobTypeRegistryDefinitions<T>utility type instead. PartialJobTypeReferencereplaced byJobTypeReferenceunion (NominalJobTypeReference | StructuralJobTypeReference).JobTypeRegistryConfignow requires agetTypeNamescallback.
Packages
All packages released at 0.4.0: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis, @queuert/nats, @queuert/otel, @queuert/dashboard.
v0.3.2
What’s Changed
Dashboard: Sub-path mounting (basePath)
- Added a new
basePathoption tocreateDashboard()for mounting the dashboard behind a reverse proxy or framework router at a sub-path (e.g./internal/queuert). All server-side routing, asset loading, and client-side SPA navigation respect the configured prefix. - The frontend now derives its base URL from the
<base>tag, making sub-path routing reliable across deployment setups. - Requests outside the configured
basePathcorrectly return 404, including paths that share a prefix (e.g./application/...when basePath is/app).
Dashboard: CSP nonce removed (breaking)
- The
fetchhandler no longer accepts a second{ nonce }argument. CSP nonce injection should be handled in your own middleware if needed. The@queuert/dashboardpackage is marked@experimental.
Packages
All packages released at 0.3.2: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis, @queuert/nats, @queuert/otel, @queuert/dashboard.
v0.3.1
Patch Changes
- Fix dashboard sub-path asset loading and CSP nonce support
- Update documentation with API reference section
- Exclude testing exports from published packages
- Fix bogus version references in changelogs
Packages
All packages released at 0.3.1: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis, @queuert/nats, @queuert/otel, @queuert/dashboard.
v0.3.0
Highlights
This release adds a web dashboard, client query API with pagination, distributed tracing across job chains, transaction hooks for safe side-effect buffering, and a major documentation site — alongside extensive API refinements and breaking changes.
Breaking Changes
- Type exports cleaned up: Reference types renamed for consistency
- Error classes redesigned: Improved error hierarchy and client API consistency
- State adapter methods renamed: Clearer naming conventions across all adapters
waitForJobChainCompletion→awaitJobChain: Simplified chain awaiting API- Blockers extracted: Moved from
Jobbase type to separateJobWithBlockerswrapper - Trace context split: Separated into distinct chain and job trace fields
CommitHooks→TransactionHooks: Renamed with added discard supportwithNotifyreplaced: ExplicitCommitHooks/TransactionHooksfor side-effect bufferingchain_indexadded: Deterministic chain ordering and continuation deduplicationoriginIdremoved: Deduplication key used for continuations insteadrootChainIdremoved: Unified chain deletion modelstartBlockerscallback →blockersarray: Simplified blocker declaration- State adapter retry wrapper removed: Retry logic no longer built into adapters
updatedAtremoved: Dropped fromStateJoband database schema- API naming simplified: Removed redundant
Queuertprefix from exports - Worker config simplified: Reduced property verbosity
- Deduplication API renamed:
strategy→scope - Worker redesigned: Parallel slot-based execution model
createInProcessWorkeraccepts client: Takes client instance instead of individual adapters- OTEL metric prefix hardcoded: Removed messaging semantic convention attributes
deleteJobChainsreturns deleted chainsacquireJobreturnshasMore
New Features
@queuert/dashboard: Embeddable SolidJS web dashboard for job queue observation- Client query methods:
queryJobsandqueryJobChainswith pagination and type narrowing - Distributed tracing: Full trace context persistence across job chains with OTEL blocker spans
- Transaction hooks: Buffer observability events via transaction lifecycle hooks
- Cascade deletion:
cascadeoption ondeleteJobChainsfor transitive dependency removal - Table prefix (
@queuert/postgres): Configurable table name prefix - State adapter conformance test suite (
queuert/testing): Shared test harness for adapter implementations - Migration version tracking (
@queuert/postgres,@queuert/sqlite): Track applied migration versions - Documentation site: Astro-based docs with TSDoc and explicit API types
Bug Fixes
- Add NOT NULL constraint to
chain_idcolumn (postgres, sqlite) - Scope deduplication key by chain type name
- Assign
continuedJobin workerlesscontinueWithpath - Fix transaction handling rework
- Remove notification listeners before releasing pool client (postgres)
- Only subscribe to job notifications when worker has idle slots
- Prevent workers from reaping their own in-progress jobs with concurrent slots
Packages
All packages released at 0.3.0: queuert, @queuert/dashboard, @queuert/postgres, @queuert/sqlite, @queuert/redis, @queuert/nats, @queuert/otel.
v0.2.0
Highlights
This release brings OpenTelemetry observability, runtime job validation, a NATS notify adapter, and significant API improvements with several breaking changes.
Breaking Changes
- API split:
createQueuertsplit intocreateQueuertClientandcreateQueuertInProcessWorkerfor clearer separation of concerns - Adapter API simplified: Removed
provideContext, madetxContextoptional - Log API changed: Tuple args replaced with named
data/errorproperties - Renamed
JobSequencetoJobChainacross the entire API - Simplified
migrateToLatestAPI: Removed nested transaction support
New Features
- ObservabilityAdapter (
@queuert/otel): Full OpenTelemetry integration with histogram metrics for duration tracking and gauge metrics for worker idle/processing state - JobTypeRegistry: Compile-time and runtime validation with schema adapters for Zod, Valibot, and TypeBox
- NATS notify adapter (
@queuert/nats): New notify adapter with optional JetStream KV support - Job attempt middlewares: Contextual logging support during job processing
- Deferred scheduling: Schedule jobs for future execution via
scheduleoption - Thundering herd optimization: Hint-based notification system to reduce unnecessary polling
Improvements
- Single-statement migrations for cleaner provider implementations
- Restructured documentation into modular design docs
- Reorganized examples to single-purpose design with clear naming conventions
- Relaxed peer dependency version constraints for nats and otel
- Safe SQL literal helpers (
pgLiteral,sqliteLiteral) - Dual-context type separation in StateAdapter
Bug Fixes
- Prevent context leakage to independent chains during job processing
- Fix orphaned timers blocking process exit
- Correct
GetStateAdapterJobIdtype extraction for dual-context adapters - Suppress
notify_context_absencewarning when notify adapter is not set
Packages
All packages released at 0.2.0: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis, @queuert/nats, @queuert/otel.
v0.1.2
Patch Release
- Add comprehensive README documentation and package READMEs
Packages
All packages released at 0.1.2: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis.
v0.1.1
Patch Release
- Add OIDC trusted publishing support for npm
Packages
All packages released at 0.1.1: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis.
v0.1.0
Initial Release
First public release of the Queuert job queue library.
Packages
All packages released at 0.1.0: queuert, @queuert/postgres, @queuert/sqlite, @queuert/redis.