Build your Unity game and put it on itch.io without leaving the editor. Press one button: it builds the platform you are on and uploads it to the matching itch.io channel. The same run works from the command line, and the plugin can write the GitHub Actions workflow that does it on every push.
Documentation · Releases · Report an issue
- Installs Butler and completes itch.io authentication through the official browser flow.
- Loads the games available to the connected itch.io account; select an existing target or create a new page.
- Builds and deploys locally from the Unity Editor.
- Generates a platform-aware GitHub Actions workflow, checks required secret names, runs tests, builds and publishes artifacts.
- Configures Unity Build Automation targets and the Butler post-build hook while surfacing project, billing, source-control and secret blockers.
- Validates scenes, maintains build archives and backups, versions builds, and records deployment history.
- Unity
6000.0or newer. - Git for GitHub Actions setup.
- An itch.io account. Butler is installed by the plugin when needed.
- An eligible Unity Build Automation consumption plan only when that deployment mode is used.
- Download
ItchDeploy.unitypackagefrom GitHub Releases, and verify it against the published.sha256next to it. - In Unity, choose
Assets > Import Package > Custom Package...and select the file. Keep every entry selected and press Import. - Wait for compilation to finish.
- Open
Tools > ItchDeploy > Open ItchDeploy(Ctrl+Shift+D).
The package installs into Assets/ItchDeploy, which is the location the tool supports. Git UPM installation is not advertised yet because editor resources rely on stable asset paths.
Nothing else is required: no third-party packages, no manifest changes, and no scoped registries. Butler is downloaded on demand into your user profile rather than into the project, so it never lands in your repository.
All plugin code lives in the ItchDeploy and ItchDeploy.Editor namespaces, so it cannot collide with types in your own project.
- On Project itch.io, choose Connect in browser. The plugin installs Butler, opens its official login, and stores the credential locally.
- Select an itch.io project from the loaded list, or open itch.io to create one.
- On Build, select platforms and channel mappings.
- Use Overview for a local build and deployment, or configure GitHub Actions / Unity Automation independently.
No itch.io API key, password, or GitHub token is stored in .itchdeploy.json.
Publishing to a store page is always an explicit action:
- Building through Unity's own Build Settings window does not publish. Only the Build & deploy screen uploads anything.
- Everything that can act on its own lives on one screen, Project settings → Triggers: publish after every Unity build, build folder watcher, scheduled builds, automatic git tag, deployment reports, and the local webhook receiver. All of them are off until you switch them on.
- The daily update check is off by default. When enabled, it contacts
github.comto compare release tags and sends nothing about your project. - Secrets (itch.io key, SMTP password, webhook secrets) are held in an encrypted per-user store, never in project assets or
.itchdeploy.json.
The interface is English by default and switches to Ukrainian automatically only on a system already running in Ukrainian. The choice can be changed at any time in Project settings.
| Mode | Best for | Execution |
|---|---|---|
| Unity Editor + Butler | Manual releases and local verification | The current workstation |
| GitHub Actions | Git-driven CI/CD and release artifacts | Platform-specific GitHub runners |
| Unity Build Automation | Unity-managed cloud builds | Unity Build Automation targets |
The modes can be configured and enabled independently; they are not mutually exclusive.
| Target | Build | itch.io deployment |
|---|---|---|
| Windows x64 | Yes | Yes |
| Linux x64 | Yes | Yes |
| macOS | Yes | Yes |
| WebGL | Yes | Yes (html5) |
| Android | Yes | Yes (APK; AAB is rejected for itch.io) |
| iOS | Xcode project | No — unsigned artifact only |
Android builds in the generated workflow are always signed with a custom keystore, because an unsigned release APK cannot be installed from an itch.io page. They therefore require ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASS, ANDROID_KEYALIAS_NAME, and ANDROID_KEYALIAS_PASS as repository secrets whenever Android is part of the matrix. iOS signing is deliberately outside the generated workflow.
The generated workflow checks the secrets needed by the selected platforms:
UNITY_LICENSE,UNITY_EMAIL,UNITY_PASSWORDUNITY_SERIALonly when required by the Unity license typeBUTLER_API_KEYwhen GitHub deployment to itch.io is enabled- The Android signing secrets listed above whenever Android is in the build matrix
The plugin checks whether secret names exist through GitHub CLI; GitHub never exposes their values.
.itchdeploy.json is the non-secret source of truth shared by the Editor and CI. It stores the itch.io target, Unity version, platform channels, WebGL compression, and automation switches. The Import action applies this file to the window; Export writes the current non-secret settings back to it.
Automated:
- Unity EditMode suite (140 tests) covering the pipeline, integrations, configuration, backups, UI state, and every publishing trigger.
- The release layout —
EditorandRuntimewithout the test folder — compiles standalone against Unity6000.0.62f1with no errors or warnings. - The generated GitHub Actions workflow is byte-identical to the committed one.
Checked against the real Butler (push --dry-run, v15.30, on Unity player output):
- A macOS
.appbuilt on Windows is uploaded with its executable marked, so it launches;Info.pliststays non-executable. .itchignorepatterns reach Butler in a form it actually honours, so Unity's_DoNotShipfolders are excluded rather than shipped.
Requires a manual release check:
- A full upload to a live itch.io page. Everything up to the byte transfer is covered above, but the transfer itself, the resulting channel and the download are not exercised by the suite.
CI builds Windows, Linux, macOS, WebGL, Android and an unsigned iOS Xcode artifact.
Unity Build Automation also depends on the organization's current billing/consumption plan. When Unity returns notOptedIn, ItchDeploy treats this as an external blocker, explains the required action, and does not report a false ready state.
Do not commit API keys, Unity credentials, keystores, generated settings assets, deployment history, or the downloaded Butler binary. See SECURITY.md for vulnerability reporting.
MIT © 2026 Andrii Sviatenko.