> For the complete documentation index, see [llms.txt](https://docs.duku.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.duku.ai/integrations/choosing-your-integration.md).

# Choosing your integration

Duku can be triggered four ways: **Schedules**, the `preview` action, the `environment` action, and the Platform API. The right fit depends on how you deploy, and whether you automate it. Use the steps below to pick a route, then open the setup guide.

### Find your route

Answer these in order and stop as soon as one applies.

{% stepper %}
{% step %}

### 1. Do you automate deployments in your CI/CD pipeline?

* **No:** Use [Schedules](/viewport-dashboard/schedules.md). Set a recurring cadence in Viewport. No pipeline needed.
* **Yes:** Go to question 2.
  {% endstep %}

{% step %}

### 2. Do you use GitHub Actions for CI/CD?

* **No:** Use [Triggering explorations from any CI](/integrations/triggering-explorations-from-any-ci.md). This walkthrough fits CircleCI, GitLab, Jenkins, and similar tools. Use the [GraphQL API](/integrations/graphql-api.md) and [API Keys](/integrations/api-keys.md) as references.
* **Yes:** Go to question 3.
  {% endstep %}

{% step %}

### 3. Does every pull request get its own preview environment with a unique URL?

* **Yes:** Use the [Quickstart: preview action](/integrations/github-actions/quickstart-preview-action.md). This creates a per-PR target and updates one sticky PR comment automatically.
* **No:** Use the [Quickstart: environment action](/integrations/github-actions/quickstart-environment-action.md). This runs against a stable, pre-created environment.
  {% endstep %}
  {% endstepper %}

If you use GitHub Actions, use [Choosing preview vs environment](/integrations/github-actions/choosing-preview-vs-environment.md) for the final split between `preview` and `environment`.

### Compare the routes

| Route              | Best for                                                                               | Typical trigger                                                                   | What Duku explores                     | How results surface                                                                                                                                                                                  | Set it up                                                                                                                                                                           |
| ------------------ | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Schedules          | Recurring coverage with no pipeline wiring, or no automated deploys                    | A cadence you set in Viewport                                                     | Any target you point it at             | In Viewport                                                                                                                                                                                          | [Schedules](/viewport-dashboard/schedules.md)                                                                                                                                       |
| Preview action     | GitHub Actions where every PR gets its own preview URL                                 | `pull_request`                                                                    | The PR's preview deployment            | Sticky PR comment that updates in place with results                                                                                                                                                 | [Quickstart: preview action](/integrations/github-actions/quickstart-preview-action.md)                                                                                             |
| Environment action | GitHub Actions against a stable, pre-created environment like staging, canary, or prod | `push`, `schedule`, `workflow_dispatch`, or `pull_request` for a protected branch | A fixed target you created in Viewport | In Viewport. Duku also posts a PR comment when you run on `pull_request`, or when you pass repository and PR metadata, and the Duku GitHub App is installed. There is no merge-gating Check Run yet. | [Quickstart: environment action](/integrations/github-actions/quickstart-environment-action.md)                                                                                     |
| Platform API       | Any other CI, such as CircleCI, GitLab CI, or Jenkins, or a custom pipeline            | Whenever your pipeline calls it                                                   | Any URL you pass in                    | In Viewport. You can also post a PR comment when you pass PR metadata. See the tip below.                                                                                                            | [Triggering explorations from any CI](/integrations/triggering-explorations-from-any-ci.md), [GraphQL API](/integrations/graphql-api.md), and [API Keys](/integrations/api-keys.md) |

{% hint style="info" %}
**Get PR comments without GitHub Actions**

If you use the Platform API and still want GitHub PR comments, pass `githubRepository`, `githubPrNumber`, and `serverManagedComment: true` to `startExploration`.

Duku's GitHub App posts the in-progress comment and updates it in place when the run finishes. You do not need a GitHub Action.

This only requires the Duku GitHub App to be installed on the repository. The App is a one-time install. It posts comments through the GitHub API, and uses no CI minutes.
{% endhint %}

### Under the hood

All three managed routes, **Schedules**, `preview`, and `environment`, call the same Platform API underneath. If an action does not expose a parameter you need, you can drop down to direct API calls.
