---
title: "Shipping a Nuxt PWA straight to Google Play."
date: 2021-06-22
url: https://remiam.co.uk/notes/trusted-web-activities-nuxt-pwa
tags: [PWA, TWA, Nuxt, Android]
read_time_minutes: 7
description: "Trusted Web Activities, Nuxt PWAs and the Totton Timber build: turning a single Nuxt codebase into both a website and an Android app on Google Play."
---

# Shipping a Nuxt PWA straight to Google Play.

*Published 2021-06-22 · 7 min read · by Liam (Remiam)*

Trusted Web Activities turned our Totton Timber PWA into an installable Android app — without a single line of Kotlin. Here's how, and when it's worth it.

Totton Timber wanted to rank on Google, integrate with their Ten-25 stock system, and have an installable app on the Play Store. They didn't want three codebases. We delivered one Nuxt PWA and wrapped it as a Trusted Web Activity.

## Why TWA, not a real native shell

A TWA is a Chrome window pretending it isn't one. You get the full-screen feel of a native app, no browser chrome, and a real Play Store listing — but every line of code is still the same Nuxt application that runs on the public web. One build, one bug surface, one team.

## The setup, step by step

- Ship the Nuxt PWA to production at a real HTTPS URL with a complete web app manifest.
- Publish a Digital Asset Links file at /.well-known/assetlinks.json that proves the Play Store app is allowed to wrap your domain.
- Use Bubblewrap (Google's CLI) to generate the Android wrapper app from your manifest URL.
- Sign the wrapper APK / AAB with a Play Store key and submit it as a normal Play release.
- When the URL updates, the app updates. No new Play release required for content changes.

## Comparison — TWA vs Capacitor vs Native

| Concern | TWA | Capacitor | Native (Kotlin) |
| --- | --- | --- | --- |
| Code shared with web | 100% | ~95% | 0% |
| Native API access | Limited (browser APIs) | Most native APIs via plugins | Full |
| iOS support | No | Yes | No (Android-only) |
| Build complexity | Low | Medium | High |
| Play Store presence | Yes | Yes | Yes |
| Time to first ship | Days | Weeks | Months |

*Wrapping a web app for Play Store — TWA vs Capacitor vs native.*

## When it's the right call

- Your product is fundamentally web-based — content, search, stock, dashboards.
- You want the discoverability of the Play Store but don't need iOS-only APIs.
- You don't want to manage two release cycles for the same product.

## When it isn't

- You need iOS — Apple still doesn't support TWAs.
- You're shipping anything that depends on tight native APIs (deep Bluetooth, advanced camera, AR).
- Your team isn't comfortable owning a service worker.

> For Totton Timber it was the right call. The PWA still ranks. The Play Store version is still downloaded. The codebase is still one.

For Totton Timber it was the right call. The PWA still ranks. The Play Store version is still downloaded. The codebase is still one.

## References

1. [Trusted Web Activities — Chrome documentation](https://developer.chrome.com/docs/android/trusted-web-activity)
2. [Bubblewrap — Google CLI for wrapping PWAs](https://github.com/GoogleChromeLabs/bubblewrap)
3. [Digital Asset Links specification](https://developers.google.com/digital-asset-links/v1/getting-started)
