# Capacitor: Invalid App ID

> Getting the error “Capacitor: Invalid App ID”? Here is how to fix it. The appId has to be a legal Android package name. Hyphens are not allowed.

**Capacitor: Invalid App ID.** The appId also has to be a valid Android package name: letters and numbers, dots between parts, no hyphens.

- Web build. Capacitor rejected the appId.
- Interactive page: https://capwr.app/free-tools/build-error-explainer/invalid-app-id
- Build error explainer: https://capwr.app/free-tools/build-error-explainer
- Last updated: 2026-10-03

## What this error means

The appId also has to be a valid Android package name: letters and numbers, dots between parts, no hyphens.

## Why it happens

Capacitor checks the appId as an Android package name before it writes the native projects. Hyphens and other illegal characters fail that check.

## The message tools print

```
[error] Invalid App ID "com.my-studio.harbor". Must be in Java package form with no dashes (ex: com.example.app)
```

## How to fix it

1. Change appId in capacitor.config to something like com.studio.myapp.
2. Check it with the appId validator before you create store records — it’s permanent after that.

The [Capacitor appId and bundle ID validator](https://capwr.app/free-tools/capacitor-config-validator) checks the appId and webDir before you create store records.

## Check a log that shows this

Paste the failing step into the [build error explainer](https://capwr.app/free-tools/build-error-explainer). It matches this message, and any others in the same log, in your browser. Nothing is uploaded.

## Other Web build errors

- [npm ci needs an existing package-lock.json](https://capwr.app/free-tools/build-error-explainer/npm-ci-package-lock-json)
- [npm ci: lockfile is out of sync with package.json](https://capwr.app/free-tools/build-error-explainer/npm-ci-lockfile-out-of-sync)
- [npm ERESOLVE unable to resolve dependency tree](https://capwr.app/free-tools/build-error-explainer/npm-eresolve)
- [JavaScript heap out of memory](https://capwr.app/free-tools/build-error-explainer/javascript-heap-out-of-memory)
- [Rollup failed to resolve import](https://capwr.app/free-tools/build-error-explainer/rollup-failed-to-resolve-import)
- [error TS: TypeScript errors stop the build](https://capwr.app/free-tools/build-error-explainer/typescript-error-ts)
- [Could not find the web assets directory](https://capwr.app/free-tools/build-error-explainer/could-not-find-the-web-assets-directory)

## Build the web app before the native one

CapWrapp installs dependencies from the lockfile, builds the site, and runs Capacitor sync before the native build, from the GitHub repo you connect.

[Get started free](https://capwr.app/login).

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