// the find
tryzealot/zealot
Self-hosted Beta App Distribution for Android, iOS, macOS, Linux and Windows apps | 开源自部署移动应用、 macOS、Linux 和 Windows 应用分发平台,提供 iOS、Android SDK、fastlane 等丰富组件库
Zealot is a self-hosted Rails app that hosts and distributes iOS, Android, macOS, Windows and Linux builds, with OTA install links, QR codes and per-channel release management. It is for teams that want a Pgyer-style distribution service on their own infrastructure, especially mobile teams already wiring builds from Jenkins, GitLab CI or fastlane.
- The Apple side goes beyond upload-and-serve. There are App Store Connect key and team models, an apple_key_device join table, and a sync_apple_devices job that the README describes as syncing test devices and registering new ones with the Apple Developer portal. Manual UDID handling is usually where this kind of setup eats an afternoon, so that is the part most self-hosted alternatives skip.
- Build retention runs as background jobs inside the app (clean_old_releases_job, retained_builds_job) rather than an external cron script, so the retention policy lives with the data it governs.
- The automation surface is wide for a self-hosted tool: a REST API, a GraphQL endpoint, per-channel webhooks, and separate iOS, Android and fastlane clients. A CI job can upload and notify without anyone opening the UI.
- Auth goes through omniauth for OIDC, LDAP and several OAuth providers, so the app can sit behind an existing identity provider instead of local passwords.
- The README is mostly a pointer. Install, configuration and the API reference all live on an external docs site, and the top half is a Chinese-first pitch wrapped in badges. From the repo alone you cannot judge the deployment story or find setup steps quickly.
- Two styling systems are checked in side by side: AdminLTE (app/assets/stylesheets/adminlte.scss) and Tailwind with daisyUI (app/frontend/stylesheets, plus the daisyui instructions file). That looks like a migration that has not finished, and it will make admin pages inconsistent and harder to change.
- The README does not say how App Store Connect private keys are stored or who can read them, and apple_key.rb is where that material lives. Check its encryption and access rules before pointing this at a team's signing credentials.