The trigger.config.ts file
This file is used to configure your project and how it’s built.
The trigger.config.ts
file is used to configure your Trigger.dev project. It is a TypeScript file at the root of your project that exports a default configuration object. Here’s an example:
The config file handles a lot of things, like:
- Specifying where your trigger tasks are located using the
dirs
option. - Setting the default retry settings.
- Configuring OpenTelemetry instrumentations.
- Customizing the build process.
- Adding global task lifecycle functions.
The config file is bundled with your project, so code imported in the config file is also bundled,
which can have an effect on build times and cold start duration. One important qualification is
anything defined in the build
config is automatically stripped out of the config file, and
imports used inside build config with be tree-shaken out.
Dirs
You can specify the directories where your tasks are located using the dirs
option:
If you omit the dirs
option, we will automatically detect directories that are named trigger
in your project, but we recommend specifying the directories explicitly. The dirs
option is an array of strings, so you can specify multiple directories if you have tasks in multiple locations.
We will search for TypeScript and JavaScript files in the specified directories and include them in the build process. We automatically exclude files that have .test
or .spec
in the name, but you can customize this by specifying glob patterns in the ignorePatterns
option:
Lifecycle functions
You can add lifecycle functions to get notified when any task starts, succeeds, or fails using onStart
, onSuccess
and onFailure
:
Read more about task lifecycle functions in the tasks overview.
Instrumentations
We use OpenTelemetry (OTEL) for our run logs. This means you get a lot of information about your tasks with no effort. But you probably want to add more information to your logs. For example, here’s all the Prisma calls automatically logged:
Here we add Prisma and OpenAI instrumentations to your trigger.config.ts
file.
There is a huge library of instrumentations you can easily add to your project like this.
Some ones we recommend:
Package | Description |
---|---|
@opentelemetry/instrumentation-http | Logs all HTTP calls |
@prisma/instrumentation | Logs all Prisma calls, you need to enable tracing |
@traceloop/instrumentation-openai | Logs all OpenAI calls |
@opentelemetry/instrumentation-fs
which logs all file system calls is currently not supported.
Exporters
You can also configure custom exporters to send your telemetry data to other services. For example, you can send your logs to Axiom:
Make sure to set the AXIOM_API_TOKEN
and AXIOM_DATASET
environment variables in your project.
Runtime
We currently only officially support the node
runtime, but you can try our experimental bun
runtime by setting the runtime
option in your config file:
See our Bun guide for more information.
Default machine
You can specify the default machine for all tasks in your project:
See our machines documentation for more information.
Log level
You can set the log level for your project:
The logLevel
only determines which logs are sent to the Trigger.dev instance when using the logger
API. All console
based logs are always sent.
Max duration
You can set the default maxDuration
for all tasks in your project:
See our maxDuration guide for more information.
Build configuration
You can customize the build process using the build
option:
The trigger.config.ts
file is included in the bundle, but with the build
configuration
stripped out. These means any imports only used inside the build
configuration are also removed
from the final bundle.
External
All code is bundled by default, but you can exclude some packages from the bundle using the external
option:
When a package is excluded from the bundle, it will be added to a dynamically generated package.json file in the build directory. The version of the package will be the same as the version found in your node_modules
directory.
Each entry in the external should be a package name, not necessarily the import path. For example, if you want to exclude the ai
package, but you are importing ai/rsc
, you should just include ai
in the external
array:
Any packages that install or build a native binary should be added to external, as native binaries
cannot be bundled. For example, re2
, sharp
, and sqlite3
should be added to external.
JSX
You can customize the jsx
options that are passed to esbuild
using the jsx
option:
By default we enabled esbuild’s automatic JSX runtime which means you don’t need to import React
in your JSX files. You can disable this by setting automatic
to false
.
See the esbuild JSX documentation for more information.
Conditions
You can add custom import conditions to your build using the conditions
option:
These conditions effect how imports are resolved during the build process. For example, the react-server
condition will resolve ai/rsc
to the server version of the ai/rsc
export.
Custom conditions will also be passed to the node
runtime when running your tasks.
Extensions
Build extension allow you to hook into the build system and customize the build process or the resulting bundle and container image (in the case of deploying). You can use pre-built extensions by installing the @trigger.dev/build
package into your devDependencies
, or you can create your own.
additionalFiles
See the additionalFiles documentation for more information.
additionalPackages
See the additionalPackages documentation for more information.
emitDecoratorMetadata
See the emitDecoratorMetadata documentation for more information.
Prisma
See the prismaExtension documentation for more information.
syncEnvVars
See the syncEnvVars documentation for more information.
puppeteer
See the puppeteer documentation for more information.
ffmpeg
See the ffmpeg documentation for more information.
esbuild plugins
See the esbuild plugins documentation for more information.
aptGet
See the aptGet documentation for more information.