Capacitor copies capacitor.config.json into each native platform. During development you usually want the dev server URL injected so the native apps talk to Vite. This Vite plugin keeps those files in sync with the dev server lifecycle: when the server starts the URL is written, when it stops the files are restored.
Install
npm install @capgo/vite-capacitor --save-dev
Usage
Add the plugin to vite.config.ts:
import { defineConfig } from "vite"; import viteCapacitor from "@capgo/vite-capacitor"; export default defineConfig({ plugins: [ viteCapacitor({ platforms: ["ios", "android"], }), ], });
Start Vite as usual:
npm run dev
The plugin will:
- detect the dev server URL once Vite is listening (respecting HTTPS and custom host/port),
- write the URL and
cleartextflag to the native copies atios/App/App/capacitor.config.jsonandandroid/app/src/main/assets/capacitor.config.json(if they exist), - skip untouched files that are missing or unchanged,
- restore the original files when Vite shuts down or the process exits.
For physical iOS or Android devices, expose Vite on the network and opt into a LAN URL:
viteCapacitor({ platforms: ["ios", "android"], cleartext: true, networkUrl: true, });
npm run dev -- --host 0.0.0.0
When networkUrl is enabled and Vite listens on 0.0.0.0, ::, or server.host === true, the plugin writes http://<local-lan-ip>:<port> instead of localhost. To choose a specific interface, set CAP_SERVER_HOST or pass networkUrl: { host: "192.168.1.23" }.
Options
viteCapacitor({ root?: string; // defaults to Vite's resolved root platforms?: Array<"ios" | "android">; // defaults to both iosConfigPath?: string; // default: 'ios/App/App/capacitor.config.json' androidConfigPath?: string; // default: 'android/app/src/main/assets/capacitor.config.json' additionalConfigPaths?: string[]; // extra files to keep in sync cleartext?: boolean; // defaults to true logLevel?: "silent" | "info" | "debug"; urlOverride?: string | ((context) => string); // force a specific URL instead of auto-detecting networkUrl?: boolean | { host?: string }; // use a LAN host for wildcard Vite hosts });
The shared capacitor.config.json at the project root is never touched. Only files that already exist on disk are modified. If you customise Capacitor's output paths you can point the plugin at your copies via additionalConfigPaths.
Built with ❤️ by the Capgo team. Need help? Let’s talk.
