> ## Documentation Index
> Fetch the complete documentation index at: https://docs.buildpixel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Perforce

> Helix Core, classic depots and streams, ticket-based auth.

Perforce remains the dominant SCM in AAA UE development for a reason: it handles binary assets gracefully, supports streams for long-lived branching, and integrates with the Unreal Editor's source control panel. BuildPixel speaks p4 natively.

## What you'll need

From your Helix admin:

* **Server URL** — e.g. `ssl:perforce.studio.com:1666` (TLS) or `tcp:...` (plaintext, discouraged)
* **A dedicated build user** — e.g. `bp-buildbot`. Use a service user, not someone's real account.
* **Credentials** — either a long-lived ticket (preferred) or a password
* **Read access** to the depot or stream you want to build. The build user doesn't need write access.

<Tip>
  Set the build user's `Type` to `service` in Helix (`p4 user -t service bp-buildbot`). Service users don't count against your licensed seats and can't open files for edit.
</Tip>

## Configure the org

In **Settings → Integrations → Perforce**, fill in:

```
Server URL:     ssl:perforce.studio.com:1666
Username:       bp-buildbot
Authentication: Ticket
Ticket:         <paste long ticket string>
```

Click **Test connection** to verify before saving. Common failures:

* **Connect to server failed** — wrong host/port, or BuildPixel can't reach the server. We strongly recommend TLS.
* **Login expired** — generate a fresh ticket with `p4 login -p`.
* **Password invalid** — for password mode, double-check it.

Credentials are stored encrypted at rest.

## Create a Perforce project

After org config, the project creation flow lets you pick:

* **Depot path** — e.g. `//depot/MyGame/...`
* **Or stream** — e.g. `//streams/mygame-mainline/main`

For streams, BuildPixel uses the stream as the workspace identity. For classic depots, the depot path itself is the identity.

## Triggering builds

Perforce has no native webhook. Three trigger modes are supported:

<CardGroup cols={3}>
  <Card title="Manual">
    Click **Build now** in the dashboard.
  </Card>

  <Card title="Scheduled">
    Schedule the build (e.g. nightly). Pulls latest CL, builds.
  </Card>

  <Card title="External webhook">
    Wire a Helix submit-trigger to call BuildPixel's API on every submit.
  </Card>
</CardGroup>

For the external webhook approach, call the trigger endpoint from a Helix `change-commit` trigger script. See [Triggers](/builds/triggers#perforce-triggers) for the script.

## Network requirements

Your Helix server needs to be reachable from BuildPixel. Most teams run with public-internet TLS. If your server is on a private network, talk to [enterprise@streampixel.io](mailto:enterprise@streampixel.io).

## Troubleshooting

<AccordionGroup>
  <Accordion title="Sync is slow on every build">
    Likely a too-broad client view. Tighten it to just paths your build needs (Source, Content, Plugins, Config, \*.uproject) — exclude Marketing, Docs, etc. Set `clientView` on the project to override the default.
  </Accordion>

  <Accordion title="Ticket expired">
    Tickets default to 12 hours. For long-lived auth, generate an unlimited ticket: `p4 login -a -p` (subject to your Helix admin's policy).
  </Accordion>

  <Accordion title="Commit message says 'unknown'">
    For Perforce, BuildPixel runs `p4 describe -s <CL>`. If the build user can't read the CL, the description is unknown. Grant `read` on `change` actions via `p4 protect`.
  </Accordion>
</AccordionGroup>
