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

# Submission Guide

> How to export .pck, pass static analysis, upload to playcrafty.games, and understand review/update flow.

## Submission Checklist

Before uploading:

* Creator gameplay scripts authored in `GDScript`
* Valid `manifest.json`
* One exportable `.pck` package + `manifest.json`
* `.pck` package size at or under **2 GB**
* No banned API usage in GDScript

If your package exceeds 2 GB, contact [founders@summerengine.com](mailto:founders@summerengine.com) for large-upload onboarding.

## 1) Export `.pck` from Godot / Summer Engine

Use standard export flow:

1. Open your game project.
2. Go to **Project -> Export**.
3. Choose/create export preset for your build target.
4. Export and generate a `.pck`.
5. Confirm your game includes `manifest.json`.

## 2) Static Analysis Scanner Rules (Blocking)

During submission, the platform scans:

* GDScript files (`.gd`)
* embedded scripts in `.tscn` and `.tres`
* reserved infrastructure paths
* blocked native/binary resource extensions

If scanner violations are found, submission fails with:

* `error: "Static analysis failed"`
* `violations`: file, line, and blocked pattern

See the complete up-to-date list here:

* [Banned APIs Reference](/api-reference/crafty-sdk/banned-apis-reference)

### Important For AI Code Generation

Do not generate "fallback" code paths that use blocked APIs, even if wrapped in conditions.

Example of **still invalid** output:

```gdscript theme={null}
if OS.has_feature("editor"):
    var f = FileAccess.open("user://debug.txt", FileAccess.WRITE)
```

The scanner is pattern-based and blocks usage regardless of runtime branch.

## 3) Upload on playcrafty.games

V1 submission requires two files:

* `.pck` as multipart field `pck`
* `manifest.json` as multipart field `manifest` (file or JSON text)

Authenticated request:

* `POST https://crafty-production-5a7c.up.railway.app/games/submit`
* `Authorization: Bearer <supabase_access_token>`

### Example Request (cURL)

```bash theme={null}
curl -X POST "https://crafty-production-5a7c.up.railway.app/games/submit" \
  -H "Authorization: Bearer <SUPABASE_ACCESS_TOKEN>" \
  -F "pck=@./build/my-game.pck" \
  -F "manifest=@./manifest.json;type=application/json"
```

## 4) What Happens During Review

On success, API returns:

* `ok: true`
* `gameId`
* `submissionId`
* `status: "review"`
* `scan` metadata

Game status lifecycle:

* `review` -> waiting for manual/admin review
* `published` -> approved and live
* `rejected` -> rejected with reason

## 5) Updating an Existing Game

To update:

1. Keep `manifest.id` the same.
2. Increase `manifest.version`.
3. Upload new `.pck` + `manifest`.

The platform:

* updates the game metadata for same creator + slug
* stores a new version row
* sets status back to `review` for that update

## Related Docs

* [Testing Your Game Locally](/api-reference/crafty-sdk/testing-your-game-locally)
* [Exporting and Uploading Your Game](/api-reference/crafty-sdk/exporting-and-uploading-your-game)
* [Banned APIs Reference](/api-reference/crafty-sdk/banned-apis-reference)

## Common Upload Errors

* `Missing .pck file (multipart field: pck)`
* `Uploaded file must be a .pck`
* `Invalid manifest. Required: id, name, version, crafty_sdk, entry_scene, min_players, max_players`
* `Static analysis failed` (with violations list)
