Sign & publish

Updating an HTML app after release

The three things that must stay the same, the one that must go up, and what happens to the user's saved data. Plus a versioning scheme that never needs thinking about again.

6 min read Updated September 2026

An update installs over the existing app — and keeps its data — when three things match the previous build (package name, signing key, and the app being the same app) and one thing is higher: the version code. Change the package name or the key and Android sees a different app, which installs alongside the old one with empty storage; reuse a version code and Play refuses the upload while a phone refuses the install. Everything else about updating an HTML app is just rebuilding with new files.

The four identifiers

What it isRuleExample
Package nameThe app's identity to Android and PlayNever changescom.janedoe.recipes
Signing keyProves updates come from youNever changesthe .jks file
versionCodeAn integer Android comparesStrictly higher every release1, 2, 3 … or 20260921
versionNameThe string users seeAnything; convention is semver1.0, 1.1, 2.0

What happens on update

Android replaces the app's code and assets — your new HTML — and leaves the app's data directory alone. localStorage, IndexedDB, cookies and files the app wrote all survive. So a user's saved notes, high scores or settings carry across, without you doing anything. Two consequences worth designing for:

A versioning scheme that runs itself

For versionCode, use the date: 20260921 for 21 September 2026, or 2026092101 if you might ship twice in a day. It is always higher than the last one, it tells you when a build was made, and it never needs a lookup. For versionName, use major.minor: bump minor for changes, major for a redesign. The builder tracks the version code for you and refuses a lower one; the scheme just makes the number meaningful.

Sideloaded versus Play

Sideloaded (APK by link): the user downloads the new file and installs it over the old one. No automatic updates, so tell people — a note in the app that checks a version number in a small JSON on your site is a common, cheap pattern. Google Play: upload the new AAB with the higher version code, add release notes, roll out. Phones update automatically within a day or so. Play also enforces that the signing key matches; with Play App Signing, that is the upload key you registered.

When you cannot update

Questions people ask

Will users lose their saved data when I update?

No, as long as the package name and signing key are unchanged. Android keeps the app's data directory across updates.

What if I upload the same version code twice?

Play refuses the upload and an installed phone refuses the APK. Increase the version code — the builder does this automatically.

Can I change the app's name?

The display name, yes, any time. The package name, no — that would make it a different app.

Do I have to keep every old APK?

No, but keep the keystore and its password forever, and keep a note of the version code you last shipped.

How do sideloaded users find out about an update?

They do not, unless you tell them. A version check against a small JSON file on your site, shown as a banner in the app, is the usual approach.

Read next

Your HTML, installed on a phone today

Upload the file or ZIP, pick a name and an icon, and download a signed Android APK in minutes. Free to start — no Android Studio, no code changes, no card.

Convert HTML to APK — free