Self-hosted AltStore / SideStore / LiveContainer source generated from GitHub repositories.
GithubStore reads each configured repository's latest GitHub release and adds the first suitable .ipa release asset to one combined source.
Note
If you are looking to have an IPA repository from Telegram channels, check out TeleStore.
- Create
docker-compose.yml:
services:
app:
image: ghcr.io/yazdipour/githubstore:latest
ports:
- "8080:8080" # if port 8080 is already in use, change the left side to an available port, e.g. "8081:8080" and do not forget to update the base_url in config.yml accordingly.
volumes:
- ./config.yml:/app/config.yml
restart: unless-stopped- Create
config.yml(or copy fromconfig.example.yml) and configure:
server:
base_url: http://localhost:8080 # Set reachable URL if accessing from another device
ui_config: false # Set true to enable web UI for managing repositories
github:
token: "" # Optional. Increases API rate limits from 60 to 5000 req/hr
source:
name: GithubStore
slug: source
subtitle: GitHub release IPA source
description: Self-hosted AltStore source generated from GitHub release IPA assets.
tint_color: "#24292F"
cache_seconds: 600
repositories: []- Add repository:
Adding through UI:
By setting server.ui_config: true in config.yml, you can access the web UI at http://localhost:8080/ to add and delete repositories.
Caution
The UI is very basic and does not have any authentication, so only enable it in a secure environment.
We recommend after adding repositories via the UI, to disable it again by setting ui_config: false and restarting the server.
Or add repository entries under repositories inside config.yml. GithubStore uses each GitHub repo name for the app name and slug by default:
repositories:
- url: https://github.com/example/example-ios-app
tint_color: "#24292F"
icon: imgs/ShaFace-small.png-
Start the server:
docker compose up -d -
Add the source URL in AltStore, SideStore, or LiveContainer:
http://localhost:8080/source.json
Note: Replace localhost with your computer's IP if adding from a phone (e.g., http://192.168.1.50:8080/source.json).
Each repository contributes one app entry for each .ipa asset on the latest GitHub release. If a release contains multiple .ipa files, GithubStore includes all of them, sorting normal-looking files before debug or symbol-looking files and larger files first within each group.
If a repository has no latest release or no .ipa asset on that release, the source includes an error entry for that repository.
Use the local build when changing source:
cp config.example.yml config.yml
docker compose -f docker-compose.local.yml up --buildThe generated source is also available at /source.json; if you change source.slug, it is additionally available at /{source.slug}.json.
This project was built with the assistance of AI tools for code generation and refactoring.
MIT License. See LICENSE for details.


