LOCAL-FIRST APK PACKAGER
A URL in.
An Android app out.
Package a website you have the right to use as a signed APK — assembled in this browser tab. No account, no build queue, no Chrome.
01 / BUILDER
Make the package.
Everything below runs in your tab. The only third-party network request is the optional favicon lookup, and it goes only to the site you name.
PREVIEW
Example
com.example
- Output
- Signed APK
- Signing
- Local · RSA-2048
- Engine
- WebView shell
- Key storage
- Non-exportable IndexedDB key
02 / HOW IT WORKS
Three steps. Nothing leaves the tab.
The APK is assembled from a prebuilt Kotlin shell, your identity fields, and a key generated on this device.
-
01
Name the site.
Paste an HTTPS URL. The name, icon and package identity are yours to change; the package is the reversed host, derived locally.
-
02
Keep the key.
A signing key is generated in this browser. Export the encrypted backup once — it is the only way to update the app later.
-
03
Sign and install.
The APK is assembled and signed locally, then downloaded. Sideload it after allowing installs from your browser or file manager.
03 / WHAT IT IS
A real app, not a bookmark.
- A launcher icon, app-drawer entry and its own window.
- File uploads, downloads, camera, microphone and geolocation.
- Fullscreen video, external links and back navigation.
- A small APK with no background service and no telemetry.
- Your key, your signature, your copy of the source.
04 / WHAT IT ISN'T
Not a browser.
- Google sign-in will fail. Google blocks OAuth in embedded WebViews.
- No Web Push, browser extensions or Firefox profile.
- No App Links or domain capture: links to the site still open in your default browser.
- No offline copy, no DRM L1, and passkeys may not work.
- Some sites block WebView user agents. This is a wrapper, not a site compatibility layer.
05 / PRIVACY
Your key stays here.
There is no account and no server-side build. The only server endpoint is the optional favicon lookup.
No uploads
The URL, icon and name are used in this tab. The APK is assembled in memory and downloaded directly.
Key in IndexedDB
The private key is imported as a non-exportable WebCrypto key. An encrypted backup file is the only copy you can move.
One network call
Fetch favicon sends the site URL to this worker, which requests the site's icon. Skip the button and nothing leaves the tab.
No analytics
No accounts, no telemetry, no third-party scripts. The source is Apache-2.0 and self-hostable.
06 / QUESTIONS
Before you install.
Why not PWABuilder or Bubblewrap?
Those produce Trusted Web Activities, which need Chrome and Digital Asset Links, and the hosted versions run a cloud build. This uses Android System WebView and does the work in the browser.
Do I need Chrome installed?
No. The generated app uses Android System WebView, which is normally a separate system package from the Chrome browser.
Can I update an installed app?
Yes — with the same signing key and a higher version code. Keep the encrypted key backup. A different key means uninstalling first, which also removes app data.
What happens if I lose the key?
You cannot update an installed app. You would have to uninstall it and lose its data. The backup file is deliberately the only portable copy.
Is this on Google Play?
No. These are personal sideloaded builds. Android will warn about unknown apps, Play Protect may flag them, and developer verification rules vary by region.
Does the APK work offline?
No. It is a WebView wrapper around the live URL. If the site is offline or unreachable, the app shows a local error page.