---
title: Introduction
---

<Snippet file="integration-getting-started.mdx" />

## Installation

<CodeGroup>

```bash npm
npm install @trigger.dev/github@latest
```

```bash pnpm
pnpm install @trigger.dev/github@latest
```

```bash yarn
yarn add @trigger.dev/github@latest
```

</CodeGroup>

## Authentication

GitHub supports Personal Access Tokens and OAuth.

```ts
import { Github } from "@trigger.dev/github";

//create GitHub client using a token
const github = new Github({
  id: "github",
  token: process.env.GITHUB_TOKEN!,
});

//create GitHub client using OAuth
const github2 = new Github({
  id: "github2",
});
```

## Triggers and Tasks

<CardGroup cols={2}>
  <Card title="Triggers" icon="stars" href="/integrations/apis/github-triggers">
    Trigger Jobs when events happen in GitHub, such as a new commit or a new issue.
  </Card>
  <Card title="Tasks" icon="sparkles" href="/integrations/apis/github-tasks">
    Perform tasks such as creating a new issue or a new comment.
  </Card>
</CardGroup>

## Using the underlying client

You can use the underlying client to do anything Octokit supports. In this example we create a project card when a new issue is opened..

<Info>
  View [the official GitHub docs](https://docs.github.com/en/rest) for everything that is
  supported{" "}
</Info>

```ts
import { Github, events } from "@trigger.dev/github";

const github = new Github({
  id: "github",
  token: process.env.GITHUB_TOKEN!,
});

client.defineJob({
  id: "alert-on-new-github-issues",
  name: "Alert on new GitHub issues",
  version: "0.1.1",
  trigger: github.triggers.repo({
    event: events.onIssueOpened,
    owner: "triggerdotdev",
    repo: "trigger.dev",
  }),
  integrations: {
    github,
  },
  run: async (payload, io, ctx) => {
    //io.github.runTask allows you to use the underlying SDK client
    const { data } = await io.github.runTask(
      "create-card",
      async (client) => {
        return client.rest.projects.createCard({
          column_id: 123,
          note: "test",
        });
      },
      { name: "Create card" }
    );

    //log the url of the created card
    await io.logger.info(data.url);
  },
});
```
