Web app in. Native Android app out. Minimal ceremony.
Deploid is a CLI for turning an existing web app into an Android app without making Android tooling your new hobby. It handles the repetitive parts around Capacitor, Gradle, assets, devices, signing, releases, and the Android toolchain while keeping the everyday workflow deliberately small.
npm install -g @deploid/cli
cd my-web-app
deploid init
deploid rundeploid init prepares the project. deploid run builds it, packages it, installs the debug APK on your device, and launches it.
When it is time to release:
deploid release init
deploid ship --patch --from-gitThat is the product: simple commands for the common path, with lower-level commands and explicit overrides when you actually need them.
A web-to-Android build crosses several toolchains that are perfectly capable of failing independently. Deploid tries to make that somebody else's problem.
It can:
- detect Vite, Next.js static export, and Create React App projects
- generate and maintain the Android/Capacitor project
- run the web build and synchronize it into Capacitor
- generate Android app assets from a source logo
- resolve Java, the Android SDK,
adb,sdkmanager, and the project Gradle wrapper - validate Android build requirements before Gradle produces a wall of archaeology
- build debug APKs and signed release AABs
- discover connected Android devices and install/launch builds
- manage versions, changelogs, signing setup, CI scaffolding, and publishing workflows
- expose lower-level commands and toolchain overrides for advanced use
Deploid does not install random global tooling or rewrite your shell configuration behind your back. Resolution and remediation are intentionally project/process scoped where possible.
deploid initDeploid detects the package manager and framework, generates deploid.config.ts, installs the required Capacitor dependencies, and creates the basic Android packaging configuration.
If framework detection is uncertain, Deploid asks instead of silently pretending the project is Vite. In non-interactive mode, specify it explicitly:
deploid init --yes --framework vite --app-name "My App" --app-id "com.example.myapp"deploid runrun is the development fast path. It packages the current web app, builds the debug APK, selects the connected device when there is exactly one, installs the app, and launches it.
With multiple devices connected, choose one explicitly:
deploid run --device <serial>List devices with:
deploid devicesdeploid buildbuild is self-contained: it runs the packaging/sync work it needs before invoking Gradle. It produces a debug APK and, when signing is configured, a signed release AAB.
You do not need to remember to run deploid package first.
First-time signing setup:
deploid release initThen:
deploid ship --patch --from-gitThe release workflow can coordinate versioning, Android builds, changelog generation, and configured publishing targets. Release credentials should come from environment/CI secrets rather than being committed to the repository.
Deploid does not require a perfectly curated set of global environment variables before it can understand your machine.
For Android work it resolves tooling from, in order of intent, explicit Deploid overrides, Deploid-specific environment/configuration, standard Android/Java environment variables, project metadata such as android/local.properties, Android Studio installations, known OS locations, and PATH where appropriate.
The important bits:
- Java 17+ is supported. Java 21 is the preferred controlled/CI environment, not a hard minimum.
ANDROID_HOMEis not mandatory when Deploid can resolve the SDK another way.- Gradle comes from the project wrapper (
gradlew/gradlew.bat), not an arbitrary global Gradle installation. - Windows-specific SDK, wrapper, and
PATHEXTresolution is covered by targeted CI.
When you need to override discovery for one invocation:
deploid doctor --java-home /path/to/jdk --android-sdk /path/to/sdk
deploid run --java-home /path/to/jdk --android-sdk /path/to/sdkThe same scoped overrides are available on Android package and build commands. They affect that Deploid process only.
When Android decides today is a good day for interpretive error messages:
deploid doctorDoctor inspects project setup and Android toolchain/readiness, including Java, SDK discovery, Capacitor, the Gradle wrapper, ADB, signing, and release state. It reports blockers, warnings, capabilities, and useful next actions.
Deploid Doctor
Project: /home/user/my-web-app
Status: ACTION NEEDED
Workflow readiness:
PASS Project setup
PASS Android build
WARN Release readiness
PASS Device deploy
Safe project-local remediation is available with:
deploid doctor --fixDeploid will not silently accept Android SDK licenses for you or mutate global shell/system configuration. When a global or legal/user-consent step is required, Doctor tells you what to run instead.
| Project | Detection | Default output |
|---|---|---|
| Vite (React, Vue, Svelte, etc.) | Automatic | dist/ |
| Next.js static export | Automatic | out/ |
| Create React App | Automatic | build/ |
| Static files | Explicit (--framework static) |
public/ |
Deploid's supported native packaging path is currently Android via Capacitor. Older references to Tauri/TWA packaging should not be treated as supported product paths.
- Node.js 18+
- Java 17+ for Android builds
- an Android SDK
- an Android device/emulator for
deploid run/deploy
Android Studio is a convenient way to obtain the SDK and related tools, but Deploid itself is a CLI and does not require you to use Android Studio as your development environment.
Run deploid doctor if you are unsure what Deploid can resolve on the current machine.
The beginner surface is intentionally small:
| Command | Purpose |
|---|---|
deploid init |
Prepare a web project for Deploid/Android |
deploid run |
Build a debug APK, install it, and launch it |
deploid build |
Package/sync and compile Android artifacts |
deploid ship |
Run the release workflow |
deploid doctor |
Diagnose project and toolchain readiness |
More focused commands are available when you want control over an individual stage:
Run deploid --help or a command's --help for the complete advanced surface.
Deploid can generate a GitHub Actions release workflow:
deploid ci init githubFor automation and agents, prefer explicit/non-interactive inputs rather than relying on prompts:
deploid init --yes --framework vite --app-name "My App" --app-id "com.example.myapp"The repository's own CI validates the supported Node range on Linux and keeps targeted Windows coverage for path-sensitive Android toolchain resolution. Cross-platform testing exists to protect the CLI, not because Deploid secretly wants to become a desktop application again.
Most projects should start with the generated deploid.config.ts and change it only when needed. Advanced users can work directly with individual pipeline stages, select devices, control signing/release behavior, or override Android toolchain locations for a single command.
Deploid is designed around one rule: simple by default, explicit when requested. The lower-level surface is there so automation, CI, and unusual Android setups do not have to fight the convenient defaults.
Deploid also exposes its core workflows for integrations that should not have to scrape terminal output:
import { runDoctorCommand, runPluginCommand, inspectArtifacts } from '@deploid/cli';
await runDoctorCommand({
cwd: '/path/to/project',
doctorOptions: { json: true, summary: true }
});
await runPluginCommand('build-android', { cwd: '/path/to/project' });
const artifacts = inspectArtifacts('/path/to/project');deploid daemon provides a local HTTP integration surface for language-agnostic tooling.
Internally, Deploid uses a plugin pipeline for assets, packaging, Android builds, deployment, publishing, and other stages. The built-in plugins ship with @deploid/cli, so normal users install one package rather than assembling the tool themselves.
Custom plugin development remains available for specialized workflows:
deploid plugin init my-custom-stepSee Plugin Development for the contract.
- Getting Started
- Configuration Reference
- CLI Reference
- Android Troubleshooting
- Plugin Development
- Programmatic API
- Examples
- Contributing
Some deeper documentation still predates the current CLI-first workflow. The README is the current high-level product guide while those pages are being consolidated.
MIT © MadsenDev
