Free tool · appId validator

Capacitor appId and bundle ID validator

Your Capacitor appId becomes the iOS bundle ID and the Android package name — and neither store lets you change it later. Paste an id like com.studio.myapp, or a whole capacitor.config.ts / .json, to check it against both stores’ rules, plus the build folder and live-URL settings.

  • Free, no signup
  • Runs in your browser
  • Nothing stored
  • Updated

Paste an appId or capacitor.config

A bare id like com.studio.myapp, or a whole capacitor.config.ts / .json for the webDir and server.url checks too.

Try:

The rules, in one place

An appId has to satisfy Apple, Android and the Capacitor CLI at the same time:

RuleWhy
At least two parts separated by dots (com.studio.myapp)Android requires two or more segments
Each part starts with a letterAndroid package names cannot start a segment with a digit
Letters and numbers onlyApple rejects underscores; Android and npx cap add reject hyphens
No Java keyword as a part (new, class, public…)Android generates Java code in that package, which then fails to compile
Not a starter id (io.ionic.starter, com.example.app)It is probably taken, and the id is permanent once registered

Sources: Apple’s CFBundleIdentifier reference and Android’s application ID rules.

appId vs appName

  • appId — com.studio.harbor. The machine id. Permanent once the store records exist.
  • appName — Harbor. The label under the icon. Home screens cut it at about 12 characters, and you can change it anytime.

The names on the App Store and Google Play listings are separate again — you set them in App Store Connect and Play Console.

webDir and server.url

  • webDir is the folder npm run build writes: dist for Vite, build for Create React App, out for a Next.js static export. Pointing it at src gives a blank app.
  • server.url makes the app load a live website instead of that folder. Handy for live reload while developing; in a store build it is the classic Guideline 4.2 “website in an app” pattern.

Next steps

Run the full project check with the Lovable, Bolt or Base44 checker, or open CapWrapp to ship it.

FAQ

Questions people ask before they ship

What is a Capacitor appId?

The reverse-DNS id in capacitor.config, such as com.studio.myapp. Capacitor uses it as the iOS bundle identifier and the Android applicationId, so it is how Apple and Google tell your app apart from every other app.

Can I use a hyphen in my appId?

No. Apple allows hyphens in bundle IDs, but Android package names and the Capacitor CLI do not, so npx cap add android fails. Drop the hyphen: com.mystudio.app.

Can I change the appId later?

Not for an app that already exists in App Store Connect or Play Console — both treat it as permanent, and changing it means a new store listing. Pick it before you create the store records.

Why is server.url a warning?

It makes the app load a live website instead of the build bundled inside it. That is the “website in an app” pattern Apple rejects under Guideline 4.2, and it breaks offline.

From checked to shipped

CapWrapp turns your GitHub repo into iPhone and Android apps, signs every build, and ships it to TestFlight and Google Play — no Mac, no Xcode.

  • Free to start
  • No credit card
  • Sign in with Google or GitHub