Anycast
An AI-powered Podcast App
Cross-platform, Seamless RSS Integration, Global Content Discovery, and AI
- Create different playlists
- Brand new UI design
- Support time navigation in show notes
- Support for custom ASR API and Chat API without mandatory login
- Compiler conditions for the open-source version, without requiring Firebase / RevenueCat configurations
- Carplay support
- AI recommendations
- Enhanced note-taking features
Conditional compilation will be supported soon, allowing you to compile with minimal (or no) extra steps.
Currently, when cloning and compiling the project, the following additional files are required:
.envandroid/app/google-services.jsonios/Runner/GoogleService-Info.plistlib/firebase_options.dart
android/key.properties and the upload keystore are only required for signed
Android release builds.
Maintainers with access to the Anycast Infisical project can generate the development configuration without sharing these files directly:
brew install infisical/get-cli/infisical
infisical login
./scripts/bootstrap.shThe bootstrap script writes the ignored files locally with restrictive permissions. It also verifies the generated client configuration against reviewed SHA-256 digests, so an Infisical value change requires a corresponding Git review without committing the value itself. Android and iOS release-signing material is managed separately by the protected release workflow.
The Infisical project slug is anycast. Both dev and release contain
/app-config; release-only material is split into /android-signing,
/ios-signing, and /app-store-connect. Secret names are referenced by the
scripts and workflows in this repository, while their values remain in
Infisical.
Pull requests run analysis, tests, an Android release build signed with a temporary CI key, and an unsigned iOS release build. These checks use synthetic client configuration and never access release credentials. Maintainers can also run the same checks manually for a selected branch from GitHub Actions.
Store candidates are built on GitHub-hosted runners and uploaded directly to Google Play Internal testing and TestFlight. GitHub does not retain the AAB or IPA as a workflow artifact.
Use a short-lived branch and pull request for every change to main. External
contributors can continue to participate through issues and pull requests
without repository write access. Only the maintainers with write access should
create candidate and release tags.
-
Merge the changes that belong in the next candidate into
main. -
Update
versioninpubspec.yamlasmajor.minor.patch+build, and merge that change intomain. -
Tag that commit with the exact same candidate version:
git switch main git pull --ff-only git tag rc-1.2.2+39 git push origin rc-1.2.2+39
-
Follow the
Store candidateworkflow in GitHub Actions, then wait for store-side processing to finish. -
Test the candidate. If it passes, promote the same builds in Google Play and App Store Connect instead of rebuilding them. A final source tag can then be added to the same commit without triggering another build:
git tag v1.2.2 git push origin v1.2.2
Creating an rc-* tag performs real store uploads; it is not a CI dry run. If
one platform uploads successfully and the other fails, use Re-run failed
jobs instead of rerunning every job, because stores reject duplicate build
numbers. TestFlight and Play Internal are testing destinations and do not
promote a release to production automatically.
Candidate and release tags cannot be moved or deleted. If a candidate fails,
increase the build number and create a new rc-* tag.
The workflow rejects a mismatched version or a commit outside main. Its
short-lived GitHub OIDC identity can authenticate only from the trusted
reusable workflow on main, running for a candidate tag in the release
environment; no Infisical client secret or Google service-account key is stored
in GitHub. The free-tier built-in Infisical viewer role is project-scoped, so
keep this project limited to Anycast secrets.
The current Apple Distribution certificate and provisioning profiles expire on
2026-12-11. Rotate them before that date, replace the values in Infisical
release /ios-signing, and update the reviewed certificate/profile identifiers
in the repository in the same pull request. The release workflow intentionally
fails closed if those values drift.
Anycast is licensed under the MIT License - see the LICENSE file for details.




