<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>doyled-it · words</title>
  <subtitle>Writing from doyled-it.com</subtitle>
  <link href="https://doyled-it.com/feed.xml" rel="self"/>
  <link href="https://doyled-it.com/"/>
  <updated>2026-06-08T00:00:00Z</updated>
  <id>https://doyled-it.com/</id>
  <author>
    <name>Michael Doyle</name>
    <email>michael@doyled-it.com</email>
  </author>
    <entry>
      <title>From Google to Graphene</title>
      <link href="https://doyled-it.com/words/grapheneos-degoogle/"/>
      <updated>2026-06-08T00:00:00Z</updated>
      <id>https://doyled-it.com/words/grapheneos-degoogle/</id>
      <content type="html">&lt;!-- INTRO PLACEHOLDER (lorem ipsum). Replace with the author&#39;s real intro before publish. --&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.&lt;/p&gt;
&lt;p&gt;Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;
&lt;p&gt;Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.&lt;/p&gt;
&lt;div class=&quot;dgw-callout dgw-callout--disclosure&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;This guide was drafted by Claude Opus 4.8 running in Claude Code, during and after an actual Pixel 9 Pro migration to GrapheneOS rather than as a theoretical writeup. Commands, version numbers, and behavior notes reflect what the install looked like on the day of writing. Verify every step against primary sources (the GrapheneOS install page, the F-Droid project, and each app&#39;s own documentation) before running anything on your own device, because Android sideloading policy, Play Integrity behavior, and GrapheneOS releases all shift on short timelines.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;nav class=&quot;post-toc&quot; aria-label=&quot;Contents&quot;&gt;
&lt;h2&gt;Contents&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#two-paths&quot;&gt;Two Paths: Partial Or Full&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#back-up-the-old-phone&quot;&gt;Back Up The Old Phone&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#flash-grapheneos&quot;&gt;Flash GrapheneOS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#harden-the-new-install&quot;&gt;Harden The New Install&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#app-install-sources&quot;&gt;App Install Sources&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#restore-data&quot;&gt;Restore Data&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#fix-google-contacts-and-calendar-sync-with-davx5&quot;&gt;Fix Google Contacts And Calendar Sync With DAVx5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#browsers&quot;&gt;Browsers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#google-service-alternatives&quot;&gt;Google Service Alternatives&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#full-degoogle-replacing-gmail-calendar-drive&quot;&gt;[Full De-Google] Replacing Gmail, Calendar, and Drive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#common-pitfalls&quot;&gt;Common Pitfalls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://doyled-it.com/words/grapheneos-degoogle/#next-steps&quot;&gt;Next Steps&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/nav&gt;
&lt;section id=&quot;two-paths&quot;&gt;
&lt;h2&gt;◆ Two Paths: Partial Or Full ◆&lt;/h2&gt;
&lt;p&gt;This guide supports two endpoints. Pick whichever fits the available time and tolerance for change. The partial path is the weekend project. The full path is the multi-week migration.&lt;/p&gt;
&lt;h3&gt;What each path covers&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Partial de-Google&lt;/th&gt;
&lt;th&gt;Full de-Google&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Phone OS&lt;/td&gt;
&lt;td&gt;GrapheneOS&lt;/td&gt;
&lt;td&gt;GrapheneOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photos&lt;/td&gt;
&lt;td&gt;Ente&lt;/td&gt;
&lt;td&gt;Ente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS/MMS&lt;/td&gt;
&lt;td&gt;Fossify Messages&lt;/td&gt;
&lt;td&gt;Fossify Messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password manager&lt;/td&gt;
&lt;td&gt;Bitwarden or Proton Pass&lt;/td&gt;
&lt;td&gt;Bitwarden or Proton Pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2FA&lt;/td&gt;
&lt;td&gt;Proton Authenticator or Aegis&lt;/td&gt;
&lt;td&gt;Proton Authenticator or Aegis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VPN&lt;/td&gt;
&lt;td&gt;Proton VPN or Mullvad&lt;/td&gt;
&lt;td&gt;Proton VPN or Mullvad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;DuckDuckGo, Kagi, or Brave Search&lt;/td&gt;
&lt;td&gt;DuckDuckGo, Kagi, or Brave Search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser&lt;/td&gt;
&lt;td&gt;Vanadium + IronFox&lt;/td&gt;
&lt;td&gt;Vanadium + IronFox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maps&lt;/td&gt;
&lt;td&gt;Organic Maps for offline, Google Maps when needed&lt;/td&gt;
&lt;td&gt;Organic Maps, Magic Earth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YouTube viewing&lt;/td&gt;
&lt;td&gt;NewPipe or LibreTube&lt;/td&gt;
&lt;td&gt;NewPipe or LibreTube&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mail&lt;/td&gt;
&lt;td&gt;Gmail (kept)&lt;/td&gt;
&lt;td&gt;Proton Mail + SimpleLogin or Addy.io aliases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calendar&lt;/td&gt;
&lt;td&gt;Google Calendar via DAVx5&lt;/td&gt;
&lt;td&gt;Proton Calendar via DAVx5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contacts&lt;/td&gt;
&lt;td&gt;Google Contacts via DAVx5&lt;/td&gt;
&lt;td&gt;Proton Contacts or local vCard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud storage&lt;/td&gt;
&lt;td&gt;Google Drive (kept)&lt;/td&gt;
&lt;td&gt;Proton Drive&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Start partial, tighten later&lt;/h3&gt;
&lt;p&gt;Most steps in this guide apply to both paths. Sections that only apply to the full path are tagged with &lt;code&gt;[Full de-Google]&lt;/code&gt; in the heading. Skip those on a first pass and return to them later. Nothing about the partial path blocks an upgrade to the full path. The OS, app inventory, and sync stack stay the same. Only the account behind mail, calendar, and drive changes.&lt;/p&gt;
&lt;p&gt;A reasonable order: ship the partial path first, live on it for two or three weeks, then migrate mail last once the rest of the device is stable.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;The partial path is a defensible starting point. It removes the largest privacy liabilities (the OS itself, photos, messages, browser, search, and ambient location) in a single weekend, without forcing a mail migration that touches every account ever signed up for. Friction kills follow-through, and a half-finished migration that leaves the phone in a broken state usually gets rolled back. Shipping a working partial setup first preserves momentum and still cuts a meaningful amount of passive data collection.&lt;/p&gt;
&lt;p&gt;The full path is worth considering because concentrated data is a single-point-of-disclosure risk. A mail account is the root of the password-reset tree for nearly every other account, so whoever reads the inbox can eventually reach most of the rest. Replacing Gmail with Proton Mail and routing signups through SimpleLogin or Addy.io aliases is the single largest de-Google move available, both because it severs the inbox from ad profiling and because aliases let future leaks be contained and rotated without changing the underlying address.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;aside class=&quot;dgw-decision-tree&quot; data-widget=&quot;decision-tree&quot; aria-label=&quot;Partial vs Full decision tree&quot;&gt;&lt;/aside&gt;
&lt;section id=&quot;back-up-the-old-phone&quot;&gt;
&lt;h2&gt;◆ Back Up The Old Phone ◆&lt;/h2&gt;
&lt;p&gt;Flashing GrapheneOS wipes the device. Plan the backup before touching the installer, because most of what lives on an Android phone cannot be recovered from a Google account alone.&lt;/p&gt;
&lt;h3&gt;Inventory first&lt;/h3&gt;
&lt;p&gt;Before pulling anything, inventory what is on the device. With the phone plugged in and USB debugging enabled, run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb shell pm list packages -3
adb shell du -sk /sdcard/* | sort -n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first command lists every third-party app (anything not preinstalled). The second prints the size of each top-level folder under user storage so the heavy hitters are obvious. Save both outputs to a text file. They double as the install checklist for the new phone.&lt;/p&gt;
&lt;h3&gt;Pull user storage to an external drive&lt;/h3&gt;
&lt;p&gt;Everything under &lt;code&gt;/sdcard&lt;/code&gt; is user-accessible and worth pulling. The folders that matter most:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Documents&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DCIM&lt;/code&gt; (camera roll)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pictures&lt;/code&gt; (screenshots and app-saved images)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Movies&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Download&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Android/media/com.whatsapp&lt;/code&gt; (WhatsApp&#39;s local message and media store)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mount an external drive and pull each folder in turn:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb pull /sdcard/DCIM/ /Volumes/Backup/pixel-prewipe/DCIM/
adb pull /sdcard/Documents/ /Volumes/Backup/pixel-prewipe/Documents/
adb pull /sdcard/Android/media/com.whatsapp/ /Volumes/Backup/pixel-prewipe/whatsapp/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Large folders can take an hour or more. Do not let the Mac sleep during the transfer.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;macOS pitfall: external drive permissions&lt;/summary&gt;
&lt;p&gt;Granting Terminal (or whichever app is running &lt;code&gt;adb&lt;/code&gt;) &amp;quot;Full Disk Access&amp;quot; in &lt;span class=&quot;settings-path&quot;&gt;System Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Privacy and Security&lt;/span&gt; is more reliable than toggling &lt;span class=&quot;settings-path&quot;&gt;Files and Folders&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Removable Volumes&lt;/span&gt;. Long &lt;code&gt;adb pull&lt;/code&gt; sessions writing to an external drive will silently stall or fail on permission prompts otherwise.&lt;/p&gt;
&lt;/details&gt;
&lt;h3&gt;App data that adb cannot reach&lt;/h3&gt;
&lt;p&gt;Most app data lives under &lt;code&gt;/data/data/&amp;lt;package&amp;gt;/&lt;/code&gt;, which is sandboxed and unreadable without root. Banking apps, Signal, authenticator apps, password managers, and anything else with sensitive state will not come along in an &lt;code&gt;adb pull&lt;/code&gt;. Each one needs its own export flow before the wipe.&lt;/p&gt;
&lt;h3&gt;WhatsApp&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Open WhatsApp.&lt;/li&gt;
&lt;li&gt;Go to &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Chats&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Chat Backup&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Tap &quot;Back Up Now&quot;. This refreshes &lt;code&gt;msgstore.db.crypt14&lt;/code&gt; inside &lt;code&gt;/sdcard/Android/media/com.whatsapp/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run the &lt;code&gt;adb pull&lt;/code&gt; of that folder so the captured database is current.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If end-to-end encrypted backup is enabled, write down the 64-character encryption key. Without it the restored database cannot be opened, even with the correct file in place.&lt;/p&gt;
&lt;h3&gt;Signal&lt;/h3&gt;
&lt;p&gt;Signal Secure Backups (the paid cloud option) is the cleanest restore path. Enable it, then save the recovery key on paper. The free local-backup option exists but the restore flow is brittle and the key is just as critical.&lt;/p&gt;
&lt;h3&gt;2FA recovery codes&lt;/h3&gt;
&lt;p&gt;Recovery codes for every account with TOTP need to exist on paper before the wipe. At minimum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bitwarden&lt;/li&gt;
&lt;li&gt;Proton (account-level codes, separate from Proton Mail login)&lt;/li&gt;
&lt;li&gt;Microsoft Authenticator (if used for work accounts)&lt;/li&gt;
&lt;li&gt;Any TOTP app holding seeds that are not backed up elsewhere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without these codes, locked-out accounts may be unrecoverable. Print them. Do not screenshot them to a cloud-synced photo library.&lt;/p&gt;
&lt;h3&gt;Crypto wallets&lt;/h3&gt;
&lt;p&gt;Seed phrases belong on paper or a metal backup plate. Screenshots end up in cloud photo backups, OCR indexes, and clipboard history. Verify the seed by restoring to a throwaway wallet before wiping the source device.&lt;/p&gt;
&lt;h3&gt;Pre-deregister Cash App and Venmo&lt;/h3&gt;
&lt;p&gt;Log into each service&#39;s web dashboard and remove the old device from the trusted-devices list. Reinstalling on a freshly flashed phone otherwise looks like account takeover and triggers a fraud hold that can take days to clear.&lt;/p&gt;
&lt;h3&gt;Final check&lt;/h3&gt;
&lt;p&gt;Before starting the flash, confirm the external drive has: user storage folders, the refreshed WhatsApp folder, the WhatsApp encryption key, the Signal recovery key, printed 2FA codes, and crypto seeds. Anything missing from that list is gone after the bootloader unlock.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Android keeps two very different kinds of data. User storage under &lt;code&gt;/sdcard&lt;/code&gt; (photos, downloads, documents, a handful of app-exposed folders) is pullable over &lt;code&gt;adb&lt;/code&gt; with no special access. App-private storage under &lt;code&gt;/data/data/&amp;lt;package&amp;gt;/&lt;/code&gt; is sandboxed by the OS and unreadable without root, which is the same isolation that protects an app&#39;s secrets from every other app on the device. That isolation is a security feature on a running phone and a backup problem at wipe time. The only way out is each app&#39;s own export flow.&lt;/p&gt;
&lt;p&gt;Recovery codes belong on paper because the failure mode they exist for is &amp;quot;the device holding the TOTP seeds is gone&amp;quot;. Storing them in a cloud-synced note, a screenshot in a photo library, or another app on the same phone defeats the purpose. A printed sheet in a drawer survives a lost, broken, stolen, or freshly wiped device.&lt;/p&gt;
&lt;p&gt;WhatsApp&#39;s local backup is fragile (a single file plus a 64-character key, no integrity guarantees, no version history) but it is the only restore path that does not route message history through Google Drive. For anyone moving to an OS without Google account sync, the local-file path is the only option. Refreshing the backup immediately before the final pull is the difference between restoring last night&#39;s messages and restoring last month&#39;s.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;flash-grapheneos&quot;&gt;
&lt;h2&gt;◆ Flash GrapheneOS ◆&lt;/h2&gt;
&lt;p&gt;The official &lt;a href=&quot;https://grapheneos.org/install/web&quot;&gt;web installer&lt;/a&gt; handles the entire flash from a browser. It is the recommended path for the Pixel 9 Pro and avoids the manual fastboot dance.&lt;/p&gt;
&lt;h3&gt;Pre-flight&lt;/h3&gt;
&lt;p&gt;Confirm each item before plugging anything in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install Chrome or Edge on the Mac. WebUSB does not work in Firefox, Safari, or any other Gecko or WebKit browser.&lt;/li&gt;
&lt;li&gt;Pixel battery at 50% or higher.&lt;/li&gt;
&lt;li&gt;At least 32 GB free on the Mac.&lt;/li&gt;
&lt;li&gt;Remove the Google account from the phone first (&lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Passwords and accounts&lt;/span&gt;). This avoids Factory Reset Protection complications after the wipe.&lt;/li&gt;
&lt;li&gt;Use a USB-C data cable directly into a Mac USB-C port. No hubs, no dongles, no adapters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Enable OEM unlocking&lt;/h3&gt;
&lt;p&gt;On the phone:&lt;/p&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Open &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;About phone&lt;/span&gt; and tap Build number seven times to unlock Developer options.&lt;/li&gt;
&lt;li&gt;Go to &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;System&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Developer options&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Toggle OEM unlocking on.&lt;/li&gt;
&lt;li&gt;Power the phone off completely.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Boot into fastboot&lt;/h3&gt;
&lt;p&gt;Hold Volume Down and Power together until the red warning triangle appears with &amp;quot;Fastboot Mode&amp;quot; text below it. Release both buttons.&lt;/p&gt;
&lt;h3&gt;Run the web installer&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Plug the phone into the Mac.&lt;/li&gt;
&lt;li&gt;Open &lt;a href=&quot;https://grapheneos.org/install/web&quot;&gt;https://grapheneos.org/install/web&lt;/a&gt; in Chrome or Edge.&lt;/li&gt;
&lt;li&gt;Click &quot;Unlock bootloader&quot;. Confirm the prompt on the device with the volume keys and power button. The phone wipes at this step.&lt;/li&gt;
&lt;li&gt;Click &quot;Download release&quot; and wait for the factory image to download.&lt;/li&gt;
&lt;li&gt;Click &quot;Flash release&quot;. The flash takes several minutes. Do not touch the phone, unplug the cable, or close the browser tab during this step.&lt;/li&gt;
&lt;li&gt;When flashing finishes, the installer prompts to return to bootloader mode. Follow the on-screen instructions.&lt;/li&gt;
&lt;li&gt;Click &quot;Lock bootloader&quot;. This wipes the device a second time and enables verified boot. This step is required.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Verify the boot key hash&lt;/h3&gt;
&lt;p&gt;On first boot after locking, the phone briefly displays a yellow warning screen with the boot key fingerprint. For the Pixel 9 Pro, the expected hash is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;f729cab861da1b83fdfab402fc9480758f2ae78ee0b61c1f2137dd1ab7076e86
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This value is published on the GrapheneOS &lt;a href=&quot;https://grapheneos.org/install/web&quot;&gt;install page&lt;/a&gt; under the device list. If the displayed hash does not match exactly, stop. Do not complete setup. Ask in the GrapheneOS chat before proceeding.&lt;/p&gt;
&lt;h3&gt;First-run setup&lt;/h3&gt;
&lt;p&gt;In the setup wizard:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set a strong alphanumeric password. Avoid PIN-only unlock; PINs are weak against forensic extraction.&lt;/li&gt;
&lt;li&gt;On the final screen, disable OEM Unlocking. This prevents a future attacker (or a lost-phone scenario) from re-unlocking the bootloader without first wiping the device.&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;About eSIMs&lt;/summary&gt;
&lt;p&gt;The eSIM profile lives on the eUICC chip, which is separate hardware from the user-data partition that gets wiped during flashing. The eSIM almost always survives a factory reset and the GrapheneOS install.&lt;/p&gt;
&lt;p&gt;Carriers like US Mobile typically reactivate the line after one reboot on the freshly flashed device. No carrier call required. There is no need to pre-emptively request a replacement eSIM unless the carrier confirms the old profile is dead after the install completes.&lt;/p&gt;
&lt;p&gt;If the eSIM does not come back after a reboot or two, contact the carrier and request a new eSIM activation QR code. Most carriers issue one within minutes.&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;If the installer fails mid-flash&lt;/summary&gt;
&lt;p&gt;Unplug the cable, hold Power for 10 seconds to force a reboot back into fastboot mode, then restart the browser tab and try &amp;quot;Flash release&amp;quot; again. The installer is idempotent: a failed flash leaves the device in fastboot, not bricked.&lt;/p&gt;
&lt;/details&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Verified boot is the cryptographic check that runs every time the phone powers on. The bootloader hashes the OS partition and compares that hash against a signature baked into the boot key. If a single byte of the OS has been modified (by malware, by a physical attacker with brief device access, by a tampered firmware update), the check fails and the phone refuses to boot the modified image. Without verified boot, a tampered OS could silently exfiltrate everything: keys, messages, location history, banking credentials. The boot key hash printed on first boot is the public anchor that lets a human confirm the running OS is the GrapheneOS build it claims to be, not a malicious lookalike.&lt;/p&gt;
&lt;p&gt;Re-locking the bootloader after the flash is what turns verified boot back on. An unlocked bootloader will run any signed or unsigned image without complaint, which defeats the entire chain. Locking the bootloader is also why the OEM Unlocking toggle gets disabled in the setup wizard: an attacker with physical access and the unlock pathway open can re-flash the device without the user&#39;s password.&lt;/p&gt;
&lt;p&gt;GrapheneOS clears a security bar that most &amp;quot;degoogled&amp;quot; Android ROMs do not. &lt;a href=&quot;https://privacyguides.org/en/android/&quot;&gt;Privacy Guides&lt;/a&gt; frames the criterion plainly: a custom Android distribution should preserve verified boot, rollback protection, and enforced SELinux. LineageOS and most community ROMs ship with an unlocked bootloader by design and cannot re-lock it, so verified boot is effectively off. GrapheneOS additionally ships a &lt;a href=&quot;https://grapheneos.org/features&quot;&gt;hardened memory allocator&lt;/a&gt; with zero-on-free and write-after-free detection, stricter app sandboxing, and a &lt;a href=&quot;https://grapheneos.org/faq&quot;&gt;sandboxed Google Play compatibility layer&lt;/a&gt; that runs Play services as an ordinary unprivileged app rather than as a privileged system component. Those are the upgrades over stock Pixel Android, not just the removal of Google.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;harden-the-new-install&quot;&gt;
&lt;h2&gt;◆ Harden The New Install ◆&lt;/h2&gt;
&lt;p&gt;GrapheneOS is already hardened out of the box, with a &lt;a href=&quot;https://grapheneos.org/features&quot;&gt;hardened memory allocator and other exploit mitigations&lt;/a&gt; enabled by default. The settings below layer on additional reductions in attack surface and forensic exposure. Walk through them once, in order, before restoring any apps or accounts.&lt;/p&gt;
&lt;h3&gt;Settings checklist&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;&lt;strong&gt;System update first.&lt;/strong&gt; &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;System&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;System update&lt;/span&gt;. Pull the latest build before doing anything else. Reboot when prompted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto reboot: 18 hours.&lt;/strong&gt; &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Security &amp;amp; privacy&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Device unlock&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Auto reboot&lt;/span&gt;. If the device sits idle and locked for this long, it reboots back into the Before-First-Unlock state, where disk encryption keys are not in memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB-C port control: Charging-only when locked.&lt;/strong&gt; &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Security &amp;amp; privacy&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Device unlock&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;USB-C port&lt;/span&gt;. This is the default on GrapheneOS; confirm it is still set. Data lines are disabled whenever the screen is locked, which blocks accessory-based data extraction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show Lockdown option.&lt;/strong&gt; Go to &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Display &amp;amp; touch&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Lock screen&lt;/span&gt; and toggle on &quot;Show lockdown option&quot;. Then long-press the power button (or pull down Quick Settings) and add the Lockdown tile. Triggering Lockdown disables fingerprint and face unlock and hides notifications until the passcode is entered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Camera EXIF location off.&lt;/strong&gt; Open the Camera app, tap the gear icon, and disable &quot;Save location&quot;. Photos taken afterward will not embed GPS coordinates in their EXIF metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LTE-only mode (optional).&lt;/strong&gt; Open &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Network &amp;amp; internet&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;SIMs&lt;/span&gt;, tap the active SIM, then set &lt;span class=&quot;settings-path&quot;&gt;Preferred network type&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;LTE only&lt;/span&gt;. This disables 2G fallback (where most IMSI catchers operate) and 5G geolocation features. Some readers want full 5G for speed; this is a tradeoff, not a requirement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sensors permission default-off.&lt;/strong&gt; &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Security &amp;amp; privacy&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;More security &amp;amp; privacy&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Sensors&lt;/span&gt;. With this enabled, apps must explicitly request access to the accelerometer, gyroscope, barometer, and similar sensors. This defeats a class of motion-based fingerprinting techniques.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duress password (optional, advanced).&lt;/strong&gt; &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Security &amp;amp; privacy&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Device unlock&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Duress password&lt;/span&gt;. Entering this password at the lock screen irreversibly wipes the device, including the eSIM profile. Set this only with a clear plan. Accidental entry means total, unrecoverable data loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify MAC randomization.&lt;/strong&gt; Open &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Network &amp;amp; internet&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Internet&lt;/span&gt;, tap a connected Wi-Fi network, then open Privacy. Confirm it reads &quot;Use randomized MAC&quot; (per-connection). This is the default and should not need changing, but verify it on the home and work networks before anything else connects.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;dgw-callout dgw-callout--warn&quot;&gt;&lt;strong&gt;Reboot after this pass.&lt;/strong&gt; Several of these settings (Auto reboot, Sensors, USB-C control) only take full effect after a reboot. Reboot once before moving on to app restore.&lt;/div&gt;
&lt;p&gt;Take a few minutes to scroll through the rest of &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Security &amp;amp; privacy&lt;/span&gt; as well. GrapheneOS exposes far more granular controls than stock Android, and many of them are worth knowing about even if their defaults are already sensible.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Hardening is defense in depth. No single setting prevents a determined attacker on its own, but each one removes a category of low-effort attack: cabled data extraction, passive sensor fingerprinting, downgrade to 2G, EXIF leakage in shared photos. The aggregate effect is a much smaller exposed surface than stock Android, and the per-setting cost is usually a one-time toggle.&lt;/p&gt;
&lt;p&gt;The most important concept here is the difference between Before-First-Unlock (BFU) and After-First-Unlock (AFU). After a reboot, before the passcode is entered for the first time, disk encryption keys are not present in memory and most user data is genuinely inaccessible. Once the passcode is entered, keys are loaded and the device enters AFU, where a much broader set of data is recoverable from a running or recently-running device. Auto reboot returns an idle device to BFU on a timer; Lockdown lets the user force a state closer to BFU on demand.&lt;/p&gt;
&lt;p&gt;Sensors-off, MAC randomization, LTE-only, and EXIF-off are all surface-area reductions in a different direction: they limit what an app, a network observer, or a recipient of a shared file can passively learn about the device and its owner. None are silver bullets. Together they meaningfully shrink the passive-collection footprint of a modern smartphone, which is the realistic threat for most users most of the time.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;app-install-sources&quot;&gt;
&lt;h2&gt;◆ App Install Sources ◆&lt;/h2&gt;
&lt;p&gt;GrapheneOS ships with no app stores preinstalled. Pick install sources deliberately, in this order: Sandboxed Google Play (for the apps that demand it), F-Droid (for FOSS), Obtainium (for GitHub releases). Skip Aurora Store.&lt;/p&gt;
&lt;h3&gt;Sandboxed Google Play&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Open the preinstalled &lt;span class=&quot;settings-path&quot;&gt;Apps&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;GrapheneOS apps&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Install &quot;Google Play services&quot;. That single action installs three packages together: Google Play services, Google Services Framework, and Google Play Store.&lt;/li&gt;
&lt;li&gt;Reboot when prompted.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On GrapheneOS these run as ordinary user apps. Per the &lt;a href=&quot;https://grapheneos.org/usage&quot;&gt;GrapheneOS usage docs&lt;/a&gt;: &amp;quot;Google Play receives absolutely no special access or privileges on GrapheneOS as opposed to bypassing the app sandbox.&amp;quot; The &lt;a href=&quot;https://grapheneos.org/faq&quot;&gt;FAQ&lt;/a&gt; reinforces this: GrapheneOS includes a &amp;quot;compatibility layer for sandboxed Play services to make user installed Play services apps able to run as fully sandboxed, unprivileged apps.&amp;quot;&lt;/p&gt;
&lt;p&gt;Sandboxed Google Play is required for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WhatsApp push notifications (without it, messages only arrive when the app is opened)&lt;/li&gt;
&lt;li&gt;Most banking apps (Play Integrity attestation)&lt;/li&gt;
&lt;li&gt;Carrier apps (US Mobile, T-Mobile, Verizon companion apps)&lt;/li&gt;
&lt;li&gt;Most rideshare, delivery, and airline apps&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sign in to Google Play Store, not Aurora Store&lt;/h3&gt;
&lt;p&gt;GrapheneOS explicitly recommends Google Play Store over Aurora Store. Aurora&#39;s &amp;quot;anonymous&amp;quot; shared-account mode gets rate-limited, has a history of credential leaks, and offers no real privacy improvement once Sandboxed Google Play is installed: Play Integrity sees the device the same way regardless of which frontend installed the APK.&lt;/p&gt;
&lt;p&gt;About the Google account prompt: the account is scoped to the Sandboxed Google Play instance inside the current user profile. It is not a system account. Other apps cannot enumerate it, and removing the profile removes the account along with all Play data. Use a dedicated Google account for the Play Store and keep the primary Google identity (if any) inside a separate profile or out of the device entirely.&lt;/p&gt;
&lt;h3&gt;F-Droid&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Open Vanadium.&lt;/li&gt;
&lt;li&gt;Go to &lt;a href=&quot;https://f-droid.org/&quot;&gt;f-droid.org&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Tap &quot;Download F-Droid&quot; and install the APK.&lt;/li&gt;
&lt;li&gt;When Vanadium requests install-from-unknown-sources permission, grant it for Vanadium only.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;F-Droid is the source for FOSS apps that are not on Play: Tor Browser, NewPipe, IronFox, Organic Maps, DAVx5, Fossify Messages, and Obtainium itself. Updates are signed by F-Droid&#39;s build infrastructure with reproducible-build verification for many packages.&lt;/p&gt;
&lt;p&gt;After install, copy the F-Droid APK and any critical FOSS APKs (IronFox, NewPipe, DAVx5, Organic Maps, Obtainium) to an external drive. See the next subsection for why.&lt;/p&gt;
&lt;h3&gt;The September 2026 problem&lt;/h3&gt;
&lt;p&gt;In August 2025, Google announced that all apps installed on certified Android devices must come from Google-registered developers (government ID, registration fee, signing-key disclosure). The campaign site &lt;a href=&quot;https://keepandroidopen.org/&quot;&gt;keepandroidopen.org&lt;/a&gt; tracks the rollout. F-Droid responded with a &lt;a href=&quot;https://f-droid.org/2025/09/29/google-developer-registration-decree.html&quot;&gt;position post&lt;/a&gt; calling it existential: &amp;quot;We believe it is about consolidating power and tightening control over a formerly open ecosystem.&amp;quot;&lt;/p&gt;
&lt;p&gt;GrapheneOS is uncertified by design and is likely exempt from the verification check, but the project has not publicly committed to stripping the check if Google ships it inside AOSP. Hedge by installing F-Droid now and cold-storing the APKs. Worst case, manual sideloading from the external drive still works.&lt;/p&gt;
&lt;h3&gt;Obtainium&lt;/h3&gt;
&lt;p&gt;Some apps ship only as GitHub releases (Bitwarden beta channels, some Proton betas, niche FOSS tools). Install Obtainium directly from &lt;a href=&quot;https://github.com/ImranR98/Obtainium/releases/latest&quot;&gt;github.com/ImranR98/Obtainium/releases/latest&lt;/a&gt;. Obtainium watches GitHub release feeds and prompts for updates. The same September 2026 caveat applies.&lt;/p&gt;
&lt;h3&gt;Summary table&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Use for&lt;/th&gt;
&lt;th&gt;Where to get&lt;/th&gt;
&lt;th&gt;September 2026 risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google Play Store&lt;/td&gt;
&lt;td&gt;WhatsApp, banking, carrier, rideshare, mainstream apps&lt;/td&gt;
&lt;td&gt;GrapheneOS Apps repo (Sandboxed Google Play bundle)&lt;/td&gt;
&lt;td&gt;None. Google&#39;s own store.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F-Droid&lt;/td&gt;
&lt;td&gt;Tor Browser, NewPipe, IronFox, Organic Maps, DAVx5, Fossify, Obtainium&lt;/td&gt;
&lt;td&gt;f-droid.org via Vanadium&lt;/td&gt;
&lt;td&gt;High. Cold-store APKs now.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Obtainium&lt;/td&gt;
&lt;td&gt;GitHub-released apps not on Play or F-Droid&lt;/td&gt;
&lt;td&gt;github.com/ImranR98/Obtainium&lt;/td&gt;
&lt;td&gt;High. Same Google policy.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aurora Store&lt;/td&gt;
&lt;td&gt;Skip. No privacy gain over Play once Sandboxed Google Play is installed.&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Sandboxing matters even when Google Play is installed. On stock Android, Play services runs as a privileged system component with access far beyond what any normal app gets. On GrapheneOS, the same code runs inside the standard app sandbox with no special permissions. It can still phone home (that is what it does), but it cannot reach into other apps, read arbitrary files, or silently grant itself capabilities. The tradeoff is honest: some Play features that depend on privileged hooks (Wallet tap-to-pay, certain device-admin flows) do not work.&lt;/p&gt;
&lt;p&gt;F-Droid beats sideloading random APKs from the web because the build pipeline is auditable. F-Droid builds from source on its own infrastructure, signs the result with its own key, and publishes reproducible-build status for many packages. A website-hosted APK has none of that: trust collapses to &amp;quot;did the host site get compromised today&amp;quot;. Update notifications also matter: F-Droid pushes signed updates, while a random APK becomes stale and vulnerable the moment a CVE drops.&lt;/p&gt;
&lt;p&gt;The sideloading restrictions coming in late 2026 are framed as a security measure, and registration plus signing-key disclosure do raise the bar for casual malware authors. The same mechanism also gives Google a chokepoint over which developers can ship to Android at all, including FOSS maintainers who do not want to attach a government ID to their packages. Both framings are true at the same time. The relevant question is who decides which apps a device owner can install, and the answer under the new policy shifts toward Google.&lt;/p&gt;
&lt;p&gt;If F-Droid loses its ability to distribute updates on certified devices, GrapheneOS users have two fallbacks: F-Droid may continue to function on uncertified devices like GrapheneOS, or manual sideloading from cold-stored APKs remains available. Neither is as good as a working repo with signed updates. Installing F-Droid and archiving the current APK set today preserves optionality regardless of how the policy rolls out.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;restore-data&quot;&gt;
&lt;h2&gt;◆ Restore Data ◆&lt;/h2&gt;
&lt;p&gt;Order matters here. Foundation auth comes first, because every other app on the phone depends on being able to log in, and login depends on TOTP codes, and TOTP codes depend on the authenticator app, which itself depends on a password manager to look up the right account. Work outward from that root.&lt;/p&gt;
&lt;div class=&quot;dgw-callout dgw-callout--warn&quot;&gt;&lt;strong&gt;Paper first.&lt;/strong&gt; The single biggest snag is 2FA recovery codes. Have them printed on paper before the wipe. Without them, lockout from half the account list happens at the worst possible moment.&lt;/div&gt;
&lt;h3&gt;1. Password manager (Bitwarden)&lt;/h3&gt;
&lt;p&gt;Install Bitwarden from the Google Play Store or F-Droid. Log in with the master password. Bitwarden will ask for a TOTP code from the authenticator app, which is not installed yet, so use the printed two-step-login recovery code instead. Once logged in, go to Account Settings, two-step login, and generate a fresh recovery code. The old one is now considered exposed (it has been sitting on paper in plain sight) and the previous device&#39;s TOTP seed is gone.&lt;/p&gt;
&lt;h3&gt;2. TOTP authenticator (Proton Authenticator)&lt;/h3&gt;
&lt;p&gt;Install Proton Authenticator. Log in with the Proton account password and the printed Proton recovery code. The encrypted TOTP vault syncs down from Proton&#39;s cloud, restoring every other service&#39;s codes in one shot. Generate a new Proton account recovery code immediately and store the new sheet.&lt;/p&gt;
&lt;h3&gt;3. Enterprise 2FA (optional)&lt;/h3&gt;
&lt;p&gt;If work or school uses Microsoft Authenticator, install it and cloud-restore from the linked personal Microsoft account. Push-approval accounts may still require re-enrollment through the IT portal.&lt;/p&gt;
&lt;h3&gt;4. Signal&lt;/h3&gt;
&lt;p&gt;Install Signal. Register the same phone number. When prompted, paste the Signal Secure Backups recovery key saved before the wipe. Message history, media, and group memberships restore from cloud. This is the cleanest restore path of any messenger on the list.&lt;/p&gt;
&lt;h3&gt;5. WhatsApp (the fiddly one)&lt;/h3&gt;
&lt;p&gt;Install WhatsApp from the Google Play Store but do not open it yet. Opening it before the local backup is in place will create a fresh empty database that blocks the restore prompt.&lt;/p&gt;
&lt;p&gt;Re-enable USB debugging under &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;System&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Developer options&lt;/span&gt;. Plug the phone into the Mac and push the backup tree back:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb push &amp;quot;/path/to/backup/whatsapp/com.whatsapp/&amp;quot; /sdcard/Android/media/com.whatsapp/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now open WhatsApp, register with the same phone number, and at the &amp;quot;Found a local backup&amp;quot; prompt tap Restore.&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;If the restore prompt never appears&lt;/summary&gt;
&lt;p&gt;This restore path works about 80% of the time on GrapheneOS. WhatsApp occasionally changes its backup directory structure between releases, and a backup from an older version may not match what the new install expects.&lt;/p&gt;
&lt;p&gt;Fallback options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Per-chat archives exported from WhatsApp Desktop before the wipe are still readable as plain zip files. They cannot be re-imported into WhatsApp, but the message contents and attachments are recoverable for reference.&lt;/li&gt;
&lt;li&gt;If the most important chats are with a small number of people, ask them to re-share key attachments after registration.&lt;/li&gt;
&lt;li&gt;Linked devices (WhatsApp Desktop, WhatsApp Web) re-link cleanly and pull recent history forward, even if the local restore failed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h3&gt;6. File-based apps (Obsidian, etc.)&lt;/h3&gt;
&lt;p&gt;For anything that stores its data as plain files, push the folder back to the same location and point the app at it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb push &amp;quot;/path/to/backup/Documents/ObsidianVault&amp;quot; /sdcard/Documents/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Open Obsidian, choose &amp;quot;Open folder as vault&amp;quot;, and select the restored directory. Repeat for any other file-based tools.&lt;/p&gt;
&lt;h3&gt;7. Cloud-synced apps&lt;/h3&gt;
&lt;p&gt;Proton Mail, Proton Calendar, Proton Drive, Ente, Bitwarden secondary devices, and similar services need only install plus login. Data streams down on first sync. Give Ente time to rebuild thumbnails before judging whether the library looks right.&lt;/p&gt;
&lt;h3&gt;8. Banking and payments&lt;/h3&gt;
&lt;p&gt;Expect a 2FA re-enrollment dance for each banking app. Most will send an SMS or email code, then ask security questions. Cash App and Venmo go faster if they were pre-deregistered from their web dashboards before the wipe, which avoids the fraud-hold flow that triggers when a &amp;quot;new device&amp;quot; tries to authenticate against an active session. Check each app against the &lt;a href=&quot;https://privsec.dev/posts/android/banking-applications-compatibility-with-grapheneos/&quot;&gt;GrapheneOS banking compatibility list&lt;/a&gt; if anything refuses to launch.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Restoring a phone is a chicken-and-egg problem. Logging into any account needs a password, the password lives in a password manager, the password manager needs a TOTP code, the TOTP code lives in an authenticator app, and the authenticator app needs to be logged in, which needs a password. The only way to break the loop is paper: printed recovery codes for the two root accounts (password manager and TOTP authenticator) that bootstrap everything else. Skipping that step before the wipe is how people get locked out of their own data.&lt;/p&gt;
&lt;p&gt;Sandboxing makes restore harder than on stock Android. Each app on GrapheneOS sees its own private storage and nothing else, so the old &amp;quot;just sign into a Google account and watch everything come back&amp;quot; flow does not exist. Each app has to be restored on its own terms, through its own backup mechanism, in the right order. The upside is the same property that makes it inconvenient: one compromised app cannot rummage through another app&#39;s data.&lt;/p&gt;
&lt;p&gt;WhatsApp restore is fragile because the app&#39;s local backup format is undocumented and changes between releases, and because WhatsApp&#39;s official restore path assumes Google Drive backups that GrapheneOS users typically do not have. The adb-push workaround threads a real needle and works most of the time, but it is the single most likely step in the whole migration to fail. Treating chat history as nice-to-have rather than must-have removes a lot of stress from this part of the process.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;fix-google-contacts-and-calendar-sync-with-davx5&quot;&gt;
&lt;h2&gt;◆ Fix Google Contacts And Calendar Sync With DAVx5 ◆&lt;/h2&gt;
&lt;p&gt;After signing into a Google account on GrapheneOS, Contacts and Calendar will appear broken. The dialer shows raw phone numbers instead of names, Fossify Messages (or whatever SMS app is in use) shows numbers instead of contact labels, and the system Calendar is empty even though Google Calendar has years of events.&lt;/p&gt;
&lt;p&gt;This is expected. On stock Android, signing into Google triggers a privileged sync adapter bundled with Play services that writes directly into the system ContactsProvider and CalendarProvider. On GrapheneOS, Sandboxed Google Play runs as an ordinary, unprivileged app and cannot reach those system providers. The &lt;a href=&quot;https://grapheneos.org/usage&quot;&gt;GrapheneOS usage docs&lt;/a&gt; put it plainly: &amp;quot;Functionality depending on the OS integrating Play services and using it as a backend is unavailable.&amp;quot;&lt;/p&gt;
&lt;p&gt;The fix is a third-party sync client that speaks the open standards Google already exposes: CardDAV for contacts, CalDAV for calendars. &lt;a href=&quot;https://www.davx5.com/&quot;&gt;DAVx5&lt;/a&gt; does exactly that, and writes results into the system providers so every app on the phone sees the data.&lt;/p&gt;
&lt;h3&gt;Pricing note&lt;/h3&gt;
&lt;p&gt;DAVx5 is free on &lt;a href=&quot;https://f-droid.org/packages/at.bitfire.davdroid/&quot;&gt;F-Droid&lt;/a&gt; and $6.50 on the Google Play Store. Both builds are the same app. The paid Play version is a &amp;quot;support the developer&amp;quot; donation build with no extra features. Install from F-Droid and tip the developer separately if desired.&lt;/p&gt;
&lt;h3&gt;Setup&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Install DAVx5 from F-Droid.&lt;/li&gt;
&lt;li&gt;Open it and tap the + (Add account) button.&lt;/li&gt;
&lt;li&gt;Choose &quot;Login with Google&quot; and complete the OAuth flow in the browser sheet that appears.&lt;/li&gt;
&lt;li&gt;On the account screen, toggle Contacts and Calendar on.&lt;/li&gt;
&lt;li&gt;Tap the refresh icon to force an initial sync.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After the first sync completes, dialer caller ID works, the SMS app resolves numbers to names, and the system Calendar shows Google events alongside any local calendars.&lt;/p&gt;
&lt;h3&gt;Bonus&lt;/h3&gt;
&lt;p&gt;The same DAVx5 install can sync any other CardDAV/CalDAV endpoint at the same time. When swapping Google Calendar and Google Contacts for Proton Calendar and Proton Contacts later (see the Full de-Google section), add the Proton account in DAVx5 and both providers sync side by side until the cutover is finished.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;CardDAV and CalDAV are open IETF standards for contacts and calendar sync. Because the data and the transport are decoupled from any single vendor, the same client (DAVx5) can talk to Google, Proton, Nextcloud, Fastmail, or a self-hosted Radicale server with no change to how apps on the phone read the data. The system ContactsProvider and CalendarProvider stay the source of truth, and every app keeps working regardless of where the bytes came from.&lt;/p&gt;
&lt;p&gt;This pattern is durable. Switching providers later (Google to Proton, Proton to self-hosted, or anything else) becomes an account-swap inside DAVx5 rather than a migration that touches every app on the device. It also makes mixed setups trivial: a personal calendar on one provider and a shared family calendar on another can coexist without either side knowing about the other.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;browsers&quot;&gt;
&lt;h2&gt;◆ Browsers ◆&lt;/h2&gt;
&lt;p&gt;The browser is the largest attack surface on any phone. Pick two, use them for different jobs, and keep both patched.&lt;/p&gt;
&lt;h3&gt;Recommended dual setup&lt;/h3&gt;
&lt;p&gt;Run &lt;strong&gt;Vanadium&lt;/strong&gt; for sensitive browsing (banking, email, anything tied to a real identity) and &lt;strong&gt;IronFox&lt;/strong&gt; for daily browsing where extensions and ad blocking matter.&lt;/p&gt;
&lt;p&gt;Vanadium ships pre-installed with GrapheneOS. It is a hardened Chromium build with per-site process isolation and Android&#39;s strongest renderer sandbox. No configuration is required to benefit from it.&lt;/p&gt;
&lt;p&gt;IronFox is a hardened Firefox (Gecko) build available on F-Droid. It strips proprietary libraries and telemetry, ships privacy-respecting defaults, and bundles uBlock Origin. The tradeoff: Gecko on Android does not yet implement per-site process isolation, so a renderer compromise has a larger blast radius than the equivalent in Vanadium.&lt;/p&gt;
&lt;h3&gt;Why two browsers&lt;/h3&gt;
&lt;p&gt;Different engines fail in different ways. Keeping sensitive sessions in Vanadium and disposable browsing in IronFox limits cross-contamination. If an ad network on a news site ships a malicious payload, it lands in the browser without the bank session cookies.&lt;/p&gt;
&lt;h3&gt;The Mythos Preview context&lt;/h3&gt;
&lt;p&gt;In April 2026, Anthropic &lt;a href=&quot;https://red.anthropic.com/2026/mythos-preview/&quot;&gt;disclosed an unreleased model&lt;/a&gt; that identifies and exploits zero-day vulnerabilities at unprecedented scale, including browser sandbox-escape chains that combine four vulnerabilities to escape both the renderer and the underlying OS sandbox. Per Anthropic, under 1% of disclosed vulnerabilities are patched in deployed software.&lt;/p&gt;
&lt;p&gt;The practical reading for end users: patch cadence is now a first-class security property, and per-site process isolation matters more than it used to. A browser that ships fixes within days of upstream is materially safer than one that ships them within weeks, and a sandbox that contains a renderer compromise to a single origin is materially safer than one that does not.&lt;/p&gt;
&lt;h3&gt;Browser comparison&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;th&gt;Sandbox model&lt;/th&gt;
&lt;th&gt;Extensions&lt;/th&gt;
&lt;th&gt;Ad blocking&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vanadium&lt;/td&gt;
&lt;td&gt;Chromium, per-site process isolation&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None built in&lt;/td&gt;
&lt;td&gt;Maintained by GrapheneOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IronFox&lt;/td&gt;
&lt;td&gt;Gecko, single renderer process&lt;/td&gt;
&lt;td&gt;Full WebExtensions&lt;/td&gt;
&lt;td&gt;uBlock Origin bundled&lt;/td&gt;
&lt;td&gt;Actively maintained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firefox&lt;/td&gt;
&lt;td&gt;Gecko, single renderer process&lt;/td&gt;
&lt;td&gt;Limited curated list&lt;/td&gt;
&lt;td&gt;Manual install&lt;/td&gt;
&lt;td&gt;Maintained, weaker defaults&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mull&lt;/td&gt;
&lt;td&gt;Gecko, single renderer process&lt;/td&gt;
&lt;td&gt;Full WebExtensions&lt;/td&gt;
&lt;td&gt;Built in&lt;/td&gt;
&lt;td&gt;Archived 2025, do not use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brave&lt;/td&gt;
&lt;td&gt;Chromium, per-site process isolation&lt;/td&gt;
&lt;td&gt;Chrome extension subset&lt;/td&gt;
&lt;td&gt;Built in (Shields)&lt;/td&gt;
&lt;td&gt;Maintained, includes crypto features&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;What not to use&lt;/h3&gt;
&lt;p&gt;Do not use &lt;strong&gt;Mull&lt;/strong&gt;. The &lt;a href=&quot;https://gitlab.com/divested-mobile/mull-fenix&quot;&gt;project was archived in 2025&lt;/a&gt; and no longer receives upstream Mozilla patches. Any copy still installed should be replaced with IronFox.&lt;/p&gt;
&lt;p&gt;Do not use &lt;strong&gt;vanilla Firefox&lt;/strong&gt; as the primary browser. It has the same Gecko sandbox limits as IronFox but ships weaker privacy defaults and more telemetry. If a Gecko browser is wanted, pick IronFox.&lt;/p&gt;
&lt;h3&gt;Default search&lt;/h3&gt;
&lt;p&gt;In both browsers, set the default search engine to &lt;strong&gt;DuckDuckGo&lt;/strong&gt; (free) or &lt;strong&gt;Kagi&lt;/strong&gt; (paid, no ads, no tracking). Avoid Google as default. The DuckDuckGo and Kagi options are present in the built-in engine list for both Vanadium and IronFox.&lt;/p&gt;
&lt;h3&gt;Optional additions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tor Browser&lt;/strong&gt; (F-Droid): for onion sites and high-anonymity browsing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orbot&lt;/strong&gt; (F-Droid): routes traffic from other apps through Tor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brave&lt;/strong&gt;: a reasonable single-browser option for readers who want one Chromium-based browser with built-in ad blocking and accept the bundled crypto features.&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;If a site breaks in Vanadium&lt;/summary&gt;
&lt;p&gt;Vanadium disables several Chromium features by default for hardening. If a site refuses to load or render correctly, open it in IronFox instead rather than weakening Vanadium settings. Reserve Vanadium for the small number of high-trust sites where the stricter posture matters.&lt;/p&gt;
&lt;/details&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;The browser is the most-attacked surface on a modern phone. It executes untrusted code from every website it visits, parses dozens of complex file formats, and has direct network access. Most real-world compromises of mobile devices start in the browser, not in the OS itself.&lt;/p&gt;
&lt;p&gt;Per-site process isolation means each website runs in its own operating-system process with its own sandbox. If one site exploits a bug in the rendering engine, it cannot read data from other sites&#39; tabs without also escaping the OS sandbox, which is a much harder second step. Browsers without per-site isolation share one renderer across origins, so a single renderer compromise can read across tabs.&lt;/p&gt;
&lt;p&gt;Patch cadence is the other half of the equation. A browser that ships upstream security fixes within days closes the window during which a known vulnerability is exploitable. With automated vulnerability discovery now demonstrated at scale, the gap between &amp;quot;fix landed upstream&amp;quot; and &amp;quot;fix on the device&amp;quot; is the practical measure of how exposed a browser is on any given day. Picking browsers with short patch cadences and keeping them updated is no longer optional hygiene; it is the security posture.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;google-service-alternatives&quot;&gt;
&lt;h2&gt;◆ Google Service Alternatives ◆&lt;/h2&gt;
&lt;p&gt;Be honest about what swaps buy. Replacing peripheral services (Search, Maps, the YouTube client) without replacing the big three (Gmail, Calendar, Drive) reduces exposure only at the margins. The single highest-impact move is replacing Gmail with a different provider plus an alias service, because mail is the root of every password reset, every account-recovery flow, and every &amp;quot;magic link&amp;quot; login. If Gmail stays, Google still sees the metadata graph of every service in active use. Treat the mail swap as the headline change and treat the rest as exposure-reduction around it.&lt;/p&gt;
&lt;p&gt;The swaps below are ordered roughly from low-friction to high-friction. Adopt them in whatever order matches the available time budget.&lt;/p&gt;
&lt;h3&gt;Swap table&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Google service&lt;/th&gt;
&lt;th&gt;Replacement&lt;/th&gt;
&lt;th&gt;Where to get&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google Search&lt;/td&gt;
&lt;td&gt;DuckDuckGo, Kagi, or Brave Search&lt;/td&gt;
&lt;td&gt;Browser settings&lt;/td&gt;
&lt;td&gt;Set as default in Vanadium and IronFox. Kagi is paid and ad-free.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Maps&lt;/td&gt;
&lt;td&gt;Organic Maps&lt;/td&gt;
&lt;td&gt;F-Droid&lt;/td&gt;
&lt;td&gt;OpenStreetMap-based, offline-capable. Keep Google Maps for general use if needed; route sensitive trips through Organic Maps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Photos&lt;/td&gt;
&lt;td&gt;Ente&lt;/td&gt;
&lt;td&gt;Play Store or &lt;a href=&quot;https://ente.com/&quot;&gt;ente.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Paid, end-to-end encrypted, open source.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Drive&lt;/td&gt;
&lt;td&gt;Proton Drive&lt;/td&gt;
&lt;td&gt;Play Store or F-Droid via Obtainium&lt;/td&gt;
&lt;td&gt;Paired naturally with a Proton Mail plan.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Calendar&lt;/td&gt;
&lt;td&gt;Proton Calendar&lt;/td&gt;
&lt;td&gt;Play Store&lt;/td&gt;
&lt;td&gt;Sync to the system calendar via DAVx5 so other apps can read events.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gmail (full de-Google)&lt;/td&gt;
&lt;td&gt;Proton Mail&lt;/td&gt;
&lt;td&gt;Play Store&lt;/td&gt;
&lt;td&gt;Use &lt;a href=&quot;https://simplelogin.io/&quot;&gt;SimpleLogin&lt;/a&gt; or &lt;a href=&quot;https://addy.io/&quot;&gt;Addy.io&lt;/a&gt; aliases for new signups so the canonical Proton address is never exposed. This is the single biggest move on the list.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Authenticator&lt;/td&gt;
&lt;td&gt;Proton Authenticator, or Aegis&lt;/td&gt;
&lt;td&gt;Play Store / F-Droid&lt;/td&gt;
&lt;td&gt;Aegis is fully local, encrypted, and exportable. Proton Authenticator syncs across devices if a Proton account is in use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Tasks&lt;/td&gt;
&lt;td&gt;Tasks.org&lt;/td&gt;
&lt;td&gt;F-Droid&lt;/td&gt;
&lt;td&gt;CalDAV-compatible; works with the Proton/DAVx5 stack.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Translate&lt;/td&gt;
&lt;td&gt;DeepL, or Mozhi&lt;/td&gt;
&lt;td&gt;Play Store / F-Droid&lt;/td&gt;
&lt;td&gt;DeepL wins on quality. Mozhi is a FOSS frontend to multiple translation backends.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YouTube (viewing)&lt;/td&gt;
&lt;td&gt;NewPipe or LibreTube&lt;/td&gt;
&lt;td&gt;F-Droid&lt;/td&gt;
&lt;td&gt;No Google login, no ads, no algorithm. Cannot comment, like, or upload. See comparison below.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Messages&lt;/td&gt;
&lt;td&gt;Fossify Messages&lt;/td&gt;
&lt;td&gt;F-Droid or Play Store&lt;/td&gt;
&lt;td&gt;GPL-3.0. See RCS caveat below.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Wallet&lt;/td&gt;
&lt;td&gt;Physical cards plus Privacy.com virtual numbers&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Tap-to-pay is broken on GrapheneOS by design (Play Integrity required).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Pay&lt;/td&gt;
&lt;td&gt;Same as Wallet&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;Same constraint.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android Auto&lt;/td&gt;
&lt;td&gt;GrapheneOS build of Android Auto&lt;/td&gt;
&lt;td&gt;GrapheneOS Apps repo (&lt;span class=&quot;settings-path&quot;&gt;Apps&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;GrapheneOS apps&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Android Auto&lt;/span&gt;)&lt;/td&gt;
&lt;td&gt;Runs with reduced privileges versus the stock build.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Voice&lt;/td&gt;
&lt;td&gt;Carrier number, or JMP.chat&lt;/td&gt;
&lt;td&gt;Carrier / &lt;a href=&quot;https://jmp.chat/&quot;&gt;jmp.chat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JMP.chat is a privacy-respecting alternative with XMPP delivery.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;NewPipe versus Firefox plus uBlock for YouTube viewing&lt;/h3&gt;
&lt;p&gt;Both block ads. The mechanism is different and the tradeoffs are worth naming.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NewPipe pulls video metadata and streams without ever talking to YouTube&#39;s player or ad endpoints. Ads are never fetched. There is no Google account in the loop and no behavioral profile is built.&lt;/li&gt;
&lt;li&gt;Firefox plus uBlock loads the standard YouTube page and blocks ad requests at the network layer. The session still touches Google&#39;s player, still ships a fingerprint, and still feeds the watch-history graph if signed in.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NewPipe wins on telemetry exposure. Firefox plus uBlock wins on commenting, subscriptions, and engagement features. A common split: NewPipe for daily viewing, the official app (or web) signed in for channel admin or comments.&lt;/p&gt;
&lt;h3&gt;RCS caveat&lt;/h3&gt;
&lt;p&gt;No FOSS RCS client exists. Google holds the Jibe infrastructure that powers RCS for Android. Apple negotiated direct access. Nobody else has. Switching from Google Messages to Fossify Messages means RCS-capable contacts silently downgrade to SMS on the device. Group chats with iPhone users and Google Messages users will still work, but as SMS/MMS, with the quality loss that implies. For anything richer, push contacts to Signal.&lt;/p&gt;
&lt;h3&gt;Phased switching&lt;/h3&gt;
&lt;p&gt;Start with three high-impact, low-friction swaps:&lt;/p&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Set DuckDuckGo (or Kagi) as the default search engine in Vanadium and IronFox.&lt;/li&gt;
&lt;li&gt;Install Organic Maps as a secondary mapping app for routes that do not need to live in a Google account.&lt;/li&gt;
&lt;li&gt;Install NewPipe for daily YouTube viewing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These three cost nothing, break nothing, and meaningfully cut the daily query volume sent to Google. Add Proton Mail plus an alias service next if a full mail migration is on the table. Layer the rest in as the friction allows.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Concentrating mail, calendar, contacts, photos, documents, search, navigation, and video on a single provider creates a single point of disclosure. One legal request, one credential compromise, or one account-level suspension can expose or sever access to every service at once. Even absent any adversarial event, the metadata graph a single provider can assemble across all of those signals is far richer than the sum of its parts.&lt;/p&gt;
&lt;p&gt;Partial swaps still reduce that exposure. Every query routed to a different search engine, every route plotted in a different map app, and every video watched outside the logged-in client trims the behavioral profile and improves exit-readiness for a later, fuller migration. Exit-readiness is itself the point: services that have been used in parallel for months are far cheaper to switch to under pressure than services adopted cold.&lt;/p&gt;
&lt;p&gt;Some Google services are genuinely hard to leave. Calendar invites, shared documents, and YouTube channels carry network effects that the user does not fully control. Professional and educational ecosystems often mandate Google accounts. A realistic plan accepts that the migration is partial and gradual, and prioritizes the swaps with the highest ratio of exposure reduction to daily friction.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;full-degoogle-replacing-gmail-calendar-drive&quot;&gt;
&lt;h2&gt;◆ [Full De-Google] Replacing Gmail, Calendar, and Drive ◆&lt;/h2&gt;
&lt;p&gt;This section covers the optional second phase: leaving Gmail, Google Calendar, Google Contacts, and Google Drive for &lt;a href=&quot;https://proton.me/&quot;&gt;Proton&lt;/a&gt;. Skip it if the partial setup is enough. Return to it later if it is not.&lt;/p&gt;
&lt;h3&gt;Replace Gmail with Proton Mail&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Create a Proton account. The free tier works for evaluation; paid tiers add custom domains and more storage.&lt;/li&gt;
&lt;li&gt;Export Gmail history via &lt;a href=&quot;https://takeout.google.com/&quot;&gt;Google Takeout&lt;/a&gt; (select Mail) as MBOX.&lt;/li&gt;
&lt;li&gt;Import the MBOX into Proton Mail using Proton&#39;s Import-Export tool, or use the Easy Switch web flow to pull directly from Gmail with OAuth.&lt;/li&gt;
&lt;li&gt;Set up email aliases through &lt;a href=&quot;https://simplelogin.io/&quot;&gt;SimpleLogin&lt;/a&gt; (owned by Proton) or &lt;a href=&quot;https://addy.io/&quot;&gt;Addy.io&lt;/a&gt; for every account where Gmail was the contact address.&lt;/li&gt;
&lt;li&gt;Migrate accounts to the new aliases one at a time, working through a password manager&#39;s login list top to bottom.&lt;/li&gt;
&lt;li&gt;Set a Gmail auto-responder pointing to the Proton address for the transition window.&lt;/li&gt;
&lt;li&gt;Once mail traffic to Gmail has dropped to near zero (typically 6+ months), wind down the Gmail account. Keep it dormant for a while before deleting in case a forgotten service needs a password reset.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;dgw-callout dgw-callout--warn&quot;&gt;&lt;strong&gt;Aliases are not optional.&lt;/strong&gt; An alias service like SimpleLogin or Addy.io is essential infrastructure for full de-Google. Without it, the new Proton address ends up exposed on every service signup, which recreates the &quot;one inbox knows everything&quot; problem the migration was meant to solve. Use a unique alias per service. When one starts receiving spam, disable that alias and the source is known.&lt;/div&gt;
&lt;h3&gt;Replace Google Calendar with Proton Calendar&lt;/h3&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;In Google Calendar, go to &lt;span class=&quot;settings-path&quot;&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Import &amp;amp; export&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Export&lt;/span&gt;. This produces an ICS archive.&lt;/li&gt;
&lt;li&gt;Import the ICS files into Proton Calendar.&lt;/li&gt;
&lt;li&gt;In DAVx5 on the Pixel, add a new account pointing at Proton&#39;s CalDAV endpoint (&lt;span class=&quot;settings-path&quot;&gt;Proton Mail web&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Settings&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Calendar&lt;/span&gt; shows the URL and app password to use).&lt;/li&gt;
&lt;li&gt;Verify events sync into the system calendar alongside the existing Google ones.&lt;/li&gt;
&lt;li&gt;Once parity is confirmed, remove the Google account from DAVx5 and delete the Google calendars from calendar.google.com.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Replace Google Contacts with Proton Contacts&lt;/h3&gt;
&lt;p&gt;Proton Contacts ships as part of Proton Mail.&lt;/p&gt;
&lt;ol class=&quot;steps&quot;&gt;
&lt;li&gt;Export from &lt;a href=&quot;https://contacts.google.com/&quot;&gt;contacts.google.com&lt;/a&gt; as vCard.&lt;/li&gt;
&lt;li&gt;Import into Proton Mail&#39;s Contacts panel.&lt;/li&gt;
&lt;li&gt;DAVx5 syncs Proton CardDAV to the system ContactsProvider the same way it did with Google, so apps that read the OS contacts database (dialer, Signal, Fossify Messages) keep working.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Replace Google Drive with Proton Drive&lt;/h3&gt;
&lt;p&gt;Move files over in batches. Update any shared links posted publicly or sent to collaborators. Proton Drive has desktop and mobile clients, plus a web interface. Keep a local copy of anything irreplaceable during the move.&lt;/p&gt;
&lt;h3&gt;YouTube&lt;/h3&gt;
&lt;p&gt;YouTube is the hardest Google service to leave cleanly. For viewing, NewPipe or LibreTube on the phone and a browser tab on desktop cover most use cases without a Google account. For uploads, the federated alternative is &lt;a href=&quot;https://joinpeertube.org/&quot;&gt;PeerTube&lt;/a&gt;, but reach is dramatically smaller. A reasonable compromise: keep an existing channel for archival, stop uploading new content there, and treat YouTube as view-only.&lt;/p&gt;
&lt;h3&gt;Google Voice and phone numbers&lt;/h3&gt;
&lt;p&gt;See the carrier section in the Alternatives chapter. &lt;a href=&quot;https://jmp.chat/&quot;&gt;JMP.chat&lt;/a&gt; provides a real phone number routed over XMPP and is one of the few non-Google options for a US number tied to no carrier account.&lt;/p&gt;
&lt;h3&gt;Realistic timeline&lt;/h3&gt;
&lt;p&gt;A full de-Google migration is a 6 to 12 month project for an average user with normal account complexity. Some accounts will resist a clean migration: legacy services with no email-change flow, accounts tied to a phone number that triggers re-verification, work accounts outside personal control. Treat the move as a transition rather than a flip. The Gmail account stays open and forwarding until traffic to it goes quiet on its own.&lt;/p&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Email is the root credential for most of online identity. Password resets, signup confirmations, account recovery, billing notices, and second-factor fallbacks all flow through the inbox. Whoever runs the mail server can read, scan, profile, or be compelled to hand over that traffic. Moving mail to a provider that cannot read message bodies (Proton uses zero-access encryption for stored mail) removes the single largest source of passive data collection in a typical digital life.&lt;/p&gt;
&lt;p&gt;Aliases compound that benefit. When every service sees a different address, cross-service correlation by email becomes much harder for data brokers and breach aggregators. A breach at one vendor leaks one alias, not the master address, and that alias can be disabled without affecting anything else. Without aliases, the new mail provider eventually accumulates the same identity graph the old one had; the work was for nothing.&lt;/p&gt;
&lt;p&gt;Timing matters because migrations are easier when they are voluntary. Account-change flows, export tools, and forwarding rules all work better before a provider deprecates them, raises prices, or changes terms. Doing the move on a relaxed schedule, with months of overlap, is far less stressful than doing it under a deadline imposed by someone else.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;section id=&quot;common-pitfalls&quot;&gt;
&lt;h2&gt;◆ Common Pitfalls ◆&lt;/h2&gt;
&lt;p&gt;Most migrations fail in the same handful of ways. Work through this list before flashing, and again after first boot.&lt;/p&gt;
&lt;h3&gt;Credentials and recovery&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2FA recovery codes not on paper.&lt;/strong&gt; The classic trap: the Bitwarden master 2FA seed lives in Proton Authenticator, which is itself locked behind Bitwarden. Print every recovery code before starting. Treat paper as the root of trust.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crypto seeds only in a password manager.&lt;/strong&gt; Same problem, worse outcome. Write seed phrases on paper (or metal) before wipe.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skipping the verified boot key hash check during first boot.&lt;/strong&gt; Without verifying the hash against the &lt;a href=&quot;https://grapheneos.org/install/web&quot;&gt;official device list&lt;/a&gt;, there is no cryptographic guarantee the running OS is the genuine GrapheneOS build. For the Pixel 9 Pro, the expected value is &lt;code&gt;f729cab861da1b83fdfab402fc9480758f2ae78ee0b61c1f2137dd1ab7076e86&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Backup and restore&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WhatsApp restore failure.&lt;/strong&gt; The adb-push restore path works roughly 80% of the time. As a read-only fallback, export per-chat archives from WhatsApp Desktop before the wipe so message history survives even if the in-app restore fails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS Removable Volumes permission revoking mid-flow.&lt;/strong&gt; The per-mount toggle under &lt;span class=&quot;settings-path&quot;&gt;Files &amp;amp; Folders&lt;span class=&quot;settings-path-sep&quot;&gt;→&lt;/span&gt;Removable Volumes&lt;/span&gt; can revoke itself after a drive remount, breaking an adb pull halfway through. Grant Full Disk Access (broader and stickier) to Terminal upfront instead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forgetting the eSIM survives the wipe.&lt;/strong&gt; The eSIM profile lives on the eUICC chip, not in user data. Do not preemptively request a replacement from the carrier unless they confirm the old profile is dead. US Mobile and most major carriers reactivate after one reboot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Apps and accounts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cash App and Venmo lock for 24 to 48 hours post-wipe.&lt;/strong&gt; Pre-deregister both from their web dashboards before flashing to skip the fraud-hold dance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trying to reinstall every previously installed app on day one.&lt;/strong&gt; Most users touch only 30 to 50 apps. Treat the wipe as a chance to cut bloat, not recreate it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assuming Google Contacts and Calendar will sync automatically after signing into Google.&lt;/strong&gt; They will not. Install DAVx5 and configure the Google account there (see the Fix Sync section).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choosing Aurora Store instead of Google Play Store.&lt;/strong&gt; &lt;a href=&quot;https://grapheneos.org/usage&quot;&gt;GrapheneOS recommends sandboxed Google Play&lt;/a&gt; over Aurora. Aurora&#39;s shared-account mode is rate-limited and offers no real privacy gain on GrapheneOS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Browser choices&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Using Mull because older guides recommend it.&lt;/strong&gt; &lt;a href=&quot;https://gitlab.com/divested-mobile/mull-fenix&quot;&gt;Mull is archived&lt;/a&gt; and no longer maintained. Use &lt;a href=&quot;https://gitlab.com/ironfox-oss/IronFox&quot;&gt;IronFox&lt;/a&gt; instead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Using vanilla Firefox as the primary browser.&lt;/strong&gt; Firefox on Android lacks per-site process isolation. Pick IronFox as the Gecko-family choice and pair it with Vanadium for sensitive browsing.&lt;/li&gt;
&lt;/ul&gt;
&lt;details class=&quot;dgw-why&quot;&gt;&lt;summary&gt;Why this matters&lt;/summary&gt;
&lt;p&gt;Migration projects fail in predictable patterns. The most common failure mode is circular credential dependency: a recovery code locked behind the very account it would recover. The second is assuming a sync or restore path &amp;quot;just works&amp;quot; without testing it before the point of no return. The third is rushing the irreversible step (the wipe) before the reversible preparation (paper backups, pre-deregistration, export of chat archives) is complete.&lt;/p&gt;
&lt;p&gt;A printed checklist and physical (paper or metal) backup of every credential breaks both loops. Paper does not depend on a device, a network, or a vendor staying online. Working through a fixed list also slows the process down enough to catch the small mistakes (a missing seed phrase, an unconfirmed eSIM, a 2FA app left on the old device) that turn a clean migration into a multi-day recovery effort.&lt;/p&gt;
&lt;/details&gt;
&lt;/section&gt;
&lt;aside class=&quot;dgw-checklist&quot; data-widget=&quot;checklist&quot; aria-label=&quot;Migration checklist&quot;&gt;&lt;/aside&gt;
&lt;section id=&quot;next-steps&quot;&gt;
&lt;h2&gt;◆ Next Steps ◆&lt;/h2&gt;
&lt;p&gt;For a first read-through, work the sections in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Two Paths (partial vs full de-Google)&lt;/li&gt;
&lt;li&gt;Back Up The Old Phone&lt;/li&gt;
&lt;li&gt;Flash GrapheneOS&lt;/li&gt;
&lt;li&gt;Harden&lt;/li&gt;
&lt;li&gt;Install Sources (Sandboxed Google Play, F-Droid, Obtainium)&lt;/li&gt;
&lt;li&gt;Restore (apps, data, WhatsApp, Signal)&lt;/li&gt;
&lt;li&gt;Fix Sync (DAVx5 for contacts and calendar)&lt;/li&gt;
&lt;li&gt;Browsers (Vanadium plus IronFox)&lt;/li&gt;
&lt;li&gt;Alternatives (NewPipe, Organic Maps, Fossify Messages, DuckDuckGo)&lt;/li&gt;
&lt;li&gt;Full De-Google (only if going past the partial path)&lt;/li&gt;
&lt;li&gt;Common Pitfalls, re-read the day before the wipe&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If a specific choice is unclear (Partial vs Full, whether to install Sandboxed Google Play, Aurora Store vs Google Play Store, Fossify Messages vs Google Messages), use the decision-tree widget earlier in this guide. It encodes the same tradeoffs without the prose.&lt;/p&gt;
&lt;h3&gt;Shelf life&lt;/h3&gt;
&lt;p&gt;This is a 2026 snapshot. Three things are likely to date it within months:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://keepandroidopen.org/&quot;&gt;September 2026 Android sideloading deadline&lt;/a&gt; and whatever Google ships around developer ID verification.&lt;/li&gt;
&lt;li&gt;Follow-on disclosures and patch waves after the &lt;a href=&quot;https://red.anthropic.com/2026/mythos-preview/&quot;&gt;Mythos Preview&lt;/a&gt; capability writeup.&lt;/li&gt;
&lt;li&gt;Ongoing GrapheneOS releases that change defaults or add features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Treat this guide as a starting point, not a frozen recipe.&lt;/p&gt;
&lt;h3&gt;Sources worth subscribing to&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://grapheneos.org/&quot;&gt;grapheneos.org&lt;/a&gt; for release notes and security advisories.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://keepandroidopen.org/&quot;&gt;keepandroidopen.org&lt;/a&gt; for sideloading and developer-verification status.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://privsec.dev/posts/android/banking-applications-compatibility-with-grapheneos/&quot;&gt;PrivSec banking compatibility list&lt;/a&gt; before installing any new bank app.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://privacyguides.org/en/android/&quot;&gt;Privacy Guides Android page&lt;/a&gt; for ongoing comparisons of ROMs and app alternatives.&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
</content>
    </entry>
</feed>
