Open-source project
ammaarreshi/RedAlert2-Mac-iOS-iPad avatar
ammaarreshi/RedAlert2-Mac-iOS-iPad

RedAlert2-Mac-iOS-iPad: RA2 and Yuri's Revenge on iPhone and iPad

Red Alert 2 + Yuri's Revenge running natively on iPhone and iPad. EA never released RA2's source, so this builds on Chrono Divide's from-scratch TypeScript engine — proprietary, used with the author's permission, non-commercial only — wrapped in a Swift/WKWebView shell. Bring your own retail copy; no game assets included.

414 stars56 forksTypeScriptGPL-3.0

At a glance

What is it?
A GPL-3.0 Swift wrapper around the proprietary Chrono Divide TypeScript engine, with touch controls and the full Yuri's Revenge third faction. You supply the retail game files, and the engine source is not open.
Who is it for?
Adopt this if you already own Red Alert 2 plus Yuri's Revenge and want skirmish on an iPhone or iPad, and you accept that the engine underneath is proprietary and non-commercial. Do not adopt it if you need single-player campaigns, want to redistribute a build, or object to the Chrono Divide licence terms.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 40 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 16, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What this port solves, and for whom

There is no released engine source for Red Alert 2. EA opened Tiberian Dawn and Red Alert 1 alongside the Remastered Collection in 2020, and in February 2025 released the recovered originals plus Renegade and Generals under GPL v3 with EA's additional terms. No RA2 engine appeared in either release. The README notes that EA has published the RA2 and Tiberian Sun mission editor under GPL-3.0, which is not the engine. The README also says the engine source is widely believed lost, and attributes that belief to community accounts rather than any statement from EA.

Emulating the x86 retail binary, the way CnCNet under Wine works, is a non-starter on iOS. So this project takes the other route: it wraps Chrono Divide, a from-scratch TypeScript reimplementation rebuilt over years into a deterministic simulation plus a Three.js renderer and continued by the RA2WEB community. The target user is narrow and specific. You own Red Alert 2 plus Yuri's Revenge, you want skirmish against AI on an iPhone or iPad, and you are comfortable with a build that carries a proprietary engine under a non-commercial permission rather than an open one.

The repository is licensed GPL-3.0, but that licence covers the Swift shell and the repository's own work, not the engine. The README states the engine is used with the author's permission and is non-commercial only. THIRD-PARTY-NOTICES.md sits in the repository root for the detail. If your plan involves shipping a build to anyone, that distinction decides the plan.

How the Swift shell and the TypeScript engine fit together

The architecture is a native shell around a web engine. Rendering flows WebGL to ANGLE to Metal through WebKit, which Apple ships with JIT included. A custom URL-scheme handler serves the built app and roughly 750MB of game assets from the app bundle for the Yuri's Revenge build; the RA2-classic assets are about 400MB. On first launch those assets are seeded into browser origin storage, verified per file, and re-seeded if iOS purges storage under disk pressure. The README describes this as self-healing.

The critical design decision is what was left alone. The README states the core simulation loop and determinism model are untouched, with changes kept additive. That matters because mid-match save and load are built on the engine's replay system: a save is the action log up to the saved tick, and loading resimulates that log deterministically at maximum speed before handing control back. Any nondeterminism breaks saves, not just replays. The README reports that this work forced a determinism audit, because an RNG seed was silently losing millisecond precision in a round-trip through the save format.

Touch input is a custom gesture engine feeding the engine's pointer layer, not browser events. One-finger tap and drag-box selection, two-finger 1:1 map grab, pinch zoom, and long-press force-attack. Pinch zoom required unlocking camera zoom inside the engine and making pan limits zoom-aware. Rendering runs at logical UI scale times devicePixelRatio into the WebGL backing store, so the README's example is an iPad mini drawing the battlefield at 2560x1440 instead of an upscaled 1280x720. That change surfaced input-mapping and shroud-seam bugs that only appear at fractional scales.

Installing it and starting a skirmish

No game assets are included or distributed. You need your own copy of Red Alert 2 plus Yuri's Revenge, which the README points to on Steam as part of the C&C Ultimate Collection. The README gives one script that imports everything from your install. Run it from the repository root, replacing the path with the directory that holds your retail files:

sh
./scripts/setup.sh /path/to/your/ra2/install

The script is the only setup step the README documents. It copies the retail assets into the layout the app expects. After it finishes, the assets are bundled with the app rather than fetched, since the README states the assets never touch the network.

The repository layout shows an ios/ directory next to redalert2/, scripts/, and docs/, so the Xcode project for the shell lives under ios/. The README does not document a build command, a minimum iOS version, or a signing step, so check ios/ and docs/ for the current instructions before assuming a one-command build. What the README does describe is the first launch: the shell seeds roughly 750MB of assets into origin storage, verifies each file, and self-heals if iOS purges that storage. Expect the first start to spend time on that seeding, and expect the app to recover on its own rather than asking you to re-import.

Once the app is running, the touch model is the part worth learning first: tap to select, drag a box for groups, two fingers to grab the map, pinch to zoom, and long-press to force-attack. Skirmish is the supported mode. The README describes AI built on top of Supalosa's Chrono Divide bot, with per-match personalities and strategic doctrines, the retail game's own 132 attack teams, superweapons fired as the original AI fired them, spies, garrisons, terror drones, and a roster that shifts every game.

The Yuri's Revenge gaps you will actually notice

