Skip to content

For firmware developers

Add your firmware to Updater CE.

Updater CE is the community catalogue and installer for custom firmware. Develop your project from a base ROM, publish it as a public repository with the correct release assets, add the model entries to slidia_manifest.xml, test the model filters, and open a pull request. One repository can serve every model it supports.

Start from a base ROM

Base ROMs give custom firmware developers a clean Android foundation with the wireless radio chips enabled. On the Y1 they enable Wi-Fi and GPS alongside the factory Bluetooth and FM; on the Y2 they enable Wi-Fi, GPS, and FM alongside the factory Bluetooth.

Base ROM downloads for custom firmware development, with the Android version and wireless features each one enables
DownloadDeviceAndroidWireless features
rom.zipY1 · Type AAndroid 4.2.2Adds Wi-Fi and GPS to the factory Bluetooth and FM (FM already works on the Y1 from the factory). For Y1 players that shipped with OS 2.0.0 or later.
rom_type_b.zipY1 · Type BAndroid 4.2.2Adds Wi-Fi and GPS to the factory Bluetooth and FM (FM already works on the Y1 from the factory). For Y1 players that shipped with an OS earlier than 2.0.0.
rom_y2.zipY2Android 4.4.2Adds Wi-Fi, GPS, and FM to the factory Bluetooth. The Y2 radio chip is fully enabled, so FM is available here too.

These images are the stock Android base (AOSP) with the device wireless radios enabled, so a custom firmware can add network features instead of replacing the radio stack. They are the practical starting point for the publishing steps below.

Use these release asset names

The filename is part of the compatibility signal. Keep the names exact and put the ZIP files in the project's release assets, not only in the repository source tree.

Firmware ZIP asset names and supported devices
AssetDeviceHardwareMeaning
rom.zipY1Type AY1 devices that shipped with OS 2.0.0 or later.
rom_type_b.zipY1Type BY1 devices that shipped with an OS earlier than 2.0.0.
rom_y2.zipY2Y2The Y2 full-install package. Keep it separate from Y1 assets.
Do not rename a package to make it fit another model. Y1 and Y2 use different MediaTek platform files and flashing configuration. Publish the package for the hardware it actually supports.

How the connection works

Updater CE reads the manifest as its catalogue. Each <package> line tells it the project name, repository, model, and handler. When a user chooses that project, Updater checks the repository’s published releases and looks for a rom*.zip asset.

Manifest

Names the project and maps it to a model. Y1 and Y2 need separate lines, even when they share a repository.

Published release

Contains the installable ZIP assets. A single release may contain the Y1 Type A, Y1 Type B, and Y2 packages together.

Updater CE install

Uses the selected model to choose the matching package and model-specific flashing path. The user should not have to guess a filename.

Publish a project in five steps

  1. Fork the Updater CE repository. Create your own fork of y1-community/Innioasis-Updater, then clone your fork locally.
  2. Prepare a public firmware repository. Make sure the repository is public and its release contains the correct ZIP assets. You can put rom.zip, rom_type_b.zip, and rom_y2.zip on the same release when they belong to the same version.
  3. Edit the manifest. Open slidia_manifest.xml in the root of your Updater CE fork. Add one line for each model the release supports (Y1 and Y2 are the common pair). The repo value is the repository's owner/repository; url is the public project page.
  4. Test the catalogue. Run Updater from the edited checkout. Select Y1 and confirm the project shows the Y1 assets. Select Y2 and confirm it shows the Y2 release. Check Type A and Type B separately when both are published.
  5. Open a pull request. Push the manifest change to your fork and open a pull request against the upstream Updater CE repository. Include the project link, supported models, release tag, asset names, and the devices you tested.

Generate your manifest lines

Fill in the repository and tick every model the release supports. The generator writes one <package> line per model and only includes the attributes you set, so the result matches the current slidia_manifest.xml format. Every attribute Updater CE reads is available below — the optional ones are under More options.

