No description
  • Python 99.2%
  • Dockerfile 0.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Miles 7a11bd3055
Some checks failed
Validate RaringIPA / fast (push) Successful in 1m40s
Validate RaringIPA / changed-artifacts (push) Failing after 40s
update
2026-08-22 14:58:38 -05:00
.forgejo/workflows feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
apps update 2026-08-22 14:58:38 -05:00
assets feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
catalog feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
docker/validator feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
docs feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
ipas feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
schemas feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
src/altrepo feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
tests feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
.gitattributes Initial AltStore source with verified LFS artifacts 2026-07-21 00:10:01 -05:00
.gitignore update gitignore 2026-07-21 08:38:50 -05:00
CONTRIBUTING.md feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
LICENSE Initial AltStore source with verified LFS artifacts 2026-07-21 00:10:01 -05:00
NOTICE.md feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
pyproject.toml feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
README.md feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
SECURITY.md feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
source-plus.json feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
source.json feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00
uv.lock feat: harden catalog automation and artifact storage 2026-07-21 17:15:58 -05:00

RaringIPA

RaringIPA is a curated, automation-first AltStore Classic repository. It separates ordinary sideloadable apps from modified and enhanced apps while keeping every accepted IPA behind reproducible metadata, provenance, permission, and binary-integrity checks.

The Forgejo repository and local directory can remain named altstore-repo; RaringIPA is the effective product and source name.

Sources

Source Add this URL Contents
RaringIPA https://git.richey.dev/miles/altstore-repo/raw/branch/main/source.json Emulators, developer tools, utilities, readers, and other general IPAs
RaringIPA++ https://git.richey.dev/miles/altstore-repo/raw/branch/main/source-plus.json Tweaked, modified, patched, and enhanced IPAs

The source JSON, icons, and Forgejo /media/ endpoints must be readable without authentication even if the repository remains private. AltStore clients cannot attach a Forgejo token. IPA URLs use /media/ because Forgejo resolves Git LFS objects there; /raw/ may return an LFS pointer.

RaringIPA currently contains Aidoku, Delta, Feather, iSH, iTorrent, LiveContainer, PPSSPP, Provenance, SideStore, StikDebug, UTM, and Yattee. RaringIPA++ contains Apollo-Reborn, BHTwitter, SpotC++, YouTube Plus, and YTMusicUltimate.

Feed membership is intentionally disjoint: users who want both collections add both source URLs.

Apollo-Reborn is the standard build with its six app extensions. This suits the maintainer's paid Apple Developer account, but consumes roughly seven App IDs and can be inconvenient for a free Apple ID. Reddit and Imgur credentials, and any optional notification backend, remain user configuration.

YouTube Plus is pinned to 21.24.3 because that reviewed build still includes YTUHD. If the configured upstream source advances, discovery reports the candidate as held instead of downloading it. Its locked acquisition and reidentification recipe is build.recipe.json.

Repository model

Reviewed policy lives in catalog/sources/*.json and apps/*/app.json. Internal manifest schema v2 separates each release into immutable artifact, release, provenance, component, and inspection records in apps/*/versions.json. IPAs use content-addressed Git LFS paths of the form ipas/<slug>/<sha256>.ipa; source.json and source-plus.json are generated outputs.

Every release records both the stored artifact hash and its upstream provider identity. This distinction permits a narrowly reviewed deterministic transformation—such as restoring an executable ZIP mode omitted upstream—without losing the original provider digest.

See the architecture, candidate roadmap, operations runbook, and contribution policy for the complete model.

Local setup

Requirements are Python 3.12.13, uv 0.11.30, and Git LFS 3.7.1.

git lfs install
uv sync --frozen --extra dev
uv run ruff check .
uv run ruff format --check .
uv run pytest
uv run altrepo validate --scope full
uv run altrepo render --check

Common maintenance commands:

# Read-only provider status.
uv run altrepo discover

# Stage and validate a provider batch without changing the repository.
uv run altrepo sync --check

# Atomically ingest a complete passing batch and render both feeds.
uv run altrepo sync --apply

# Fast policy-only, changed-artifact, and complete local validation.
uv run altrepo validate --scope config
uv run altrepo validate --scope changed
uv run altrepo validate --scope full

# Compare published feeds and media with this checkout.
uv run altrepo health --remote-hash

# Inspect retention/filesystem hazards and preview pointer pruning.
uv run altrepo doctor
uv run altrepo prune --dry-run

sync --check returns 0 when unchanged, 2 when a complete publishable batch is staged, and 1 on provider or policy failure. sync --apply publishes only after every unpinned provider candidate is downloaded and validated. A failure leaves manifests and trusted artifacts unchanged.

Acquisition and private bases

Acquisition order is trusted upstream prebuilt IPAs, exact GitHub/Forgejo/AltStore-source assets, authenticated manual intake, then a future owned-device adapter. Browser challenges, quota systems, ArmConverter, and decrypt.day are optional manual inputs—not unattended dependencies.

Decrypted base IPAs belong in the separate private miles/altstore-base-ipas repository and are indexed with:

uv run altrepo base-import --repo ../altstore-base-ipas path/to/base.ipa

The secret-bearing main-branch build workflow uses BASE_IPA_TOKEN for read-only access to that repository. GitHub provider API access uses the separately scoped UPSTREAM_GITHUB_TOKEN; Forgejo tokens are never sent to GitHub. Never publish credentials, acquisition session state, or private base URLs in generated feeds.

Automation and retention

  • Fast CI runs schemas, tests, Ruff, workflow lint, and render checks without downloading all LFS objects.
  • Changed-artifact CI pulls and fully inspects affected IPA objects.
  • Daily synchronization performs an all-or-nothing provider transaction and regenerates both feeds.
  • Daily health compares both hosted source files byte-for-byte and probes public icons and IPAs.
  • Weekly audit validates every retained local IPA and streams every hosted SHA-256.

Three versions per app are retained by default, with reviewed overrides and protected pins. Compatibility aliases for formerly published named paths expire on August 20, 2026 and are removed by altrepo prune --apply. This never performs server-side LFS garbage collection.

See NOTICE.md before redistributing third-party artifacts.