v150 · PWA · Installation
PWA origin migration
Chrome 150 lets installed PWAs migrate to a new same-site origin without losing their install entry. The destination manifest declares the predecessor with migrate_from, and the old origin confirms the handoff with allow_migration in its well-known association file.
concepts
-
Migration Demo
Inspects the current install context and explains which manifest and well-known fields Chrome uses when an installed PWA declares an origin migration.
-
Manifest Configuration
Reference for the manifest fields that enable origin migration:
id,migrate_from, optionalmigrate_to, and the old origin'sallow_migrationconfirmation. -
Manifest Builder
Fill in your new and old origins to generate the destination
manifest.jsonwithmigrate_from, the old origin's/.well-known/web-app-origin-association, and an optional old-manifestmigrate_tohint. -
Verification Checker
Enter old and new origins and click "Run verification checklist" to walk through the Chrome 150 checks: HTTPS, same-site boundaries, destination
id,migrate_from,allow_migration, behavior choice, and old-origin reachability. -
Install State Simulator
Four-phase walkthrough of a complete origin migration from the user's perspective: pre-migration install, developer deploy, Chrome's verification and user-visible migration step, and post-migration state. Each phase lists actor-tagged steps (Chrome / User / Server) and a data survival table showing what persists after migration.
-
Data Persistence Guide
Chrome 150 preserves the install shortcut — but what about stored data? A comprehensive table covering 12 storage types (IndexedDB, localStorage, cookies, Cache API, push subscriptions, OPFS, WebAuthn passkeys, device permissions) with "auto-preserved", "requires action", or "lost / re-request" status for each. Includes a step-by-step IndexedDB migration code pattern for the most complex case.
why it shipped
Organisations move PWAs between same-site origins as products are restructured, for example from www.example.com/social to social.example.com. Previously, any origin change meant a new install path. Chrome 150 introduces a secure handshake: the new origin points back to the old app, the old origin authorizes the handoff, and Chrome can migrate the existing install after user-visible review or a forced migration flow.
the change
// New origin's manifest.json — declares the installed predecessor
{
"name": "My App",
"short_name": "MyApp",
"id": "https://app.example.com/app/",
"start_url": "/app/",
"scope": "/app/",
"migrate_from": [
{
"id": "https://www.example.com/app/",
"behavior": "suggest"
}
]
}
// Old origin confirms the migration:
// https://www.example.com/.well-known/web-app-origin-association
{
"https://app.example.com/app/": {
"allow_migration": true
}
}
references
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