The public GitHub repository. The generator extracts owner/repository from the URL.
Shown in the app and the site catalogue.
Human-facing page for the project or its release notes.
Clear this to use the model's default brand. SR1, Q3, Q5 and Q3e are Timmkoo models.
Devices (one line each)
For a model that is not listed above. Known models keep their catalogue spelling.
Flags

Keep Data is only offered when the incoming firmware and the installed firmware are the same or share a derivative root. Use the flag only when user data genuinely cannot carry over.

More options: icon, artwork, release assets, post-install and mirrors

Icon and artwork

Choose the image you will commit to the repository. This previews it and builds its raw URL; it does not upload anything.
Path to the committed image, relative to the repository root.
A direct image URL. When empty, the app uses the release's updater.png or a generated icon.

Optional dark-theme icon. image_dark is an accepted alias.
Secondary artwork, tried after the release image and icon.

Release assets

One name for every selected model. Leave empty to use rom.zip on Y1 and rom_<model>.zip elsewhere.
Glob used when the release's zips are not named rom*.zip.
Glob for the Y1 Type A package when its name does not say so.
Glob for the Y1 Type B package when its name does not say so.
Hide the entry from older Updater CE builds.

Links, mirrors and Keep Data family

Opened after a successful install.
Optional second step for a multi-page setup guide.
Comma-separated *-mirror repositories that build Portable Flashing Zip packages.
The firmware this release is built from. Related firmwares share a data partition, which is what Keep Data checks.
App repo whose releases describe the apps in this firmware. It also needs a post-install page.
App repo whose APK the app downloads and installs after the firmware.

Catalogue extras

Stable identifier for links and saved install records. The model is appended automatically when several models are selected.
<package name="Your Firmware" brand="Innioasis" repo="your-account/your-firmware" device="Y1" url="https://github.com/your-account/your-firmware" type="img" handler="Custom Firmware" />
<package name="Your Firmware" brand="Innioasis" repo="your-account/your-firmware" device="Y2" url="https://github.com/your-account/your-firmware" type="img" handler="Custom Firmware" />

Loading the latest manifest…

One line is not enough for a shared repository. If the Y2 line is missing, Y2 users will not get a model-matched entry even when rom_y2.zip exists in the project's release. The same is true for every other model your release supports.

Every attribute the manifest reads

These are the attributes current Updater CE builds understand. The generator writes only the ones you fill in; the app falls back to sensible defaults for the rest.

slidia_manifest.xml package attributes and their meaning
AttributeNeededWhat it does
nameYesSoftware name shown in the catalogue and on install cards.
repoYesowner/repo. The app reads that repository's GitHub releases.
deviceYesTarget model, uppercase (Y1, Y2, G1, Q3e, …). Keep one entry per model.
urlRecommendedProject page or release notes opened from the catalogue.
type, handlerYes in practicetype="img" and handler="Custom Firmware". Other types and non-firmware handlers are skipped.
brandOptionalCatalogue brand (Innioasis, Timmkoo). Empty uses the model's default brand.
package_nameOptionalRelease asset filename. Defaults to rom.zip on Y1 and rom_<model>.zip on other models.
asset_patternOptionalCase-insensitive glob for releases whose firmware zips are not named rom*.zip (for example my-firmware-*.zip).
type_a_asset, type_b_assetOptionalGlobs that identify the Y1 Type A and Type B zips when their filenames do not contain the usual markers.
iconOptionalLogo URL. Used after the release's own updater.png / updater.jpg, and as the fallback for every release.
icon_darkOptionalDark-theme logo. image_dark is an accepted alias.
imageOptionalSecondary light artwork, tried after icon.
post_install, post_install2OptionalPage(s) opened after a successful install. The second one covers a multi-step guide.
portable_zipsOptionalComma-separated *-mirror repos that publish ready-to-run portable packages.
derivativeOptionalRepository the firmware is built from. Firmware with the same derivative root can keep user data.
info_repoOptionalApp repository whose releases describe what the firmware deploys. Requires post_install or post_install2.
apk_repoOptionalApp repository whose APK the app installs after the firmware.
min_versionOptionalHide the entry when Updater CE is older than this version.
do_not_keep_dataOptionaltrue (also 1 / yes) blocks Keep Data completely for this firmware.
slugOptionalStable identifier for links and saved install records. Generated from the name and model when empty.
descriptionOptionalShort catalogue description. It can be the attribute value or the element's text.

