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

# Migration Guide

> Migrate your existing game servers from PlayFlow 1.0 to PlayFlow Cloud.

# Migrate from PlayFlow 1.0

If you're currently using PlayFlow 1.0, moving to PlayFlow Cloud is a clean re-onboarding: you create a new account, project, and API keys, then re-upload your existing server build. There is no automatic import that reaches back into PlayFlow 1.0 — you bring your build zip forward and launch it against the new engine.

<Info>
  **What changed in 2.0.** PlayFlow Cloud is a ground-up rebuild. Servers are launched through a REST engine at `https://api.computeflow.cloud/api`, builds are selected by their **name** (`version_tag`) rather than an internal build ID, every server start now **requires a region**, and connection details (host + port) are returned in the API response instead of being fixed. The steps below map your old workflow onto the new one.
</Info>

## [Prerequisites](#prerequisites)

Before you start, have the following ready:

* Your PlayFlow 1.0 **server build zip** (a Linux dedicated-server build). If you no longer have the zip, rebuild it from your game project.
* A machine with `curl` (or your language's HTTP client) for the upload and launch steps.
* A few minutes to create a new account — there is no data carried over automatically from PlayFlow 1.0.

## [Create your PlayFlow Cloud account](#create-your-playflow-cloud-account)

To begin migrating to PlayFlow Cloud, you'll need to create a new account:

1. Visit [app.playflowcloud.com](https://app.playflowcloud.com)
2. Sign up with your email or connect with your GitHub/Google account
3. Verify your email address if prompted

<Note>
  Even if you had a PlayFlow 1.0 account, you'll need to create a new account for PlayFlow Cloud. This ensures you get access to all the new features and improved infrastructure.
</Note>

## [Set up your organization](#set-up-your-organization)

Organizations help you manage your game projects and team collaborations:

1. After logging in, you'll be prompted to create an organization
2. Give your organization a descriptive name (e.g., your studio name)
3. *Optional:* Invite team members by entering their email addresses
   * Team members will receive an invitation email
   * They can access all projects within your organization

## [Create your project](#create-your-project)

Set up a project for your migrated game:

1. From your organization dashboard, click **Create Project**
2. Enter the same name as your PlayFlow 1.0 project (or choose a new one)
3. *Optional:* Add a description to help identify the project
4. Click **Create Project** to proceed

## [Get your API key](#get-your-api-key)

Server and build operations run through the engine API, so grab a key first:

1. Open the **API Keys** tab in your new project
2. Copy the **server key** (prefix `pf_`) — it has full access and must stay server-side
3. Note the **client key** (prefix `pfclient_`) for anything you ship inside a game build

Authenticate every request with the `api-key` header.

<Warning>
  Uploading and deleting builds and updating project settings require the **server key** (`pf_`). A client key (`pfclient_`) is rejected with `403` on those operations. Never embed a server key in a shipped game client.
</Warning>

## [Re-upload your build](#re-upload-your-build)

There is no legacy importer — you upload your existing build zip to the new project. This is a two-step flow: request a one-time upload URL, then `PUT` your zip to it. Pick a build **name** (`?name=`); PlayFlow auto-increments the version each time you upload under the same name.

<CodeGroup>
  ```bash Request an upload URL theme={null}
  curl -X POST "https://api.computeflow.cloud/api/v3/builds/upload-url?name=my-server" \
    -H "api-key: pf_your_server_key"
  ```

  ```json Response theme={null}
  {
    "build_id": "b3f1c2a4-...",
    "name": "my-server",
    "upload_url": "https://...r2.cloudflarestorage.com/...",
    "message": "Upload URL generated"
  }
  ```

  ```bash Upload the zip theme={null}
  curl -X PUT "<upload_url from the response>" \
    --data-binary @my-server.zip
  ```
</CodeGroup>

<Info>
  The `upload_url` expires **60 minutes** after it is issued. Upload your zip before then; if it expires, request a new one. PlayFlow processes the build after upload and moves it from `processing` to `ready`.
</Info>

## [Verify your build](#verify-your-build)

After the upload:

1. Open the **Builds** tab and confirm your build reached **ready** status
2. Check that the build name matches what you'll pass as `version_tag` when launching servers
3. Note the version number — you can pin a specific version at launch, or omit it to use the latest under that name

## [Configure network settings](#configure-network-settings)

Port configuration lives under the **Settings** tab, not a separate Configuration tab:

1. Go to the **Settings** tab in your project
2. In the port configuration section, add each port your server listens on:
   * Set the protocol with the **TCP/UDP** toggle
   * Enable the separate **TLS** checkbox if that port needs TLS termination
3. Save your settings

<Warning>
  Ports are **allocated by PlayFlow** at launch and do not match your internal port — don't assume `7777` or any fixed value. When you connect a client, read the public host and port from the server's API response: iterate `network_ports[]` and use its `host` and `external_port`. TCP ports resolve to a relay host; UDP ports resolve to a proxy IPv4.
</Warning>

## [Deploy and test](#deploy-and-test)

Now you're ready to launch your migrated server. From the dashboard, open the **Servers** tab and start a server: give it a name, choose a **region**, select your build, and pick a compute size. Or launch it directly through the API:

```bash Launch a server theme={null}
curl -X POST "https://api.computeflow.cloud/api/v3/servers/start" \
  -H "api-key: pf_your_server_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-server-1",
    "region": "us-east",
    "version_tag": "my-server",
    "compute_size": "small",
    "ttl": 3600
  }'
```

`name` and `region` are **required**. Select your build with `version_tag` (the build **name** you uploaded) plus an optional `version`. There is no `build_id` field on server start. Region must be one of the 13 canonical regions (for example `us-east`, `eu-west`, `ap-south`, `sea`). Read the connection host and port back from `network_ports[]` in the response, then test with your game client.

<Info>
  **Free plan limits.** New organizations start on the Free plan: at most **1 active server**, compute size forced to **small**, and TTL forced to **1 hour** (`3600` seconds). Upgrade to **Pro** (\$20/mo) for all compute sizes, TTL up to 24 hours (`86400` seconds), and unlimited active servers.
</Info>

## [What's improved in PlayFlow Cloud](#whats-improved-in-playflow-cloud)

PlayFlow Cloud offers several advantages over PlayFlow 1.0:

<CardGroup cols={2}>
  <Card title="Modern Infrastructure" icon="zap">
    Rebuilt server infrastructure with global multi-region deployment
  </Card>

  <Card title="Enhanced Monitoring" icon="activity">
    Real-time server metrics and detailed logging capabilities
  </Card>
</CardGroup>

<CardGroup cols={2}>
  <Card title="Simplified Management" icon="settings">
    Streamlined dashboard and easier project organization
  </Card>

  <Card title="Built-in Player Auth" icon="star">
    Verified player identity via JWT, PlayFab, or Steam providers
  </Card>
</CardGroup>

## [Need help?](#need-help)

If you encounter any issues during migration:

* Check our [Discord community](https://discord.gg/P5w45Vx5Q8) for support
* Review the [Quick Start guide](/quickstart) for additional setup help
* Contact our support team through the dashboard

## [Next steps](#next-steps)

Once your migration is complete, explore PlayFlow Cloud's new features:

<CardGroup cols={2}>
  <Card title="WebGL Deployments" icon="globe" href="/guides/webgl-deployments">
    Optimize your servers for browser-based games
  </Card>

  <Card title="Unity Modules" icon="unity" href="/guides/unity-modules">
    Simplify deployment directly from Unity Editor
  </Card>
</CardGroup>

<CardGroup cols={2}>
  <Card title="Server Types" href="/fundamentals/plan-instance-types">
    <Icon icon="server" size={24} />
  </Card>

  <Card title="API Integration" href="/fundamentals/api">
    <Icon icon="code" size={24} />
  </Card>
</CardGroup>
