Skip to content

Changelog

v0.5.0

What’s Changed

Breaking Changes

  • Renamed core APIs for consistency: defineJobTypes is now defineJobTypeRegistry, processor registries use createJobTypeProcessorRegistry, and createInProcessWorker accepts processorRegistry. mergeJobTypeProcessors is now mergeJobTypeProcessorRegistries.
  • continueWith restricted to local types: continueWith targets 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 isolatedDeclarations for improved .d.ts compatibility 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() and mergeJobTypeProcessors() 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: defineJobTypes now accepts an optional TExternal type 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: ObservabilityAdapter and StateAdapter interfaces now use string | null for trace contexts instead of unknown, making types more precise and predictable.
  • Postgres trace context columns changed from jsonb to text for consistency with the narrowed types.

Breaking Changes

  • Trace context types narrowed from unknown to string | null — affects custom ObservabilityAdapter and StateAdapter implementations.
  • Postgres schema: trace columns changed from jsonb to text (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 $definitions replaced with symbol; use JobTypeRegistryDefinitions<T> utility type instead.
  • PartialJobTypeReference replaced by JobTypeReference union (NominalJobTypeReference | StructuralJobTypeReference).
  • JobTypeRegistryConfig now requires a getTypeNames callback.

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 basePath option to createDashboard() 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 basePath correctly return 404, including paths that share a prefix (e.g. /application/... when basePath is /app).

Dashboard: CSP nonce removed (breaking)

  • The fetch handler no longer accepts a second { nonce } argument. CSP nonce injection should be handled in your own middleware if needed. The @queuert/dashboard package 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 Job base type to separate JobWithBlockers wrapper
  • Trace context split: Separated into distinct chain and job trace fields
  • CommitHooks → TransactionHooks: Renamed with added discard support
  • withNotify replaced: Explicit CommitHooks / TransactionHooks for side-effect buffering
  • chain_index added: Deterministic chain ordering and continuation deduplication
  • originId removed: Deduplication key used for continuations instead
  • rootChainId removed: Unified chain deletion model
  • startBlockers callback → blockers array: Simplified blocker declaration
  • State adapter retry wrapper removed: Retry logic no longer built into adapters
  • updatedAt removed: Dropped from StateJob and database schema
  • API naming simplified: Removed redundant Queuert prefix from exports
  • Worker config simplified: Reduced property verbosity
  • Deduplication API renamed: strategy → scope
  • Worker redesigned: Parallel slot-based execution model
  • createInProcessWorker accepts client: Takes client instance instead of individual adapters
  • OTEL metric prefix hardcoded: Removed messaging semantic convention attributes
  • deleteJobChains returns deleted chains
  • acquireJob returns hasMore

New Features

  • @queuert/dashboard: Embeddable SolidJS web dashboard for job queue observation
  • Client query methods: queryJobs and queryJobChains with 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: cascade option on deleteJobChains for 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_id column (postgres, sqlite)
  • Scope deduplication key by chain type name
  • Assign continuedJob in workerless continueWith path
  • 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: createQueuert split into createQueuertClient and createQueuertInProcessWorker for clearer separation of concerns
  • Adapter API simplified: Removed provideContext, made txContext optional
  • Log API changed: Tuple args replaced with named data/error properties
  • Renamed JobSequence to JobChain across the entire API
  • Simplified migrateToLatest API: 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 schedule option
  • 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 GetStateAdapterJobId type extraction for dual-context adapters
  • Suppress notify_context_absence warning 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.