Legacy names are still read for compatibility: model, package, portable_zip, post_install_2, min_app_version and image_dark. New entries should use the current names above.

Submit the lines as a pull request

  1. Copy the generated lines above. They already match the latest manifest format.
  2. Edit slidia_manifest.xml in the repository. Use the edit link below; the repository host creates a fork and a branch for you automatically.
  3. Paste the lines just before </slidia>, keeping the existing entries unchanged.
  4. Commit to a new branch (for example add-your-firmware), then open a pull request against the Updater CE repository.
  5. In the PR, include the project link, supported models, release tag, asset names, and the devices you tested.

Keep the model names uppercase, use the exact URL of your public repository, and keep type="img" and handler="Custom Firmware" for a firmware entry.

Make the release easy to verify

Give the release a clear tag and release note. The tag is useful to people, but the ZIP asset names are what Updater CE uses to identify the install packages.

Release checklist

  • Publish the release publicly.
  • Attach the ZIP files as release assets.
  • State the supported model and Type A or Type B in the notes.
  • List any required preparation or known limits.

One release, three assets

A shared release can contain rom.zip, rom_type_b.zip, and rom_y2.zip. Updater classifies them separately and chooses from the model and hardware filters.

Do not bundle guesses

Do not include a Y1 package under the Y2 filename, or add untested scatter, preloader, or partition data just to make an asset appear.

Why the model entries matter during flashing

The manifest is not just a download menu. After extraction, Updater CE uses the resolved model to prepare the matching install path. Y1 and Y2 have different platform files, preloaders, scatter configuration, and device layouts.

Contributors should provide correct firmware files, not flash offsets. Do not edit scatter addresses, preloaders, DA files, or partition commands to work around a bad package. Fix the release asset and test on the intended model.

Before you request a merge

  1. Validate the XML with an XML parser. A missing quote or closing /> can hide every entry after it.
  2. Launch the updater from your checkout so it loads the local manifest before the remote refresh.
  3. Check Y1 and Y2 independently. Confirm that the project appears only where its package is supported.
  4. Check the release list for rom.zip, rom_type_b.zip, and rom_y2.zip as applicable.
  5. Test the actual install on the intended device, with a reliable USB data cable and a recovery plan for returning to Original Software.
  6. In the pull request, explain what you tested. Do not describe an untested model as supported.
python -c "from xml.etree import ElementTree as ET; ET.parse('slidia_manifest.xml'); print('manifest ok')"

For a local check, run that command from the repository root. It verifies XML syntax only; it does not prove that a release contains valid firmware or that a device is safe to flash.

Modding skills for AI agents

The repository's skills/ directory is a source-grounded knowledge base for agents working on Y1 and Y2 hardware, firmware, themes and apps. Each skill names the project files its claims come from, so an agent can check a fact before changing a device.

Hardware

Y1 hardware

MT6572, the wheel as key events, 480x360 display, FM/audio paths, storage and the Type A/B partition map.

Hardware

Y2 hardware

MT6582 board, device tree, GC9503V/ST7701S panels, PMIC/DAC rails, partitions and the boot image.

Firmware

Firmware packages

rom.zip anatomy, scatter files, Class A update contracts and the release checklist.

All skills

Browse the skills folder

Rockbox Y1/Y2, stock Android ROMs, Y2Linux, Android apps, launchers, release notes and site publishing.