Yuri's Revenge is playable, and the README is unusually direct about where it diverges from retail. Mastermind mind-control capacity works, but retail's overload self-damage is not modelled. That changes how you use the unit: a Mastermind pushed past its control limit does not punish you the way the original does. Battle Fortress open-topped fire is proxied as the strongest passenger's weapon at a scaled rate, not five passengers firing independently, so a mixed loadout does not produce the retail damage pattern. These are stated in the README rather than hidden, which is the right way to ship them, but they are balance-visible in a real match.

Getting the third faction playable took three phases: engine-mode plumbing and md-asset import, the slave-miner economy with slaves, grinder, and bio reactor occupancy power, and then the exotics. The exotics list includes Magnetron vehicle lifting, Tank Bunkers, Cloning Vats, Psychic Dominator and Genetic Mutator superweapons, Robot Tanks with a live control-center dependency, Boris airstrikes, and berserk gas. The README also documents YR-specific crash archaeology: the retail rulesmd.ini omits about 25 [AudioVisual] keys that the YR binary hardcodes, and the first move order in any YR game was a fatal crash until the engine learned the retail defaults. That is the shape of the whole project. The engine had YR scaffolding but booted RA2-only, and each missing retail default is a potential crash rather than a cosmetic difference.

The asset and lighting audit is described as 26 agents comparing every asset and lighting path against retail seeded archives byte-identical to Steam. VXL parsing is byte-equal to the CNCMaps reference implementation, and the README is careful to say this was not compared against the retail binary. All four voxel normal tables are exact. The audit found and fixed real divergences: map [Lighting] ground term applied with the wrong sign, palette lighting multiplied in the wrong color domain, voxel shading rebuilt to the retail palette x (0.8 + 1.3 x dotNL) x cell light model, invisible lamp buildings that should cast light without rendering, and per-country loading-screen palettes that had been using the RA2 palette instead of YR's repainted ones. The lamp-building fix is the source of YR's white-washed city blocks, which is a good example of a rendering bug that is really a lighting-model bug.

What this is not, and what to use instead

This is not a campaign port. The README describes skirmish, and the AI work, the touch model, and the save system are all aimed at skirmish matches. If you want the RA2 and Yuri's Revenge campaigns, this is the wrong tool, and the README does not claim otherwise. It is also not a way to play without owning the game. There are no assets in the repository, and the setup script reads from your own retail install.

The natural alternative on desktop is CnCNet under Wine, which emulates the x86 retail binary. That is a fundamentally different approach: you run the original executable, so retail behaviour is the baseline by construction rather than something to be audited back into agreement. The cost is that the whole stack depends on x86 emulation, which the README calls a non-starter on iOS. The sibling project Generals-Mac-iOS-iPad takes a third route: it ports EA's released C++ engine for Generals with an ARM64 compile and DXVK to MoltenVK underneath. That route exists for Generals because the engine source exists, and the README's comparison table makes the point that RA2 has no equivalent to compile.

So the choice is not which port is better in the abstract. It is whether you are willing to trade retail-binary fidelity for a native iOS build. CnCNet under Wine gives you the original executable on a desktop. This project gives you a touch-first skirmish experience on an iPhone or iPad, with the fidelity gaps documented rather than discovered.

Licence, provenance, and what to verify before you build

The GPL-3.0 licence on this repository does not extend to the engine. The README states the engine is proprietary, used with the author's permission, and non-commercial only. That is a permission grant, not an open licence, and it does not travel with the code the way GPL-3.0 does. If you fork this and distribute a build, you are relying on a permission that was granted to this project, not to you. Read THIRD-PARTY-NOTICES.md before you do anything with a build, and treat the non-commercial restriction as the operative term for the engine regardless of what the repository's LICENSE file says.

The README also points to AI-USE.md in the repository root, which is worth reading before you put an agent on the codebase. The project's own development used a 26-agent audit, so the file likely sets expectations for that kind of work, but the README does not summarise its contents.

The maintenance picture is concrete rather than reassuring: the last push was on 2026-08-08. There are no releases retrieved, so there is no tagged version to pin to and no changelog to read between commits. Upgrading means pulling from main. That is a real cost for anyone who wants a stable build, and it is the main thing to weigh against the feature set. If you need a version you can point at and say it will not move, this repository does not offer one.

Editorial conclusion

Adopt this if you already own Red Alert 2 plus Yuri's Revenge and want skirmish on an iPhone or iPad, and you accept that the engine underneath is proprietary and non-commercial. Do not adopt it if you need single-player campaigns, want to redistribute a build, or object to the Chrono Divide licence terms. Before installing, read THIRD-PARTY-NOTICES.md and AI-USE.md in the repository root, and check the last push date against your own tolerance for unmerged fixes.

Frequently asked questions

Is there a way to play Red Alert 2 on Mac?

This repository targets iPhone and iPad, not macOS, despite the name. On desktop the README points to the CnCNet-under-Wine route, which emulates the x86 retail binary and is described as a non-starter on iOS.

Is there a Red Alert game available for iPad?

This project runs Red Alert 2 and Yuri's Revenge skirmish natively on iPhone and iPad using the Chrono Divide TypeScript engine. It ships no game assets, so you need your own retail copy of Red Alert 2 plus Yuri's Revenge.

Can I play Command & Conquer on my iPad?

For Red Alert 2 and Yuri's Revenge, this port is the option the README describes, with touch controls, mid-match save and load, and skirmish AI. The README does not state that the campaigns are playable.

Is it possible to play command and conquer on Mac?

The README does not describe a macOS build for this project; it covers iPhone and iPad. It notes that CnCNet under Wine is the desktop route, and that the sibling Generals-Mac-iOS-iPad project ports EA's released C++ engine for that game.

Official sources

  1. ammaarreshi/RedAlert2-Mac-iOS-iPad on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
Community notes

Community notes