Installer for Variants
IFV is a mod launcher and updater for OpenRA-based games that reduces download sizes with incremental updates.
- Type: tool
- Game: Command & Conquer: Tiberian Dawn
- Runs on Windows
- Latest release v2.3.1, 2026-08-24
- Source: https://github.com/cameo-mod/Cameo-IFV
README
Cameo-IFV
"Everything's made to fit!"
Installer For Variants — a multi-mod launcher and incremental updater for OpenRA-based games and total conversions (Cameo, Combined Arms, and sister projects). Capable of cutting down update download sizes (for compatible mods) after initial mod install.
Name inspired by RA2 Allied IFV.
Why this exists
The previous cameo-launcher re-downloaded the entire -x64-winportable.zip (hundreds of
MB to GBs) for every release, even when almost nothing changed between two playtests.
Cameo-IFV fixes that and generalises the launcher so any OpenRA mod is just a config entry.
Design decisions (locked)
- Incremental updates via zsync. Each release publishes a tiny
.zsynccontrol file next to its zip. The client range-fetches only the changed blocks of the archive, seeded from the copy it already has. Consecutive OpenRA releases share most bytes, so updates become small. Fallback: if a release has no.zsync, the launcher does a full download. - Windows-first, OS-agnostic core. Ships Windows today, but the core has no
.bat/Windows assumptions; platform is a key into a per-OS asset filter, so Linux/macOS is a later config flip. - Multi-mod by config. A mod is data: an id, a display name, and one or more release sources
(repo + channel + per-OS asset filter). See config/catalog.default.json.
- Cameo: a single feed at
cameo-mod/Cameo-mod(no separate dev channel). - Crystallized Nexus: prereleases from
DoGyAUT/crystallized-nexus, using full-download fallback. - Combined Arms: stable at
Inq8/CAmod, dev atdarkademic/CAmod. - You Must Construct Additional: stable at
patrickwieth/YMCA. - OpenE2140: stable at
OpenE2140/OpenE2140. - OpenRA: Red Alert, Tiberian Dawn, and Dune 2000 from
OpenRA/OpenRA. - Shattered Paradise: stable at
ABrandau/Shattered-Paradise-SDK.
- Cameo: a single feed at
- Per-version game files. Each installed version is extracted into its own instance directory,
so versions do not clobber one another's game files. OpenRA settings and support data remain
shared unless a game package supplies its own local
Supportdirectory. - Writable per-user data dir. Settings/cache live under a per-user location (not the install dir), fixing the old "unwritable under Program Files" bug.
- Saved library locations. Players can keep installs on another drive, save multiple library paths, and switch the active location without moving the launcher itself.
- Safe installs and useful diagnostics. Downloads can be cancelled; archives extract into a staging directory before replacing an existing install; interrupted scratch files are cleaned on startup. The in-app session log records URLs, paths, extraction details, and launch commands.
Status
1.0 — Windows-first launcher with automated portable releases. It can browse, install, launch, and delete isolated versions from the built-in catalog, on a saved library location of your choice.
Incremental zsync updates work end to end against a published .zsync sidecar. On a real Cameo
playtest bump, ~85% of the archive was reused from the previous install and only the ~15% delta was
fetched — and that delta is downloaded with parallel range requests (zsync's own sequential fetch is
latency-bound and ends up slower than a full download), so an update completes in seconds rather than
minutes. The transport resolves GitHub's signed-CDN redirect once and reuses it across the many small
range requests, asserts 206 Partial Content so a Range-stripping proxy fails loudly instead of
silently re-downloading the whole archive, and honours Retry-After if the CDN throttles. The
full-download fallback (used on first install and for releases without a .zsync) retries transient
5xx/timeouts and resumes from the bytes already on disk.
Deferred to a later release: GitHub release pagination beyond 30 entries, Linux/macOS asset filters, and launcher self-update.
Layout
src/CameoIFV.Core— OS-agnostic domain: catalog/config model, release providers, zsync client, instance management.src/CameoIFV.App— Avalonia UI.config/— default mod catalog.
Building
dotnet build Cameo-IFV.slnx
Convenience scripts to support development testing (launch-*.cmd) are available.
Releasing
GitHub Actions publishes a Windows x64 portable zip when a version tag is pushed, for example:
git tag v1.0.0
git push origin v1.0.0
The release asset is named like Cameo-IFV-v1.0.0-win-x64.zip and contains one top-level
Cameo-IFV/ folder with Cameo-IFV.exe, catalog.default.json, and a player-facing
README.txt. Extract it and run Cameo-IFV.exe.