ShipAddons

The Google Workspace Add-on Boilerplate

Visit Website
December 27, 2025 This is How I ship Google Editor add-ons as production-ready products

I’ve shipped multiple Google Editor add-ons, and after a few attempts, I stopped treating them like “scripts” and started treating them like real products.

Here’s the approach that finally worked for me:

1. Keep Apps Script thin
Apps Script is great for editor integration and OAuth, but painful for everything else.
I use it only as a bridge, entry points, permissions, and communication.

2. Move the real app outside Google

  • React frontend

  • External backend (API, auth, billing, DB)

  • Proper environments (dev / prod)

This removes most runtime, tooling, and scaling limitations.

3. Build like SaaS from day one

  • Authentication and user identity

  • Billing and plans

  • Analytics and error tracking

  • Versioned deployments

4. Accept the tradeoffs early
Yes, it’s more complex than pure Apps Script.
But it’s much simpler than trying to bolt these things on later.

I wrote a short technical overview of the full architecture here (no fluff):
https://www.shipaddons.com/docs/quick-overview

Hopefully useful to anyone thinking about shipping a serious Google Workspace add-on.

Comment

December 23, 2025 How do you manage auth for Google add-ons? This is how I solved authentication for Google editor addons.

Step by step:

  1. User installs the add-on

  2. Google already knows who the user is

  3. The add-on requests the user’s Google identity token (ScriptApp.getIdentityToken();)

  4. That token is verified on the backend (nextjs, fastapi, etc)

  5. A backend session is created (eg: Supabase)

  6. The user is now authenticated across:

    1. the add-on UI

    2. the backend API

    3. Stripe (for billing)

The scope require to get the id token is:

"oauthScopes": [ "openid"

Check out the details -> https://www.shipaddons.com/docs/features/authentication


Comment

About

After building multiple Google Workspace add-ons, I kept running into the same pain: setup, auth, and billing took longer than the actual product. So I packaged everything I learned into a production-ready boilerplate.