node-worker features
Generated from templates/node-worker/template.json. Drop a default with
--without, add an opt-in with --with.
| Feature | Default | What it adds |
|---|---|---|
prismaPrisma database access | Always | Shares the schema with your API, so the worker reads and writes the same models rather than going through HTTP. |
loggingpino structured logging | Always | |
queueBullMQ consumers | On | Worker processes pulling from the same Redis queues your API produces to. Files it owns (2)
|
temporalTemporal worker | Opt-in | Runs durable workflows and activities from src/temporal (an example of each included) on TEMPORAL_TASK_QUEUE, next to the BullMQ consumers. Pair with the API's temporal feature, which starts them. Files it owns (1)
|
telemetryOpenTelemetry → OpenObserve | On | Traces, logs and metrics pushed over OTLP (set OPENOBSERVE_URL/ORG/TOKEN, or any OTEL_* backend). Off at runtime until connected. Files it owns (1)
|
browserHeadless browser (Puppeteer) | Opt-in | For scraping pages that need JavaScript executed. Heavy — the Docker image grows by roughly 800 MB (Chromium and its fonts). Files it owns (1)
|
pm2PM2 process manager | On | ecosystem.config.cjs for running the worker under PM2 outside Docker. Files it owns (1)
|
dockerDocker image | On | Files it owns (3)
|
ciForgejo Actions CI | On | Files it owns (1)
|
secretsInfisical secret sync | On | Files it owns (1)
|
temporalchanges the Docker base image: Temporal’s native core ships glibc builds only and won’t load on Alpine, even withgcompat, so the image builds onnode:24-bookworm-sliminstead of the Alpine house image. Thebrowserandpm2steps have Debian equivalents.browseradds Chromium to the image, roughly 800 MB.launchBrowser()insrc/utils/browser.tsisn’t called anywhere by default.pm2runsdist/withautorestart: false: a crash is not restarted by PM2. Rely on your container’s restart policy, or change it.queueoff leaves a worker that only runs Temporal workflows (or nothing, as a base for your own loop).