|
| 1 | +--- |
| 2 | +title: "Turborepo monorepo with Prisma" |
| 3 | +sidebarTitle: "Turborepo monorepo with Prisma" |
| 4 | +description: "Two example projects demonstrating how to use Prisma and Trigger.dev in a Turborepo monorepo setup." |
| 5 | +--- |
| 6 | + |
| 7 | +## Overview |
| 8 | + |
| 9 | +These examples demonstrate how to use Prisma and Trigger.dev in a Turborepo monorepo. |
| 10 | + |
| 11 | +<Note> |
| 12 | + |
| 13 | +You can either fork the repos below, or simply check out the project structures and code to get an idea of how to set up Trigger.dev in your own monorepos. |
| 14 | + |
| 15 | +</Note> |
| 16 | + |
| 17 | +- Example 1: Turborepo monorepo demo with Trigger.dev and Prisma packages |
| 18 | +- Example 2: Turborepo monorepo demo with a Prisma package and Trigger.dev installed in a Next.js app |
| 19 | + |
| 20 | +## Example 1: Turborepo monorepo demo with Trigger.dev and Prisma packages |
| 21 | + |
| 22 | +This simple example demonstrates how to use Trigger.dev and Prisma as packages inside a monorepo created with Turborepo. The Trigger.dev task is triggered by a button click in a Next.js app which triggers the task via a server action. |
| 23 | + |
| 24 | +### GitHub repo |
| 25 | + |
| 26 | +Fork the GitHub repo below to get started with this example project. |
| 27 | + |
| 28 | +<Card |
| 29 | + title="Check out the Turborepo monorepo demo with Trigger.dev and Prisma packages repo" |
| 30 | + icon="GitHub" |
| 31 | + href="https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package" |
| 32 | +> |
| 33 | + Click here to view the full code for this project in our examples repository on GitHub. You can |
| 34 | + fork it and use it as a starting point for your own project. |
| 35 | +</Card> |
| 36 | + |
| 37 | +### Features |
| 38 | + |
| 39 | +- This monorepo has been created using the [Turborepo CLI](https://turbo.build/repo), following the official [Prisma and Turborepo docs](https://www.prisma.io/docs/guides/turborepo), and then adapted for use with Trigger.dev. |
| 40 | +- [pnpm](https://pnpm.io/) has been used as the package manager. |
| 41 | +- A tasks package (`@repo/tasks`) using [Trigger.dev](https://trigger.dev) is used to create and execute tasks from an app inside the monorepo. |
| 42 | +- A database package (`@repo/db`) using [Prisma ORM](https://www.prisma.io/docs/orm/) is used to interact with the database. You can use any popular Postgres database supported by Prisma, e.g. [Supabase](https://supabase.com/), [Neon](https://neon.tech/), etc. |
| 43 | +- A [Next.js](https://nextjs.org/) example app (`apps/web`) to show how to trigger the task via a server action. |
| 44 | + |
| 45 | +### Project structure |
| 46 | + |
| 47 | +``` |
| 48 | +| |
| 49 | +| — apps/ |
| 50 | +| | — web/ # Next.js frontend application |
| 51 | +| | | — app/ # Next.js app router |
| 52 | +| | | | — api/ |
| 53 | +| | | | | — actions.ts # Server actions for triggering tasks |
| 54 | +| | | | — page.tsx # Main page with "Add new user" button |
| 55 | +| | | | — layout.tsx # App layout |
| 56 | +| | | — package.json # Dependencies including @repo/db and @repo/tasks |
| 57 | +| | |
| 58 | +| | — docs/ # Documentation app (not fully implemented) |
| 59 | +| |
| 60 | +| — packages/ |
| 61 | +| | — database/ # Prisma database package (@repo/db) |
| 62 | +| | | — prisma/ |
| 63 | +| | | | — schema.prisma # Database schema definition |
| 64 | +| | | — generated/ # Generated Prisma client (gitignored) |
| 65 | +| | | — src/ |
| 66 | +| | | | — index.ts # Exports from the database package |
| 67 | +| | | — package.json # Database package dependencies |
| 68 | +| | |
| 69 | +| | — tasks/ # Trigger.dev tasks package (@repo/tasks) |
| 70 | +| | | — src/ |
| 71 | +| | | | — index.ts # Exports from the tasks package |
| 72 | +| | | | — trigger/ |
| 73 | +| | | | — index.ts # Exports the tasks |
| 74 | +| | | | — addNewUser.ts # Task implementation for adding users |
| 75 | +| | | — trigger.config.ts # Trigger.dev configuration |
| 76 | +| | | — package.json # Tasks package dependencies |
| 77 | +| | |
| 78 | +| | — ui/ # UI components package (referenced but not detailed) |
| 79 | +| |
| 80 | +| — turbo.json # Turborepo configuration |
| 81 | +| — package.json # Root package.json with workspace config |
| 82 | +``` |
| 83 | + |
| 84 | +### Relevant files and code |
| 85 | + |
| 86 | +#### Database package |
| 87 | + |
| 88 | +- Prisma is added as a package in [`/packages/database`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/database/) and exported as `@repo/db` in the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/database/package.json) file. |
| 89 | +- The schema is defined in the [`prisma/schema.prisma`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/database/prisma/schema.prisma) file. |
| 90 | + |
| 91 | +#### Tasks package |
| 92 | + |
| 93 | +<Note> |
| 94 | + |
| 95 | +to run `pnpm dlx trigger.dev@latest init` in a blank packages folder, you have to add a `package.json` file first, otherwise it will attempt to add Trigger.dev files in the root of your monorepo. |
| 96 | + |
| 97 | +</Note> |
| 98 | + |
| 99 | +- Trigger.dev is added as a package in [`/packages/tasks`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks) and exported as `@repo/tasks` in the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/package.json) file. |
| 100 | +- The [`addNewUser.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/src/trigger/addNewUser.ts) task adds a new user to the database. |
| 101 | +- The [`packages/tasks/src/index.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/src/index.ts) file exports values and types from the Trigger.dev SDK, and is exported from the package via the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/package.json) file. |
| 102 | +- The [`packages/tasks/src/trigger/index.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/src/trigger/index.ts) file exports the task from the package. Every task must be exported from the package like this. |
| 103 | +- The [`trigger.config.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/packages/tasks/trigger.config.ts) file configures the Trigger.dev project settings. This is where the Trigger.dev [Prisma build extension](https://trigger.dev/docs/config/extensions/prismaExtension) is added, which is required to use Prisma in the Trigger.dev task. |
| 104 | + |
| 105 | +<Info> |
| 106 | +You must include the version of Prisma you are using in the `trigger.config.ts` file, otherwise the Prisma build extension will not work. Learn more about our [Prisma build extension](/config/extensions/prismaExtension). |
| 107 | + |
| 108 | +</Info> |
| 109 | + |
| 110 | +#### The Next.js app `apps/web` |
| 111 | + |
| 112 | +- The app is a simple Next.js app using the App Router, that uses the `@repo/db` package to interact with the database and the `@repo/tasks` package to trigger the task. These are both added as dependencies in the [`package.json`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/apps/web/package.json) file. |
| 113 | +- The task is triggered from a button click in the app in [`page.tsx`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/apps/web/app/page.tsx), which uses a server action in [`/app/api/actions.ts`](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package/apps/web/app/api/actions.ts) to trigger the task with an example payload. |
| 114 | + |
| 115 | +### Running the example |
| 116 | + |
| 117 | +To run this example, check out the full instructions [in the repo](https://github.com/triggerdotdev/examples/tree/main/monorepos/turborepo-prisma-tasks-package). |
0 commit comments