CapWrapp puts a Fastlane + GitHub Actions pipeline in each repo, keeps certificates and keystores in a vault, and gives your team one dashboard to preview, ship to TestFlight and Play, and submit to review — for every app you maintain.
Repositories connected through the CapWrapp GitHub App.
Search by name or repo… Add app
HarborCapacitor
atlas-labs/harbor
Updated 2 minutes ago
FitloopCapacitor
atlas-labs/fitloop
2 packages can be updated
Updated 1 hour ago
PawpalCapacitor
atlas-labs/pawpal
Updated 3 hours ago
MeridianCapacitor
atlas-health/meridian
1 package can be updated
Updated yesterday
TavolaWrap PR open
atlas-labs/tavola
Updated yesterday
KiddoWeb only
atlas-labs/kiddo-web
Updated 3 days ago
#harbor-releasesCapWrapp
🧪 Harbor is ready to test on TestFlight / Play Internal, version 1.4.0!
#fitloop-releasesCapWrapp
❌ Deployment failed for Fitloop, version 2.1.0.
#pawpal-releasesCapWrapp
✨ New commit ready to deploy for Pawpal (9f2c1ab)!
Who it’s for
One desk, whoever owns the apps.
Agencies
Ship every client’s app with its own store keys and its own Slack channel, from one dashboard your whole team shares.
Startups & product companies
Run several apps or brands from GitHub without a dedicated mobile release engineer.
Public sector & large organizations
Many public-facing apps, admin and member roles, and builds that run on your own GitHub runners.
The fleet tax
Every new app adds another pipeline to babysit.
Capacitor shares your code across iOS and Android. Shipping it is still per-app work — and it multiplies with every app you add.
10
8
release pipelines to maintain
10release pipelines to maintain
signing setups (iOS and Android)
20signing setups (iOS and Android)
store listings to keep in sync
160store listings to keep in sync
Signing identities
Distribution certificates, provisioning profiles, and Apple’s cap on certificates per team.
Upload keystores
One per Android app. Lose one and you are asking Google for an upload key reset.
Build numbers
They must go up on every upload, for every app, on both stores.
Pipeline drift
Fastlane lanes and workflow YAML copied between repos, slowly diverging.
Capacitor upgrades
Repos stuck on different majors, each with its own set of plugins.
Credentials in DMs
“Who has the .p8 for this app?” — asked in Slack, again.
Listings × languages
Name, subtitle, description and what’s new, per store and per locale.
Two consoles
App Store Connect and Play Console tabs for every review submission.
How it works
A real pipeline in each repo. One control plane on top.
CapWrapp writes standard files to your repos and orchestrates GitHub, Apple and Google. Nothing runs on a black-box build farm.
1Install the GitHub AppGrant the repos you choose: Contents, Actions and Pull requests, plus Workflows if you want the native folders generated in CI. Installation tokens never leave the server.
2Connect your reposCapWrapp detects Capacitor, reads package versions, and guesses the last native release from tags, GitHub releases and past runs.
3Vault the store keysApp Store Connect API key in, Distribution certificate out. Play service account in, upload keystore minted or stored. Reuse keys across apps on the same team.
4Merge the pipeline PRcapwrapp/native-pipeline adds the workflow and Fastlane lanes. iOS builds on macos-latest, Android on ubuntu-latest — your runners, your minutes.
5Ship a SHAPick a commit, confirm, and follow the step reports. Build numbers bump themselves; TestFlight and Play Internal get the binaries.
.github/workflows/capwrapp-native.ymlexcerpt
name: CapWrapp nativeon:workflow_dispatch:inputs:sha:# commit to ship (required)version:# CFBundleShortVersionString / versionNameios:# TestFlight: 'true' | 'false'android:# Play Internal: 'true' | 'false'report_url:# where step reports goreport_token:# short-lived, one per runconcurrency:group: capwrapp-native-${{ github.repository }}cancel-in-progress: falsejobs:prepare:# checkout, install, secrets, web build, cap syncruns-on: ubuntu-latestios:# pods, signed IPA, fastlane → TestFlightruns-on: macos-latestandroid:# keystore, versionCode, AAB, fastlane → Playruns-on: ubuntu-latestfinish:runs-on: ubuntu-latest
Step reports
checkouta1f9c2e
installpnpm-lock.yaml found
web_builddist/index.html
cap_syncios · android
ios_archivesigned IPA on macos-latest
ios_upload
android_bundle
android_upload
Built for fleets
Everything between merge and the store, for every app.
One place for the parts of a release that don’t live in your code — per app, per team, per store.
A vault per app
App Store Connect key, Distribution certificate, Play service account, upload keystore and build-time env live server-side. Copy keys between apps on the same team; settings sit behind a PIN.
Harbor Reuse from another app
App Store Connect API key.p8 · Key ID 2X9R4HXF82
Distribution certificatecreated by CapWrapp
Play service accountJSON key
Upload keystoreminted · downloadable
Build envVITE_API_URL, VITE_SUPABASE_ANON_KEY
Per-app alerts
Give each app its own Slack webhook, so every team or client follows its own channel. Telegram and email too: started, failed, ready to test, new commit on the default branch.
#harbor-releases Telegram Email
New commit ready to deploy
Ship started
Ship failed
Ready to test
#harbor-releases CapWrapp 🧪 Harbor is ready to test on TestFlight / Play Internal, version 1.4.0!
Previews for QA and sign-off
Any commit becomes a hosted web build with a QR code and a signed link that expires after 7 days. Revoke it whenever you like.
preview.capwr.app/p/7f3a…c91e
Fitloop · 9f2c1ab
expires in 7 days
Copy URLTurn off
Listings and review, without the consoles
Edit store copy per locale with live character limits and AI translation, push copy and screenshots, then submit to App Review or promote to Play production.
App Store
On the store
2.0.1
In test
2.1.0
In review
Google Play
On the store
2.0.1
In test
2.1.0
Send to production
ENFRDEESITPTJA
Every app, one dashboard
Capacitor status, packages behind npm and last activity for each repo. Search, pin, switch organizations.
Teams, stakeholders, clients
Organizations with email invites. Members ship and edit listings; admins also manage settings and people.
Capacitor drift, as PRs
Official packages, plugins and @capgo/* are checked against npm daily. Upgrades land on capwrapp/capacitor-deps.
Failed runs, explained
CapWrapp reads the Actions log and tells you which step broke and what to change.
Integrations by PR
RevenueCat, OneSignal, Sentry, Firebase and Capacitor plugins, added with a PR and keys in the vault.
Turn a web app into an app
Still a website? CapWrapp commits Capacitor and a CI job that generates the iOS and Android projects.
Under the hood
A control plane, not a build farm.
Your code and your builds stay in GitHub. CapWrapp holds the keys, dispatches the workflow, and listens to what happens.
Your GitHub
Repo with the workflow and .capwrapp/
Actions runners: macOS for iOS, Linux for Android
workflow_dispatch · sha, version
secrets · short-lived token
step reports · workflow_run
CapWrapp
Dashboard and release board
Vault for signing keys and env
Webhooks and step reports
listings · screenshots
review · promotion
release status
Apple & Google
App Store Connect API
Google Play Developer API
signed IPA / AAB, uploaded by Fastlane straight from your runner
Your runners, your logs
Every build is a GitHub Actions run in your org. macOS minutes are billed to you by GitHub, at GitHub’s price.
Secrets fetched per run
The job pulls signing keys and env with a short-lived token. Nothing is written to GitHub secrets, and it all leaves with the runner.
Least-privilege GitHub App
Installation tokens are minted server-side. Webhooks for pushes, workflow runs and pull requests keep the desk live.
Plain files, revertible
Capacitor config, native projects, GitHub Actions workflows and a .capwrapp folder. Close the PR or revert the commit to walk away.
GitHub App permissions
Metadata Know the repo exists
Read
Know the repo exists
Contents Read commits, add Capacitor and pipeline files
Read & write
Read commits, add Capacitor and pipeline files
Actions Dispatch the native and preview workflows
Read & write
Dispatch the native and preview workflows
Pull requests Open pipeline, upgrade and integration PRs
Read & write
Open pipeline, upgrade and integration PRs
Workflows Add the job that generates ios/ and android/
Read & write · optional
Add the job that generates ios/ and android/
Build it yourself?
You could wire this up per repo. Then do it again for every app.
For every app
Fastlane + Actions, by hand
With CapWrapp
Pipeline
Copy and adapt lanes and YAML, then keep them in sync
Installed by PR; reinstall to refresh every helper
iOS signing
Match repo or manual certificates, until the team cap bites
Created from the API key; unused CI certificates revoked at the cap
Android signing
Keystores in someone’s Drive
Minted or uploaded once, vaulted, downloadable
Build numbers
Scripted per app
Latest TestFlight build + 1; highest Play versionCode + 1
Secrets
GitHub secrets per repo, rotated by hand
One vault per app, fetched per run
Listings
Two consoles × every language
One editor, AI translation, push to both stores
Review
Submit in App Store Connect and Play Console
Submit or promote from the release board
Visibility
A tab of Actions runs per repo
One dashboard; per-app Slack alerts
Moving off Ionic Appflow?
Appflow sunsets on December 31, 2027. Our guide maps the move: store builds from GitHub with CapWrapp, live updates with a dedicated OTA service.
Your iPhone and Android apps, made from your web app
Unlimited builds on your own GitHub account — no Mac needed
Test builds on TestFlight and Google Play, then release to both stores
Store listings in every language, translated by AI
Failed builds explained in plain English
Email, Slack and Telegram alerts
Payments, ads and push notifications
Unlimited projects, previews and teammates
A free setup call during your trial
An app counts as active for 30 days after you ship it: a test build, a store release, an update or a listing change. Connected projects and previews never count, and an app’s iPhone and Android versions count as one.
Cancel anytime — your apps stay live on the stores, and your code stays in your project.
Need more than 50 apps?
FAQ
The questions dev teams ask first
Straight answers, including what CapWrapp doesn’t do yet.
GitHub Actions, in your own repositories. CapWrapp dispatches the capwrapp-native.yml workflow with the commit SHA and version; iOS jobs run on macOS runners and Android on Linux. You can point CapWrapp at your own workflow if it accepts the same inputs.
Does it run our test suite?
No. CapWrapp builds, signs, uploads and tracks releases. Keep your tests in GitHub Actions and ship the commits that pass — the pipeline is a normal workflow file you can read.
Can it ship automatically on every merge?
Not today. Every store build starts from a confirmed click in CapWrapp, so nothing reaches TestFlight or App Review by accident. CapWrapp tells you on Slack, Telegram or email when a new commit lands on the default branch.
Do you support monorepos?
Not yet. CapWrapp expects one Capacitor app at the root of each repository.
GitLab or Bitbucket?
GitHub only, for now.
Which frameworks and package managers work?
Anything whose build outputs a static folder with an index.html — Vite, Ionic (www), static Next.js exports and similar — installed with npm, pnpm, Yarn or Bun. A server-only bundle needs a static build output.
We already manage our own certificates and keystores.
CapWrapp doesn’t use Fastlane Match. It creates an Apple Distribution certificate from your App Store Connect API key, or you upload a .p12. On Android, upload the keystore you registered with Play, or let CapWrapp mint one.
Where do the signing keys live?
In CapWrapp’s server-side vault, never in your repositories or GitHub secrets. Each run fetches what it needs with a short-lived token, and the files disappear with the runner.
What about live updates (OTA)?
CapWrapp ships store builds today and doesn’t offer live updates yet. Keep your OTA provider for web-only changes.
Can people outside the dev team get access?
Yes, with organizations. Invite product owners, QA or clients by email as admins or members. Members can ship versions and edit listings; admins also manage settings and invites.
What does CapWrapp store?
Repository and app metadata, store listing drafts and screenshots, run history, and — in the vault — signing keys and build-time env. Store builds run on your own GitHub runners; commit previews host the built web files behind a link that expires.
How do people sign in?
With a Google or GitHub account. Screens that touch signing keys sit behind an extra 4-digit PIN.
How much does it cost?
You pay for active apps, not seats, and teammates and clients are free: Founder is $29 a month for up to 3 apps, Pro $99 for 10, Agency $249 for 50. Every plan starts with a 14-day free trial, no credit card needed. Rolling out many apps? Chat with the founder and plan the first ones together.
Put your Capacitor fleet on one desk.
Connect your first repos, vault the keys, and send your first TestFlight build from your own GitHub Actions.