### AI Setup Prompt for Trigger.dev Source: https://trigger.dev/docs/quick-start This prompt guides AI assistants through the process of adding Trigger.dev to your project. It covers account creation, SDK initialization, MCP server installation, dev server startup, task testing, secret key configuration, and triggering tasks from backend code. It also specifies critical rules for SDK usage, such as always importing from '@trigger.dev/sdk' and never using 'client.defineJob()'. ```text Help me add Trigger.dev to this project. ## What to do 1. I need a Trigger.dev account. If I don't have one, point me to https://cloud.trigger.dev to sign up. Wait for me to confirm. 2. Run `npx trigger.dev@latest init` in the project root. - When it asks about the MCP server, recommend I install it (best DX: gives you direct access to Trigger.dev docs, deploys, and run monitoring). - Install the "Hello World" example task when prompted. 3. Run `npx trigger.dev@latest dev` to start the dev server. 4. Once the dev server is running, test the example task from the Trigger.dev dashboard. 5. Set TRIGGER_SECRET_KEY in my .env file (or .env.local for Next.js). I can find it on the API Keys page in the dashboard. 6. Ask me what framework I'm using and show me how to trigger the task from my backend code. If I've already run init and want the MCP server, run: npx trigger.dev@latest install-mcp ## Critical rules - ALWAYS import from `@trigger.dev/sdk`. NEVER import from `@trigger.dev/sdk/v3`. - NEVER use `client.defineJob()` — that's the deprecated v2 API. - Use type-only imports when triggering from backend code to avoid bundling task code: import type { myTask } from "./trigger/example"; import { tasks } from "@trigger.dev/sdk"; const handle = await tasks.trigger("hello-world", { message: "Hello from my app!" }); ## When done, point me to - Writing tasks: https://trigger.dev/docs/tasks/overview - Real-time updates: https://trigger.dev/docs/realtime/overview - AI tooling: https://trigger.dev/docs/building-with-ai ``` -------------------------------- ### AI Setup Prompt for Trigger.dev Source: https://trigger.dev/docs/llms-full.txt This prompt can be used with AI coding assistants to automate the setup of Trigger.dev in your project. It guides the AI through account creation, SDK initialization, task installation, dev server startup, and environment variable configuration. ```text Help me add Trigger.dev to this project. ## What to do 1. I need a Trigger.dev account. If I don't have one, point me to https://cloud.trigger.dev to sign up. Wait for me to confirm. 2. Run `npx trigger.dev@latest init` in the project root. - When it asks about the MCP server, recommend I install it (best DX: gives you direct access to Trigger.dev docs, deploys, and run monitoring). - Install the "Hello World" example task when prompted. 3. Run `npx trigger.dev@latest dev` to start the dev server. 4. Once the dev server is running, test the example task from the Trigger.dev dashboard. 5. Set TRIGGER_SECRET_KEY in my .env file (or .env.local for Next.js). I can find it on the API Keys page in the dashboard. 6. Ask me what framework I'm using and show me how to trigger the task from my backend code. If I've already run init and want the MCP server, run: npx trigger.dev@latest install-mcp ## Critical rules - ALWAYS import from `@trigger.dev/sdk`. NEVER import from `@trigger.dev/sdk/v3`. - NEVER use `client.defineJob()` — that's the deprecated v2 API. - Use type-only imports when triggering from backend code to avoid bundling task code: import type { myTask } from "./trigger/example"; import { tasks } from "@trigger.dev/sdk"; const handle = await tasks.trigger("hello-world", { message: "Hello from my app!" }); ## When done, point me to - Writing tasks: https://trigger.dev/docs/tasks/overview - Real-time updates: https://trigger.dev/docs/realtime/overview - AI tooling: https://trigger.dev/docs/building-with-ai ``` -------------------------------- ### Install MCP Client (opencode) Source: https://trigger.dev/docs/mcp-introduction Install the MCP client for opencode using the command line. ```bash npx trigger.dev@latest install-mcp --client opencode ``` -------------------------------- ### Start Webapp Service Source: https://trigger.dev/docs/open-source-self-hosting Run the start script with the 'webapp' argument to initiate the web application service. ```bash ./start.sh webapp ``` -------------------------------- ### Initialize Trigger.dev CLI Source: https://trigger.dev/docs/guides/frameworks/nodejs Use this command to add Trigger.dev to your project, create a `/trigger` folder, and set up an example task. It also handles logging in and installing necessary SDK packages. ```bash npx trigger.dev@latest init ``` ```bash pnpm dlx trigger.dev@latest init ``` ```bash yarn dlx trigger.dev@latest init ``` -------------------------------- ### Install MCP Client (AMP) Source: https://trigger.dev/docs/mcp-introduction Install the MCP client for AMP using the command line. ```bash npx trigger.dev@latest install-mcp --client amp ``` -------------------------------- ### Install MCP Client (Ruler) Source: https://trigger.dev/docs/mcp-introduction Install the MCP client for Ruler using the command line. ```bash npx trigger.dev@latest install-mcp --client ruler ``` -------------------------------- ### Starting Development Servers Source: https://trigger.dev/docs/llms-full.txt Run both your Next.js development server and the Trigger.dev development environment concurrently. This setup is crucial for local testing and debugging. ```bash npm run dev npx trigger.dev@latest dev ``` -------------------------------- ### Initialize Trigger.dev Project (npm) Source: https://trigger.dev/docs/guides/frameworks/drizzle Use this command to add Trigger.dev to your project, create a /trigger folder, and set up an example task. It also prompts for MCP server installation and CLI login. ```bash npx trigger.dev@latest init ``` -------------------------------- ### Install MCP Client (Crush) Source: https://trigger.dev/docs/mcp-introduction Install the MCP client for Crush using the command line. ```bash npx trigger.dev@latest install-mcp --client crush ``` -------------------------------- ### Initialize Trigger.dev Project (pnpm) Source: https://trigger.dev/docs/guides/frameworks/drizzle Use this command to add Trigger.dev to your project, create a /trigger folder, and set up an example task. It also prompts for MCP server installation and CLI login. ```bash pnpm dlx trigger.dev@latest init ``` -------------------------------- ### Create .env File Source: https://trigger.dev/docs/open-source-self-hosting Copies the example environment file to create a new .env file for configuration. ```bash cp .env.example .env ``` -------------------------------- ### Quick Start Helm Installation Source: https://trigger.dev/docs/self-hosting/kubernetes Install Trigger.dev using the Helm chart with default values for testing purposes. Ensure you have Helm 3.8+ and kubectl configured. ```bash helm upgrade -n trigger --install trigger \ oci://ghcr.io/triggerdotdev/charts/trigger \ --version "~4.0.0" \ --create-namespace ``` -------------------------------- ### Full Customer Onboarding Workflow in Trigger.dev Source: https://trigger.dev/docs/migration-n8n This example demonstrates a complete customer onboarding workflow, translating a multi-step n8n process into a single Trigger.dev task. It includes provisioning, sending emails, notifications, delays, and activation checks. ```typescript import { task, wait } from "@trigger.dev/sdk"; import { provisionAccount } from "./provision-account"; import { sendWelcomeEmail } from "./send-welcome-email"; export const onboardCustomer = task({ id: "onboard-customer", retry: { maxAttempts: 3, }, run: async (payload: { customerId: string; email: string; plan: "starter" | "pro" | "enterprise"; }) => { // provision their account, throws if the subtask fails await provisionAccount .triggerAndWait({ customerId: payload.customerId, plan: payload.plan, }) .unwrap(); // send welcome email await sendWelcomeEmail .triggerAndWait({ customerId: payload.customerId, email: payload.email, }) .unwrap(); // notify the team await notifySlack(`New customer: ${payload.email} on ${payload.plan}`); // wait 3 days, then check if they've activated await wait.for({ days: 3 }); const activated = await checkActivation(payload.customerId); if (!activated) { await sendActivationNudge(payload.email); } return { customerId: payload.customerId, activated }; }, }); ``` ```typescript import { onboardCustomer } from "@/trigger/onboard-customer"; await onboardCustomer.trigger({ customerId: customer.id, email: customer.email, plan: customer.plan, }); ``` -------------------------------- ### Python Document to Markdown Conversion Example Source: https://trigger.dev/docs/llms-full.txt An example demonstrating how to convert documents to markdown using Python and the MarkItDown library with Trigger.dev. This snippet is illustrative and requires the MarkItDown library to be installed. ```python # Example usage of MarkItDown with Trigger.dev # Ensure you have installed the library: pip install markitdown from markitdown import convert_to_markdown def convert_document_to_markdown(document_content): """Converts a given document content to markdown format.""" return convert_to_markdown(document_content) # Example usage: # html_content = "

