Ship app releases from your terminal
searvia is an open-source command-line tool, written in TypeScript, for App Store and Google Play releases. It keeps your store listings in plain files next to your code, checks them before you publish and sends the whole release to review with one command.
npx searvia --helpNeeds Node.js 20 or newer. No account is required; it uses your own App Store Connect API key and Google Play service account.
View the Repository on GitHubWhat It Does
Pull and Push Store Listings
Download the name, subtitle, keywords, descriptions and release notes of every language from both stores into folders compatible with fastlane, edit them in your editor and push them back.
Offline ASO Audit
Checks every language without a network call: the 100-byte keyword field, repeated words already in the name and subtitle, character limits and empty fields.
Screenshot Upload
Uploads screenshots and app previews per language and device, checks Apple’s and Google’s exact pixel sizes first and keeps their order.
Build Upload
Uploads the Android App Bundle to a Play track and the iOS build to App Store Connect, then waits until it is processed.
One-Command Release to Review
Creates the App Store version, attaches the build, answers export compliance and submits it, or promotes a Play release with a staged rollout.
Optional Searvia Connection
With a Searvia API key it adds keyword ranks, popularity and AI metadata suggestions to the audit, through the same API and MCP tools as the Searvia app.
Commands
npx searvia init # detects fastlane folders and keys
npx searvia pull # store text → ./fastlane/metadata
npx searvia audit # offline ASO checks, no keys needed
npx searvia push # shows the changes; add --yes to apply
npx searvia screenshots upload --yes
npx searvia build upload --ipa App.ipa --yes
npx searvia release --platform ios --ipa App.ipa --yesEvery command that writes to a store shows the changes first and applies them only with --yes. Run npx searvia <command> --help for all options.
Files You Already Know
fastlane/metadata/
en-US/
name.txt
subtitle.txt
keywords.txt
description.txt
release_notes.txt
android/en-US/
title.txt
short_description.txt
full_description.txt
changelogs/default.txtUse It in CI
Keys come from environment variables, so the same commands run in GitHub Actions, GitLab CI or Bitrise. A failed audit stops the pipeline before anything reaches the store.
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npx searvia audit
- run: npx searvia push
env:
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
ASC_PRIVATE_KEY: ${{ secrets.ASC_PRIVATE_KEY }}
PLAY_SERVICE_ACCOUNT: ${{ secrets.PLAY_SERVICE_ACCOUNT }}
SEARVIA_API_KEY: ${{ secrets.SEARVIA_API_KEY }} # optionalPrefer a screen?
The same release flow is available in the Searvia app: a live checklist for both stores, screenshot uploads, build selection and submission for review, with notifications when Apple’s review status changes.