Magnemite
Operating it

APKs sources

Where builds are discovered, how to add another one, and what each publishes.

A source is a URL publishing an index of installable builds. Every source is configurable so you can add or remove in Settings → Version sources. They all should speak the same format.

SourceIndexNotes
UnownHash mirrorhttps://mirror.unownhash.com/index.jsonBare filenames, so it needs a base URL. Publishes an md5.
Silva (The Treeline Project)https://the-treeline-project.github.io/p/silva/index.jsonAbsolute url per entry, plus package and version_code.

Both ship com.nianticlabs.pokemongo as an arm64-v8a .apkm, a zip holding base.apk plus split_config.arm64_v8a.apk. That is why installs go through a pm install-create / install-write / install-commit session rather than a plain pm install.

The index format (json)

Four fields are required; the rest are read when a source publishes them and ignored when it does not.

[
  {
    "filename": "com.nianticlabs.pokemongo_arm64-v8a_0.425.0.apkm",
    "version": "0.425.0",
    "arch": "arm64-v8a",
    "size": 250184385,
    "package": "com.nianticlabs.pokemongo",
    "version_code": "2026081202",
    "md5_hash": "",
    "last_modified": "2026-08-15T13:55:23.000Z",
    "url": "https://…/com.nianticlabs.pokemongo_arm64-v8a_0.425.0.apkm"
  }
]
FieldUsed for
filename, version, arch, sizeRequired. Matching the target and knowing what is being downloaded.
urlThe download. Without it, the source needs a base URL to prefix filename.
packageMatching the target exactly. Without it, the filename prefix is used instead.
version_codeThe Play build code shown next to the version.
md5_hashChecked at download time. Empty or absent means the size is the only upfront check.
last_modifiedThe published date in the Versions table.

Adding one

Settings → Version sources → Add source: a name, the index URL, and a base URL only if the index lists bare filenames. It is polled on the next cycle, and the Status page gets a card for it showing how many builds it lists and when it was last read.

Removing or disabling a source stops the polling. Builds it already found stay, cached artifacts and rollout history included, since they simply no longer name a source.

Two sources, one build

When several sources list the same build it is stored once. The source with the lowest priority number decides which URL is downloaded; the others only fill in metadata it did not publish / found.

That is why adding a source never duplicates the Versions page, and why a new source is added last by default: an existing build keeps being downloaded from where it already was.

What the hub does with them

  1. Polls each enabled source on its own Check every interval (15 minutes by default, configurable for each source) and records what it finds as versions.
  2. Downloads a version once, when it is cached (either by you pressing Cache or by auto-update).
  3. Computes a sha256 while writing it to ARTIFACT_DIR.

That sha256 is what each agent verifies before it opens an install session. The upstream md5, where a source publishes one, is checked at download time; without it the size the index reports is the only upfront check.

Sources are polled independently, so a build that appears on one first is available immediately rather than waiting for the others to catch up.

Pruning

Cached bundles are ~170 MB each and accumulate. Versions → Prune removes artifacts for versions nothing is on and nothing is rolling out to, leaving the database rows.

Configuration

Sources are entirely managed from Settings → Version sources: add, edit, or remove as many as you like there. That includes how often each one is read: Check every sits on the source, next to its URL and priority.

The optional pnpm db:seed / make seed adds two starter sources (the UnownHash mirror and Silva) on a fresh database, as a convenience, skip it and add your own from Settings instead if you'd rather start empty.

Leave Base URL empty for an index that publishes an absolute url per entry. If it lists bare filenames instead, set the base URL in Settings; the Health card says so when entries have nowhere to download from.

On this page