Hello World

This is a test.

" # markdown_output = convert_document_to_markdown(html_content) # print(markdown_output) ``` -------------------------------- ### Initialize and Start Resource Monitor Source: https://trigger.dev/docs/llms-full.txt This snippet shows how to initialize the ResourceMonitor class and start monitoring system resources at a specified interval. It includes middleware setup and conditional enabling via environment variables. ```typescript import { task, logger, wait } from "@trigger.dev/sdk"; import { ResourceMonitor } from "../resourceMonitor.js"; // Middleware to enable the resource monitor tasks.middleware("resource-monitor", async ({ ctx, next }) => { const resourceMonitor = new ResourceMonitor({ ctx, }); // Only enable the resource monitor if the environment variable is set if (process.env.RESOURCE_MONITOR_ENABLED === "1") { resourceMonitor.startMonitoring(1_000); } await next(); resourceMonitor.stopMonitoring(); }); export const resourceMonitorTest = task({ id: "resource-monitor-test", run: async (payload: any, { ctx }) => { const interval = createMemoryPressure(); await setTimeout(180_000); clearInterval(interval); return { message: "Hello, resources!", }; }, }); ``` -------------------------------- ### Install MCP for All Supported Clients Source: https://trigger.dev/docs/mcp-introduction Use this command to install the MCP into all supported clients automatically. This is a convenient way to set up the MCP across your development environment. ```bash npx trigger.dev@latest install-mcp --yolo ``` -------------------------------- ### Basic Playwright Setup Source: https://trigger.dev/docs/llms-full.txt Use this snippet for a standard Playwright integration. It automatically installs Playwright and its dependencies. ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { playwright } from "@trigger.dev/build/extensions/playwright"; export default defineConfig({ project: "", // Your other config settings... build: { extensions: [ playwright(), ], }, }); ``` -------------------------------- ### Display help information Source: https://trigger.dev/docs/llms-full.txt Show the help information for the deploy command. ```bash npx trigger.dev@latest deploy --help | -h ``` -------------------------------- ### Prisma Config File Setup (Legacy Mode) Source: https://trigger.dev/docs/llms-full.txt This example uses a `prisma.config.ts` file to centralize Prisma configuration, simplifying the Trigger.dev setup for legacy mode. Ensure `dotenv/config` is imported if using environment variables. ```typescript import { defineConfig, env } from "prisma/config"; import "dotenv/config"; export default defineConfig({ schema: "prisma/schema.prisma", migrations: { path: "prisma/migrations", }, datasource: { url: env("DATABASE_URL"), directUrl: env("DATABASE_URL_UNPOPOOLED"), }, }); ``` ```prisma generator client { provider = "prisma-client-js" previewFeatures = ["typedSql"] } datasource db { provider = "postgresql" url = env("DATABASE_URL") directUrl = env("DATABASE_URL_UNPOOLED") } model User { id String @id @default(cuid()) email String @unique name String? } ``` ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { prismaExtension } from "@trigger.dev/build/extensions/prisma"; export default defineConfig({ project: process.env.TRIGGER_PROJECT_REF!, build: { extensions: [ prismaExtension({ mode: "legacy", configFile: "./prisma.config.ts", // Load from config file migrate: true, typedSql: true, // schema and migrations path are extracted from prisma.config.ts }), ], }, }); ``` ```typescript import { PrismaClient } from "@prisma/client"; export * as sql from "@prisma/client/sql"; export const db = new PrismaClient({ datasources: { db: { url: process.env.DATABASE_URL, }, }, }); ``` -------------------------------- ### Install Trigger.dev SDK and Build Packages (bun) Source: https://trigger.dev/docs/manual-setup Install the necessary Trigger.dev SDK and build packages using bun. ```bash bun add @trigger.dev/sdk@latest bun add -D @trigger.dev/build@latest ``` -------------------------------- ### Calling Fetch Endpoints for Token Minting and Session Start Source: https://trigger.dev/docs/ai-chat/frontend Configure `useTriggerChatTransport` to use REST endpoints for minting access tokens and starting chat sessions. This example shows how to type the fetch handlers using `AccessTokenParams` and `StartSessionParams` from `@trigger.dev/sdk/chat`. ```ts import type { AccessTokenParams, StartSessionParams } from "@trigger.dev/sdk/chat"; const transport = useTriggerChatTransport({ task: "my-chat", accessToken: async ({ chatId }: AccessTokenParams) => { const res = await fetch(`/api/chat/${chatId}/access-token`, { method: "POST" }); return res.text(); }, startSession: async ({ chatId, taskId, clientData }: StartSessionParams) => { const res = await fetch(`/api/chat/${chatId}/start`, { method: "POST", body: JSON.stringify({ taskId, clientData }), }); return res.json(); // { publicAccessToken: string } }, }); ``` -------------------------------- ### Install and run Trigger.dev CLI Source: https://trigger.dev/docs/migration-mergent Install the Trigger.dev CLI and run the local development server to set up a local environment that mirrors production. ```bash npx trigger.dev@latest init npx trigger.dev@latest dev ``` -------------------------------- ### Initialize Supabase Project Source: https://trigger.dev/docs/guides/frameworks/supabase-edge-functions-basic Use this command to create a new Supabase project. Ensure you answer 'y' to generate VS Code settings for Deno and install recommended extensions if using VS Code. ```bash supabase init ``` -------------------------------- ### Configure Puppeteer Extension Source: https://trigger.dev/docs/guides/examples/puppeteer Add the Puppeteer extension to your trigger.config.ts to enable its use in your project. This is a necessary setup step for all Puppeteer examples. ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { puppeteer } from "@trigger.dev/build/extensions/puppeteer"; export default defineConfig({ project: "", // Your other config settings... build: { // This is required to use the Puppeteer library extensions: [puppeteer()], }, }); ``` -------------------------------- ### String Manipulation Examples Source: https://trigger.dev/docs/llms-full.txt Shows common string operations including converting case, concatenating, extracting substrings, and getting string length. ```sql SELECT lower(status) AS status_lower, upper(status) AS status_upper, concat(task_identifier, '-', status) AS combined, substring(run_id, 1, 8) AS short_id, length(task_identifier) AS name_length FROM runs ``` -------------------------------- ### Combined Delay and TTL Example Source: https://trigger.dev/docs/triggering Illustrates the timeline when both delay and TTL are used. TTL starts counting from the enqueue time, not the trigger time. ```typescript await myTask.trigger({ some: "data" }, { delay: "10m", ttl: "1h" }); ``` -------------------------------- ### Install Dev Dependencies for Testing Source: https://trigger.dev/docs/ai-chat/testing Install Vitest, AI SDK, and provider packages using pnpm. The AI SDK provider is optional and only needed for specific type casting. ```bash pnpm add -D vitest ai @ai-sdk/provider ``` -------------------------------- ### Install AI SDK 7 Telemetry Adapter Source: https://trigger.dev/docs/ai-chat/changelog Install the `@ai-sdk/otel` adapter alongside `ai@7` to enable telemetry for model-call spans when using Vercel AI SDK 7. This ensures your `streamText` spans are recorded in the run trace without additional setup. ```sh npm install @ai-sdk/otel ``` -------------------------------- ### Inline Build Extension Example Source: https://trigger.dev/docs/llms-full.txt Defines a simple build extension inline within the `trigger.config.ts` file. This extension logs a message when the build starts. ```typescript import { defineConfig } from "@trigger.dev/sdk"; export default defineConfig({ project: "my-project", build: { extensions: [ { name: "my-extension", onBuildStart: async (context) => { console.log("Build starting!"); }, }, ], }, }); ``` -------------------------------- ### Deploy Command with Help Option Source: https://trigger.dev/docs/cli-deploy-commands Display help information for the deploy command using the --help or -h option. ```bash npx trigger.dev@latest deploy --help ``` -------------------------------- ### Configure Puppeteer Extension for Trigger.dev Source: https://trigger.dev/docs/llms-full.txt Add the Puppeteer extension to your trigger.config.ts to enable Puppeteer functionality in your project. This is a required setup step for all Puppeteer examples. ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { puppeteer } from "@trigger.dev/build/extensions/puppeteer"; export default defineConfig({ project: "", // Your other config settings... build: { // This is required to use the Puppeteer library extensions: [puppeteer()], }, }); ``` -------------------------------- ### Show Help Information Source: https://trigger.dev/docs/cli-preview-archive Use the --help or -h option to display help information for the command. ```bash npx trigger.dev@latest preview archive --help ``` -------------------------------- ### Run Development Server with a Profile Source: https://trigger.dev/docs/llms-full.txt Execute the development server command using a previously configured profile. ```bash npx trigger.dev@latest dev --profile self-hosted ``` -------------------------------- ### Configure Lightpanda Extension with Options Source: https://trigger.dev/docs/llms-full.txt Customize the Lightpanda extension by specifying the version and disabling telemetry. This example shows how to install a 'nightly' version and disable telemetry. ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { lightpanda } from "@trigger.dev/build/extensions/lightpanda"; export default defineConfig({ project: "", build: { extensions: [ lightpanda({ version: "nightly", disableTelemetry: true, }), ], }, }); ``` -------------------------------- ### Install Nango Frontend SDK Source: https://trigger.dev/docs/guides/frameworks/nango Install the Nango frontend SDK using npm. This is the first step to integrating Nango into your Next.js application. ```bash npm install @nangohq/frontend ``` -------------------------------- ### Basic Playwright Setup with Trigger.dev Source: https://trigger.dev/docs/config/extensions/playwright Use this basic configuration to include the Playwright build extension in your Trigger.dev project. It automatically installs Playwright and necessary browser dependencies. ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { playwright } from "@trigger.dev/build/extensions/playwright"; export default defineConfig({ project: "", // Your other config settings... build: { extensions: [ playwright(), ], }, }); ``` -------------------------------- ### Start Development Servers Source: https://trigger.dev/docs/guides/frameworks/nango Run your local development server and the Trigger.dev CLI. This allows for local testing and debugging of your tasks. ```bash npm run dev npx trigger.dev@latest dev ``` -------------------------------- ### Add Prisma and OpenAI Instrumentations Source: https://trigger.dev/docs/config/config-file Configure your `trigger.config.ts` to include Prisma and OpenAI instrumentations. Ensure you have the necessary packages installed and follow any specific setup instructions for each instrumentation. ```typescript import { defineConfig } from "@trigger.dev/sdk"; import { PrismaInstrumentation } from "@prisma/instrumentation"; import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai"; export default defineConfig({ project: "", // Your other config settings... telemetry: { instrumentations: [new PrismaInstrumentation(), new OpenAIInstrumentation()], }, }); ``` -------------------------------- ### Start Development Environment Source: https://trigger.dev/docs/guides/frameworks/sequin Ensure all services are running before proceeding with the integration test. This includes the Next.js app, Trigger.dev dev server, and the Sequin tunnel. ```bash npm run dev ``` ```bash npx trigger.dev@latest dev ``` ```bash sequin tunnel --ports=3001:local_endpoint ``` -------------------------------- ### Using Typed Messages with `useChat` Source: https://trigger.dev/docs/ai-chat/frontend Pass the same message type through `useChat` when your chat agent is defined with `chat.withUIMessage` to narrow `messages` and `message.parts` on the client. This example demonstrates the setup with `useTriggerChatTransport` and `useChat`. ```tsx import { useChat } from "@ai-sdk/react"; import { useTriggerChatTransport, type InferChatUIMessage } from "@trigger.dev/sdk/chat/react"; import type { myChat } from "./myChat"; type Msg = InferChatUIMessage; const transport = useTriggerChatTransport({ task: "my-chat", accessToken: ({ chatId }) => mintChatAccessToken(chatId), startSession: ({ chatId, clientData }) => startChatSession({ chatId, clientData }), }); const { messages } = useChat({ transport }); ``` -------------------------------- ### Install Required Packages Source: https://trigger.dev/docs/guides/frameworks/nango Install the Nango and Anthropic SDKs using npm. These are necessary for authentication and AI summarization respectively. ```bash npm install @nangohq/node @anthropic-ai/sdk ``` -------------------------------- ### Configure Agent with exitAfterPreloadIdle Source: https://trigger.dev/docs/ai-chat/lifecycle-hooks Set `exitAfterPreloadIdle` to `true` for 'fire and forget' preloads. The run completes after the idle timeout if no user message is received. This example shows eager state setup in `onPreload`. ```typescript export const myChat = chat.agent({ id: "my-chat", preloadIdleTimeoutInSeconds: 10, exitAfterPreloadIdle: true, onPreload: async ({ chatId, clientData }) => { // Eagerly set up state. If no message comes, the run just ends. await initializeChat(chatId, clientData); }, run: async ({ messages, signal }) => { return streamText({ model: anthropic("claude-sonnet-4-5"), messages, abortSignal: signal }); }, }); ``` -------------------------------- ### Successful Deployment Output Source: https://trigger.dev/docs/deployment/overview Example output indicating a successful deployment of a new version with detected tasks. ```bash Trigger.dev (3.3.16) ------------------------------------------------------ ┌ Deploying project │ ◇ Retrieved your account details for eric@trigger.dev │ ◇ Successfully built code │ ◇ Successfully deployed version 20250228.1 │ └ Version 20250228.1 deployed with 4 detected tasks ``` -------------------------------- ### useRealtimeStream Hook Options Source: https://trigger.dev/docs/tasks/streams This example illustrates the various options available when using the `useRealtimeStream` hook, including access token, custom API URL, timeout, start index, throttling, and data callbacks. ```tsx const { parts, error } = useRealtimeStream(streamDef, runId, { accessToken: "pk_...", // Required: Public access token baseURL: "https://api.trigger.dev", // Optional: Custom API URL timeoutInSeconds: 60, // Optional: Timeout (default: 60) startIndex: 0, // Optional: Start from specific chunk throttleInMs: 16, // Optional: Throttle updates (default: 16ms) onData: (chunk) => {}, // Optional: Callback for each chunk }); ``` -------------------------------- ### Deploy Command with Environment Option Source: https://trigger.dev/docs/cli-deploy-commands Use the --env or -e option to specify the deployment environment (e.g., staging, preview). Defaults to 'prod'. ```bash npx trigger.dev@latest deploy --env staging ``` -------------------------------- ### Example chat.headStart Handler Configuration Source: https://trigger.dev/docs/ai-chat/fast-starts An example of how to configure and export a `chat.headStart` handler. This snippet shows setting a specific agent ID and trigger configuration, including tags and machine type, and defines the `run` callback to stream text with specified model and system prompts. ```typescript export const chatHandler = chat.headStart({ agentId: "my-chat", triggerConfig: { tags: ["org:acme"], queue: "chat", machine: "small-2x" }, run: async ({ chat: helper }) => streamText({ ...helper.toStreamTextOptions({ tools: headStartTools }), model, system }), }); ``` -------------------------------- ### Accessing Task Context in TypeScript Source: https://trigger.dev/docs/context Use the `ctx` object passed to the `run` function to access task context. The context is fixed at the start of the run and does not change during execution. This example checks the environment type. ```typescript import { task } from "@trigger.dev/sdk"; export const parentTask = task({ id: "parent-task", run: async (payload: { message: string }, { ctx }) => { if (ctx.environment.type === "DEVELOPMENT") { return; } }, }); ``` -------------------------------- ### Example Payload for Real-time Image Generation Task Source: https://trigger.dev/docs/llms-full.txt This JSON object demonstrates the expected payload structure for the `realtimeImageGeneration` task. It includes a URL to an image and a text prompt to guide the image generation process. ```json { "imageUrl": "https://static.vecteezy.com/system/resources/previews/005/857/332/non_2x/funny-portrait-of-cute-corgi-dog-outdoors-free-photo.jpg", "prompt": "Dress this dog for Christmas" } ``` -------------------------------- ### SKILL.md Frontmatter Example Source: https://trigger.dev/docs/ai-chat/patterns/skills Shows the required frontmatter for a SKILL.md file, including the skill's name and a description for the agent. ```yaml --- name: time-utils description: Compute and format dates/times in arbitrary timezones. Use when the user asks "what time is it", timezone conversions, or date math. --- ``` -------------------------------- ### Run Next.js Development Server Source: https://trigger.dev/docs/guides/frameworks/nextjs-webhooks Commands to start the Next.js development server using npm, pnpm, or yarn. ```bash npm run dev ``` ```bash pnpm run dev ``` ```bash yarn dev ```