The Trigger.dev Private beta is now open. Sign up for access here.
Trigger workflows from APIs, on a schedule, or on demand. API calls are easy with authentication handled for you. Add durable delays that survive server restarts.
Trigger.dev is code-first so you can create workflows where they belong: in your codebase. Version control, localhost, test, review, and deploy like you're used to.
Your workflows run on your servers, not ours. We only receive the data you choose to send to us.
Subscribe to API changes and make requests, we’ll handle authentication for you.
Triggered when a GitHub issue is created or updated. Query your database to map GitHub user ids to Linear user ids. Then create or update Linear issues.",
import { Trigger, github, linear } from "@trigger.dev/sdk";
new Trigger({
name: "Sync Github issues to Linear",
on: github.issueEvent({
repo: "acme/website",
}),
run: async (event, ctx) => {
const { issue, action } = event;
// Find the user in our local database
const assignee = await findUserByGithubId(issue.assignee?.id);
if (action === "opened") {
await linear.issueCreate({
id: issue.id,
title: issue.title,
description: issue.body,
assigneeId: assignee?.linearId,
teamId: ctx.env.LINEAR_TEAM_ID,
});
} else {
await linear.issueUpdate(issue.id, {
assigneeId: assignee?.linearId,
stateId:
action === "closed"
? ctx.env.LINEAR_CLOSED_STATE_ID
: ctx.env.LINEAR_OPEN_STATE_ID,
});
}
},
}).listen();
Triggered on demand by your other code when a user is created. We wait for 3 hours then send a follow-up email if the user hasn’t completed onboarding yet.
import { Trigger, customEvent, slack, mailgun } from "@trigger.dev/sdk";
new Trigger({
name: "Send Email to New Users",
on: customEvent<UserEvent>({ name: "user.created" }),
run: async (event, ctx) => {
// Wait for 3 hours before continuing
await ctx.waitFor({ hours: 3 });
// Lookup user in the database
const user = await findUserById(event.id);
// only send email if user has not onboarded
if (!user.hasOnboarded) {
await mailgun.send({
to: user.email,
subject: "Welcome to our app!",
body: `Welcome to our app ${user.name}!}`,
});
await slack.sendMessage({
text: `Welcome email sent to ${user.email}`,
});
} else {
await slack.sendMessage({
text: `User ${user.email} has already onboarded`,
});
}
},
}).listen();
Triggered when an Intercom incident happens. We create a Linear issue, send a Slack message and, if it’s an urgent incident, we alert whoever is on call.
import { Trigger, intercom, linear, slack, pagerduty } from "@trigger.dev/sdk";
new Trigger({
name: "Intercom Incident",
on: intercom.newIncident(),
run: async (event, ctx) => {
// Find the customer in the database
const customer = await db.query("SELECT * FROM users WHERE email = $1", [
event.email,
]);
// Create linear ticket
const ticket = await linear.issueCreate({
title: event.title,
description: event.description,
assigneeId: ctx.env.LINEAR_ASSIGNEE_ID,
teamId: ctx.env.LINEAR_TEAM_ID,
});
// notify account manager
await slack.sendMessage({
text: `New incident for ${customer.name} in Linear: ${ticket.url}`,
});
if (event.severity === "urgent") {
// Create a pagerduty incident
await pagerduty.createIncident({
title: event.title,
description: event.description,
severity: "critical",
serviceId: ctx.env.PAGERDUTY_SERVICE_ID,
});
}
},
}).listen();
Install our SDK and get instant access to an arsenal of triggers you can use in your code:
Subscribe to webhooks without creating API endpoints. Plus they work locally without tunneling.
github.issueEvent({ repo: "acme/website" })
Easily subscribe to a recurring schedule using human readable code or CRON syntax.
scheduleEvent({ every: { minutes: 30 } })
Trigger workflows from any event in your app. Send us your events, and we'll do the rest.
customEvent<YourType>({ name: "your.event" })
Expose a HTTP endpoint to trigger your workflows with the method and path of your choice.
httpEvent<User>({ method: "POST", path: "/users/:id" })
Receive emails from your custom domain and trigger a workflow with the email metadata and content.
emailEvent({ address: "[email protected]" })
Integrate with AWS Event Bridge to trigger workflows on your own Event Bridge events.
eventBridge<SupportRequest>({ bus: "customer-support" })
We provide a full history of all runs, so you can see exactly what happened.
Workflows pick up where they left off when your server or external APIs go down.
Write workflows by creating triggers directly in your code. These can be 3rd-party integrations, custom events or on a schedule.
When your server runs, your workflow will be registered and you can authenticate with any APIs you’re using.
When your server runs, your workflow will be registered and you can authenticate with any APIs you’re using.
Deploy your new workflow as you would any other code commit and inspect each workflow run in real time.
You’ll always be able to host and run Trigger.dev yourself.
We've also created JSON Hero, an open source JSON viewer used by around 55,000 developers per month.
Does my data get sent to your servers?
Only what you choose to send. The main body of your workflow code runs on your infrastructure. For example when you do a database query, that never touches us.
Data we will receive (and store to display on the Runs page in your dashboard):
- Any data that triggers the start of a workflow
- Any data you pass to one of our API integrations • Any data you choose to log using our logging function
How is this different to Zapier, Pipedream etc?
Trigger.dev is a code-first workflow tool that lets you create workflows directly in your code, rather than using a UI builder like Zapier. This means you can stay in your own IDE and keep your internal data secure.
How long does this take to set up?
Setting up Trigger.dev is simple and takes 2 minutes. Install our SDK to get started and check out the Getting Started documentation to start creating your first workflow.
Can I use version control or roll-backs?
Yes. You create workflows directly in your own code so it’s version controlled with everything else.
How long does it take to code up a workflow?
A simple workflow triggering two events from different services will take about 5 minutes to create.
Do you have all the integrations I need?
Probably. Trigger.dev includes over 100 integrations including the most popular services. If you need a specific service that’s not available, you can request it, or create it yourself. We’re open source, so create an issue or Pull Request.
Can I build complex workflows?
Yes. There’s no limit to the complexity on workflows you can create. Workflows are created in code so you can write conditional, looping, branching or time delayed logic.
Can I run Trigger.dev locally?
Yes. Workflows are created in your code locally and, unlike webhooks, you don’t need to use tunneling to receive triggers.
How does the pricing model work?
Our hosted product gives you free runs each month, after that you will need to select a paid tier. You can also self-host, view the open source repository for instructions.
Is Trigger.dev open source?
Yes, Trigger.dev is open source. We are strong supporters of open source software, and our first product, jsonhero.io, has a thriving open source community. Trigger.dev follows in that tradition.
Is Trigger.dev a no/low-code tool?
No. Trigger.dev is designed for developers who want to create workflows directly in code, without using a UI builder like Zapier. This allows developers to stay in their familiar development environment and customise their workflows with code.
What languages / frameworks do you support?
Currently there is support for Node.js. More frameworks will be added soon.
Can I use an API which doesn’t have webhooks?
Yes. You can use a polling trigger to subscribe is no webhook exists.
Can non-coders use this product?
Developers will need to create workflows. Anyone on the team can monitor running workflows in the Trigger dashboard.
If you have any other questions about Trigger.dev, drop us an email, and one of the founders will get back to you.