An unofficial community project that builds native Apple versions of Celeste from game files you already own. The mature Apple TV product and the modern iPhone/iPad product share one locked Celeste/FNA pipeline, Metal graphics, real FMOD audio, durable saves, and full-AOT compilation.
The Apple TV port is mature and playable. It has been extensively tested on an Apple TV 4K (3rd generation, 128 GB) and supports tvOS 16.0 or later. Other arm64 Apple TV models may work, but have not received the same physical acceptance.
The iPhone/iPad port is also playable and has release-candidate acceptance on an iPhone 15 Pro Max and an iPad mini 4 running iPadOS 15.8.8. It supports touch-only play, controllers, customizable touch layouts, ordinary Application Support saves, and native Files import/export.
This repository does not contain Celeste or the proprietary FMOD SDK. You supply both from your own accounts; the builders validate them locally.
| I want to build for… | Start here | Main command |
|---|---|---|
| Apple TV | Apple TV local/cloud guide | ./build-tvos.sh |
| iPhone or iPad | iPhone/iPad self-build and install guide | ./build-ios.sh |
Both products accept the same nine exact Celeste 1.4.0.0 FNA profiles. The iPhone/iPad full game currently requires an Apple-silicon Mac and a physical device; the Apple TV product additionally has the private unsigned cloud compilation route.
You need:
- An unmodified supported Celeste 1.4.0.0 FNA download from itch.io, Steam, or Epic Games Store.
- FMOD Engine iOS/tvOS 1.10.09 build 97915 from FMOD.
- A way to compile:
- an Apple silicon Mac for the local builder, or
- your own private GitHub repository for cloud compilation.
- A way to sign and install the app on your Apple TV. A cloud-built IPA is unsigned and cannot be installed until it is signed.
The guides below explain each part. You do not need to understand FNA, AOT, or the native dependency pipeline to follow them.
flowchart TD
A["I want Celeste on Apple TV"] --> B{"Apple silicon Mac available?"}
B -->|Yes| C["Build locally with build-tvos.sh"]
B -->|No| D["Compile in your own private GitHub repository"]
C --> E["Sign and install on Apple TV"]
D --> F["Download the unsigned IPA"]
F --> E
Use the private GitHub cloud builder. GitHub supplies the macOS build machine, so Windows and Linux users can compile a signing-ready unsigned IPA without owning a Mac.
You create your own repository from the public template and make it private, then upload one Celeste ZIP and the original FMOD DMG. The workflow refuses to read inputs in a public repository, keeps the output private, and includes a cleanup workflow for the input and output Releases. It never asks for Steam, Epic, FMOD-account, or Apple-signing credentials.
Cloud compilation does not sign or install the app. You still need a tvOS-capable signing and installation method afterward.
On a supported Apple silicon Mac, ./build-tvos.sh validates
the inputs, builds the native and managed code, and can either:
- sign and install directly using an Apple Account and a paired Apple TV;
- create an unsigned IPA; or
- do both.
The accepted setup uses full Xcode, .NET SDK 10.0.302 with tvOS workload set 10.0.302.0, GNU Make, and Mono. The host doctor reports missing tools without requiring Celeste or FMOD:
./build-tvos.sh --check-hostCMake, Ninja, and ripgrep are not required. See the prerequisite checklist and copyable clone commands in the local build guide.
The builder supports nine exact Celeste 1.4.0.0 FNA input profiles from itch.io, Steam, and Epic Games Store across the tested Linux, macOS, and Windows packages. It detects the actual contents automatically rather than trusting a folder name.
The simplest choice depends on the store you own it on:
- itch.io: download one of the listed unmodified 1.4.0.0 FNA packages.
- Steam: the recommended route uses Steam's built-in console to download the tested Linux depot; it is only input for the builder and is not run on your Mac.
- Epic Games Store: obtain one tested Mac or Windows package from your own account; an optional Legendary-based route is documented.
Everest/modded, XNA, mixed, unknown, and other-version installations are not currently supported. The validator rejects them instead of risking a broken build.
Contributor note: an experimental shared Apple static-Everest foundation exists for tightly bounded, pre-analysed full-AOT canaries. It is not general mod support; ordinary users should continue to use the vanilla iPhone/iPad and Apple TV builders above.
→ Choose and obtain supported Celeste files
Download exactly FMOD Engine iOS/tvOS 1.10.09 build 97915 from the official version-specific FMOD Engine page.
- Choose FMOD Engine, not FMOD Studio.
- Choose the iOS package; it contains the tvOS libraries this project uses.
- Use version 1.10.09 (also written 1.10.09, build 97915), not FMOD 2.x or another release.
- FMOD may ask you to sign in before it shows the older download.
Download it through your own FMOD account and keep the DMG outside the repository. The project validates it but does not redistribute it.
- Apple silicon Mac: follow Build locally, then run
./build-tvos.sh. - Windows, Linux, or no suitable Mac: follow Build in the cloud to create the unsigned IPA privately.
The local builder has eight numbered phases, privacy-safe progress heartbeats,
and full logs under ignored dist/logs/. If it stops, start with
dist/logs/last-error.txt.
With an Apple Account configured in Xcode, a paired developer-ready Apple TV, and a stable bundle identifier, the local builder can provision, sign, install, launch, and verify Celeste. A free Personal Team is sufficient, although its development provisioning normally expires after about seven days and then needs re-signing.
Local IPA mode and the cloud builder both produce
Celeste-tvOS-unsigned.ipa. Its conventional Payload/Celeste.app layout is
ready for a tvOS-capable signer, but it has no usable signature or provisioning
profile and cannot be installed directly. Signing tools and services are
outside this project's control; keep the same final bundle identifier if you
want replacement installs to retain the same save domain.
See Building for the accepted local install flow and Troubleshooting for unsigned-package help.
- Native arm64 tvOS gameplay with Metal rendering
- Real FMOD music, ambience, UI sounds, effects, and cutscene audio
- Extended-controller movement, Jump, Dash, Grab, menus, cutscene skip, and rumble; DualSense was physically tested
- Durable Settings and all three normal save slots
- Transparent compressed storage with recovery generations; Existing v1 installs require no manual migration
- Options → Controller Prompts for Automatic, Xbox, PlayStation, Nintendo Switch, and Stadia on-screen button artwork; this changes artwork only, not mappings
- Options → Performance HUD for Apple's native Metal diagnostics
- A safe Leave Celeste flow instead of the old desktop-style blank screen
- Locally generated layered app icon and Top Shelf artwork
- Explicitly activated same-network Save Manager
- One-time QR pairing, plus the manual address and six-digit-code fallback
- Download/backup, validated replacement, slot deletion, and Settings reset
- Confirm-driven verified soft reload without restarting the FNA runtime
- Local Mac build, signing, and direct install
- Private GitHub compilation for an unsigned IPA
- Exact multi-store input recognition and reproducible downstream generation
The technical acceptance matrix is in Project status.
Open Options → Save Manager, make sure your phone or computer is on the same local network, and scan the QR code on the TV. The browser opens the authenticated manager without typing the six-digit code. A numeric address and code remain available as a fallback.
The server is dormant during normal gameplay and starts only while its menu is open. It can back up or replace the four normal Celeste files (Settings and slots 0–2). After a successful change, press Confirm on the Apple TV; Celeste verifies the imported state and returns to a functional main menu. If that verification fails, fully close the app from the Apple TV app switcher and reopen it.
The displayed local address normally stays the same when Save Manager is closed and reopened. An already open browser page notices when the manager is closed or reopened and disables its controls until you reconnect. Every new activation still uses fresh authentication, so reconnect with the new QR code or access code rather than relying on an old page.
Save Manager is a temporary local-network tool, not cloud sync. Saves are shared between Apple TV users in the same app installation, do not survive an uninstall, and are not backed up to iCloud.
Only the nine listed unmodified Celeste 1.4.0.0 FNA profiles are supported. They normalize to one locked downstream game, but that does not mean every release from those storefronts is accepted. Review the exact profile matrix if validation rejects your files.
Everest/mod support and XNA inputs are not currently supported. The public self-build workflow supports tvOS and modern iOS/iPadOS. The legacy iOS source remains for provenance; use the modern iPhone/iPad guide for the current full-AOT product.
- Personal-use self-build only; no App Store distribution is provided.
- The cloud result is unsigned and requires separate signing and installation.
- Free Personal Team installs generally need re-signing after about seven days.
- Apple User Management is unavailable with Personal Team provisioning, so saves are shared between Apple TV users.
- There is no iCloud/cloud-save sync or uninstall-survival guarantee.
- DualSense is the physically accepted controller; the Siri Remote is not an intended gameplay controller.
More precise tested-versus-compatible boundaries are in Project status.
Start with the beginner issue index
for game-file, FMOD, cloud, signing, save, and Save Manager problems. Build
failures name a complete log and write a privacy-safe summary to
dist/logs/last-error.txt.
Never post Celeste files, FMOD files, signed apps/IPAs, Apple credentials, provisioning profiles, certificates, Team IDs, or device identifiers in an issue.
The beginner path is intentionally short; the engineering detail is still available:
- Documentation hub
- Project status and architecture
- Advanced local build and reproducibility
- Native dependency pipeline
- Contributing
- Development and acceptance history
The original Xamarin.iOS project is retained for provenance and legacy work.
The beginner/public builders now cover Apple TV and iPhone/iPad independently.
Developers can also inspect the modern iOS architecture, which plays the
same canonical Celeste game on physical iPhone and iPad using either a
controller or adaptive touch controls, with customization including separate
Phone/Tablet layouts, edge-flush full-display placement, per-control opacity,
split-action and floating-movement regions, optional duplicated/niche controls
including Quick Restart, a dedicated
Journal/Special control, and source-aware Grab modes. Saves use durable
ordinary files and audio uses the real seven FMOD banks. Options > Data &
Files can export, share, validate, import, and restore ordinary .celeste
copies through native iOS Files UI, while custom .celestetouch layouts can
be shared from Touch Controls and previewed before import. Live saves stay
private in Application Support; this is explicit user-directed transfer, not
automatic cloud sync. The vanilla iOS/iPadOS product is a personal self-build
release candidate, not an App Store release.
Historical stage reports record how the port was proven. They are useful for debugging and reproducibility, but are not required reading to build the app.
This work builds on RoootTheFox/celeste-ios and its contributors, including the original FNA/iOS port and native build foundation. Celeste is by Extremely OK Games / Maddy Makes Games. Runtime and native work uses FNA, SDL, FNA3D, FAudio, Theorafile, MoltenVK, FMOD, and the FMOD-SDL bridge.
This is an unofficial community project and is not endorsed by Extremely OK
Games, Maddy Makes Games, FMOD, or Apple. Celeste game files, generated Celeste
source, and FMOD SDK material are not distributed here. The repository
LICENSE applies only to the covered repository source; third-party
software and content retain their own terms.