Cloud build service · HTML → APK/AAB

Ship your web app to Google Play in minutes

Upload your ZIP — HTML, CSS & JS and all — and download a production-ready APK or AAB. No Android Studio, no native code. Works with any framework or game engine.

  • No Android Studio
  • Signed APK & AAB
  • Free tier — no credit card
html2app · new build
📦 Drop your app ZIP here HTML · CSS · JS — any framework or engine
Start building free Free tier · no credit card · build in minutes

Supported Technologies & Frameworks

Works with any HTML5 project

HTML5
Vanilla JS
Phaser.js
React
Vue
Pixi.js
Angular
Ionic
Onsen UI
Svelte
Three.js
HOW IT WORKS

From HTML to a Real Native App

Three simple steps. Drop in your web project, configure it, and download a store-ready app — no Android Studio, no Xcode, no native code.

01

Upload Your Files

Drop in your ZIP — HTML, CSS, JS and assets. Any framework, any engine.

📦 my-app.zip
index.html style.css game.js assets/
02

Configure & Build

Set your app name, icon and orientation, then build. We wrap it in a real native shell.

Unzipping project… Injecting native wrapper… Signing package… Packaging app.aab…
buildrelease · .aab
03

Ship to the Store

Download a signed APK or AAB, ready to publish to Google Play. iOS coming soon.

Installed ✓
Your finished app on a phone
Google Play Apple App Store (coming soon)
FEATURES

Core Features

Everything you need to ship a commercial-grade mobile app.

Appearance Controls

Easily customize orientation, status bar colors, and fullscreen mode. Perfect your app's look with simple configuration options.

Embedded HTML & Offline Ready

Your entire app is embedded in the binary. No network required. Launches instantly, works offline by default.

One-Click Plugins

Access native features like AdMob monetization, vibration feedback, persistent storage, and in-app browser. More plugins coming soon.

Store-Ready Builds

Export signed and unsigned APKs plus Android App Bundles (.aab) — ready to install or publish straight to Google Play.

Type-Safe Bridge API

A clean JavaScript bridge with full TypeScript definitions — autocomplete, inline docs, and compile-time safety out of the box.

Simple, Transparent Pricing

Honest, predictable pricing with a generous free tier. Pay only for what you need, cancel anytime — no lock-in.

Less than your daily coffee

A Professional Mobile Presence for the Price of a Coffee

Build unlimited apps and games and ship them straight to the Google Play Store — all for just $3/month. No Android Studio, no surprises.

A polished mobile home screen filled with apps and games built using html2app

Unlimited Apps

Build as many apps as you want — no per-app fees.

Play Store Ready

Signed .aab bundles, ready to publish to Google Play.

Instant Cloud Builds

Upload your ZIP and get a real binary in minutes.

No Lock-In

Cancel anytime. Your code stays 100% yours.

Apps & Games

Phaser, Three.js, Pixi.js, React — anything HTML5.

Store-Grade Output

Production APK & AAB, signed and release-ready.

$3 /month
billed yearly · free tier available
Start Building Free
JS BRIDGE API

Talk to the Device in Plain JavaScript

One clean, type-safe API sits between your web code and the native platform. Pick a capability, hit Run, and watch the bridge fire.

vibration.js
import { Vibration } from '@yandeu/js-bridge/lib/plugins/vibration.js'

// Buzz once (500ms)
Vibration.vibrate()

// Custom pattern: [wait, buzz, wait, buzz]
await Vibration.vibrateWithPattern([0, 500, 100, 500])
9:41
Buzzing…
ads.js
import { Ads } from '@yandeu/js-bridge/lib/plugins/ads.js'

// Point at your rewarded ad unit
Ads.rewarded.setAdUnitId('ca-app-pub-XXXX/WWWW')

const loaded = await Ads.rewarded.load()
if (loaded) await Ads.rewarded.show()
9:41
SCORE 1280🪙 120
Game running…
Rewarded Ad ✓ Reward earned · +50 🪙
device.js
import { WebView } from '@yandeu/js-bridge'

// Read live device + package details
const device = await WebView.deviceInfo()
const pkg = await WebView.packageInfo()

console.log(device.data.android?.model, pkg.data.version)
9:41
modelPixel 8 osAndroid 14 appIdcom.example.app version1.0.0 (1)
storage.js
import { WebView } from '@yandeu/js-bridge'

// Save data that survives app restarts
await WebView.persistentStorage.setItem('token', 'abc123xyz')

// Read it back later
const token = await WebView.persistentStorage.getItem('token')
9:41
persistentStorage
  • theme"dark"
  • level7
  • token"abc123xyz"
Saved ✓
PRICING

Simple, Transparent Pricing

Early access pricing during Public Beta.

~17%

Free

$0 /mo

Forever free

  • 5 builds / Day
  • 10 MB Size Limit
  • 2 Projects
  • Signed & Unsigned APK (.apk)
  • Core Plugins + Vibration
  • Watermark Included Info
Start for Free

Developer

$19 /mo

