# Capacitor appId and bundle ID validator

> Check a Capacitor appId against Apple and Android rules at once: hyphens, underscores, reserved words, starter placeholders, plus webDir and server.url. Free.

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.

- Tool: appId validator. Input: Paste an appId or capacitor.config. Free, no signup. Runs entirely in the browser; nothing is uploaded.
- Interactive version: https://capwr.app/free-tools/capacitor-config-validator
- All free tools: https://capwr.app/free-tools
- Last updated: 2026-10-14

## The rules, in one place

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

| Rule | Why |
| --- | --- |
| At least two parts separated by dots (`com.studio.myapp`) | Android requires two or more segments |
| Each part starts with a letter | Android package names cannot start a segment with a digit |
| Letters and numbers only | Apple 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](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleidentifier) reference and Android’s [application ID](https://developer.android.com/build/configure-app-module) 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](https://capwr.app/free-tools/lovable-capacitor-checker), [Bolt](https://capwr.app/free-tools/bolt-capacitor-checker) or [Base44](https://capwr.app/free-tools/base44-capacitor-checker) checker, or [open CapWrapp](https://capwr.app/login) to ship it.

## FAQ

### 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.

## Related free tools

- [Is your Lovable app ready for the App Store?](https://capwr.app/free-tools/lovable-capacitor-checker) — Paste package.json. See what is set up, what is missing, and get a prompt to paste back into Lovable.
- [Is your Bolt app ready for the App Store?](https://capwr.app/free-tools/bolt-capacitor-checker) — Same checks as the Lovable checker, tuned for Bolt’s Vite projects and Next.js templates.
- [Is your Base44 app ready for the App Store?](https://capwr.app/free-tools/base44-capacitor-checker) — Check a Base44 export: the frontend Capacitor wraps, the backend that stays hosted, and common setup mistakes.
- [Can this GitHub repo become an iPhone and Android app?](https://capwr.app/free-tools/github-repo-checker) — Paste a public repo URL. The same checks as the builder checkers, read straight from GitHub.
- [Do you need a Mac to publish an iPhone app?](https://capwr.app/free-tools/do-i-need-a-mac) — Three questions. What you need for TestFlight and Google Play — accounts, costs, and whether a Mac is one of them.
- [Will Apple reject your app as just a website?](https://capwr.app/free-tools/apple-guideline-4-2) — Six questions on Apple’s Minimum Functionality rule — the usual reason wrapped web apps get rejected.
- [Why was my app rejected by Apple or Google Play?](https://capwr.app/free-tools/app-store-rejection-explainer) — Paste the rejection. Get the guideline in plain English, the fix, a reply for App Review, and a prompt for Lovable or Cursor.
- [App icon generator for iPhone and Android](https://capwr.app/free-tools/app-icon-generator) — Drop a logo or type an emoji. Get the iOS 1024 icon, Android adaptive and round icons, and both store icons — in Capacitor’s folders.
- [Why did my iOS or Android build fail?](https://capwr.app/free-tools/build-error-explainer) — Paste a failed build or upload log. Get the known error, what it means, and how to fix it — signing, versions, Gradle, uploads.
- [App Store and Google Play screenshot sizes](https://capwr.app/free-tools/app-store-screenshot-sizes) — Drop screenshots, see which store slots they fit, and export the missing sizes as PNGs both stores accept.
- [Google Play 12 testers, 14 days: when can you publish?](https://capwr.app/free-tools/google-play-12-testers) — Enter your testers and the day the 12th joined. Get the date you can apply for production, a reminder, and draft answers.

## About CapWrapp

CapWrapp turns a web app on GitHub — built with Lovable, Bolt, Base44, Cursor or by hand — into iPhone and Android apps. It adds Capacitor if the repo needs it, signs the builds, and ships them to TestFlight and Google Play from GitHub Actions, with no Mac or Xcode on your side. [Get started free](https://capwr.app/login) · [Lovable to App Store guide](https://capwr.app/guides/lovable-to-app-store)
