
Turn your Vibe Coding ideas into runnable Android Apps instantly.
Demo2APK is a one-click packaging tool built for Vibe Coding users. Whether you have a brilliant demo or a complete project generated by AI (Gemini, ChatGPT, DeepSeek, etc.), just upload your files, and we'll generate an installable APK for you immediately. No complex Android development environment setup required—keep your creativity at your fingertips.
Please don't accept APK files from others, as they may contain security risks!
We provide a free public instance for everyone:
Hope this helps! If you find it useful, please ⭐ star this repo!
.html, .js, .jsx, .ts, .tsx (auto-detects React components).Important: If your React/Vite APK shows a white/blank screen, you need to add the legacy plugin for Android WebView compatibility.
npm install -D @vitejs/plugin-legacy terser
// vite.config.js
import legacy from '@vitejs/plugin-legacy'
export default defineConfig({
plugins: [
react(),
legacy({ targets: ['chrome >= 52', 'android >= 5'] })
],
base: './' // Required for APK!
})
📖 Full Guide: React Project Requirements - Detailed troubleshooting for blank screen issues.
Deploy to your Linux server in 3 minutes using pre-built Docker images.
⚠️ Docker images only support linux/amd64. For macOS, use Local Development.
# 1. Create deployment directory
mkdir -p ~/demo2apk && cd ~/demo2apk
# 2. Download deployment config
curl -O https://raw.githubusercontent.com/DeadWaveWave/demo2apk/main/docker-compose.deploy.yml
# 3. Start services
docker compose -f docker-compose.deploy.yml up -d
Visit http://127.0.0.1:5173 to use the Web UI.
Update to latest version:
docker compose -f docker-compose.deploy.yml pull && docker compose -f docker-compose.deploy.yml up -d
For macOS users or local development:
# 1. Install dependencies
pnpm install
# 2. Start Redis
docker run -d -p 6379:6379 redis:alpine
# 3. Build project
pnpm build
# 4. Start all services (in separate terminals)
pnpm dev # API Server (port 3000)
pnpm worker # Build Worker
pnpm frontend # Web UI (port 5173)
Visit http://localhost:5173 to use the Web UI.
If you prefer CLI or script integration, use our REST API.
Single HTML File:
curl -X POST http://localhost:3000/api/build/html \
-F "file=@test-demo.html" \
-F "appName=TestDemo"
React Project:
# Zip your project first
zip -r test-react-app.zip test-react-app/
# Upload and build (Auto-detects project type)
curl -X POST http://localhost:3000/api/build/zip \
-F "file=@test-react-app.zip" \
-F "appName=TestReactApp"
Paste Code:
# Upload raw code (HTML/JS/React)
curl -X POST http://localhost:3000/api/build/code \
-F "code=<export default function App() { return <h1>Hello</h1> }" \
-F "appName=MyReactApp"
See API Documentation for details.
To ensure fair usage, rate limiting is enabled by default:
Set in .env:
# Disable rate limiting (dev/test only)
RATE_LIMIT_ENABLED=false
# Custom limit (default 5)
RATE_LIMIT_MAX=10
To save storage and protect user data:
Configure via environment variable:
# Retention period (hours)
FILE_RETENTION_HOURS=2
# Whether to delete Cordova/Capacitor work dirs after each build
CLEANUP_BUILD_ARTIFACTS=true
# Worker-side cleanup of old APKs/builds (in BUILDS_DIR)
FILE_CLEANUP_ENABLED=true
FILE_CLEANUP_INTERVAL_MINUTES=30
Control how many builds run simultaneously. Excess builds will be queued automatically.
# Number of concurrent builds (default 2)
WORKER_CONCURRENCY=2
See CHANGELOG.md for release history.
Made with ❤️ for Vibe Coding
$ claude mcp add demo2apk \
-- python -m otcore.mcp_server <graph>