Billed monthly

  • 50 Builds / Day
  • 200 MB Size Limit
  • Unlimited Apps
  • All Android Builds
  • All Plugins Access
  • Watermark Removed
Get Developer

* All prices are exclusive of VAT

70% OFF

Developer Plan: Just $57/year

While we expand our list of plugins, lock in the Developer plan for just $57 per year (normally $192/year). Apply the coupon code during checkout.

USD Coupon USD57
EUR Coupon EUR57

Apply at checkout on app.html2app.dev/subscriptions for yearly subscriptions.

ABOUT HTML2APP

The Story Behind
html2app

html2app started as a love letter to a tool I lost — and a mission to make shipping HTML5 games to mobile feel effortless again. Here's how it came to be.

  1. 2016

    The spark

    I started learning JavaScript, following countless Phaser.js tutorials and building little games for fun. Along the way I discovered Intel XDK, PhoneGap Build, and Cocoon.io — services for wrapping HTML5 games into native apps.

  2. The magic

    Cocoon.io just worked

    Cocoon.io was my favorite. ZIP your game, tweak a few settings, hit build — and suddenly your creation was running on your phone. No Xcode. No Android Studio. Just pure, effortless game development.

  3. 2019

    The magic disappears

    When Ludei shut down the service, it felt like losing a good friend. Shipping an HTML5 game now meant wrestling with Capacitor configs, hunting for compatible plugins, and — for iOS — buying a Mac.

  4. 2022

    Bringing it back

    I built html2app to bring that feeling back — a tribute to the golden era when building with Phaser and shipping to mobile felt genuinely fun. From May 2022 through 2025 it was completely free, built on Capacitor.

  5. 2025

    A new foundation

    As demand grew, the platform evolved to Flutter and infrastructure costs grew with it. Basic features now start at $3/month to keep builds fast and reliable for everyone.

  6. Today

    The Developer experience

    The Developer Plan ($19/month) isn't an upgrade to the old platform — it's a different experience, with a full plugin ecosystem and advanced capabilities the old service never had. During beta you can lock in Developer for just $57/year — a 70% discount.

If you share those nostalgic feelings about the Phaser + Cocoon.io days, welcome home. Let's make shipping HTML5 games to mobile fun again.

html2app is still in beta, and there's much more to come. I'd love for you to join me on this journey as we work together to make building and publishing HTML5 games (and apps!) pleasant again.

Join the journey

Occasional updates on new plugins, features, and the road ahead. No spam — unsubscribe anytime.

Subscribe to the newsletter
Yannick Deubel
Yannick (@yandeu) Creator of html2app · Software Developer @yandeu on GitHub →
NO LOCK-IN

You Own Your App. For Good.

Most HTML-to-app services quietly hold your signing key and app ID hostage. The day you want to leave, you can't — you'd have to publish a brand-new app and abandon every review, rating, and install you earned. html2app is built the opposite way.

You bring your own signing key and choose your own app ID, so your app's identity is yours from the very first build. Outgrow us? Move to a custom Capacitor, Flutter, or native Kotlin/Java setup and keep shipping updates to the exact same Google Play listing. Your app outlives html2app.

One Google Play listing — your reviews, ratings & installs never reset
  1. html2app You're here
  2. Capacitor Switch anytime
  3. Flutter Switch anytime
  4. Native Kotlin / Java Switch anytime
Your signing key and app ID travel with you — every step of the way

Your Signing Keys

Bring your own keystore. We never hold your app's identity, so you can sign and ship builds yourself — with or without us.

Your App ID

You pick the package name. It's the master key to your store listing — today, and ten years from now.

A Real Exit Path

Move to Capacitor, Flutter, or fully native whenever you like and keep updating the same listing. No new app, no lost reviews, no migration tax.

It Outlives Us

If html2app disappeared tomorrow, your published app keeps running and updating. You rely on us for convenience — never for survival.

You stay because html2app is the easiest way to ship — never because you're trapped.

ROADMAP & TRANSPARENCY

What's Coming Next

No vapourware. Here's exactly what's live today, what we're building right now, and what's further out — so you always know where we're investing.

You buy what exists today

Subscribing gets you the features that are live right now, as they are — stable, working builds today, not promises about tomorrow.

Live now

Shipping today

  • Signed APK & AAB output
  • Cloud build service — no Android Studio
  • Core plugins: AdMob, Vibration, Storage, Device Info
  • Embedded, offline-ready apps
Building now

More native plugins

The native plugin ecosystem is growing fast. On the way:

  • In-App Purchases
  • Game Services
  • Social Sharing
  • Local Notifications
On the horizon

iOS support

  • Build iOS apps from the same HTML5 project

It needs dedicated Apple hardware and signing, so we're treating it as a serious long-term goal — not an empty promise.

Platform stability is always priority #1. Reliable builds and compatibility with the latest Android and Flutter releases come before any new feature.

About "Coming Soon": these features are in active development, aren't included in your current subscription, and don't come with delivery dates. The mobile ecosystem moves fast — if something breaks upstream, we'll do our best to fix it and always be upfront about what's working and what's not.