> For the complete documentation index, see [llms.txt](https://docs.codemash.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.codemash.io/cloud/push/integrations/providers/chrome-plugin.md).

# Chrome Plugin Push

Connect Chrome Plugin Push as a Push integration provider.

> Deliver push notifications to a Chrome extension you publish.

*Last updated 2026-09-11 · Applies to any project with the Push module enabled*

## Why it exists

A Chrome extension can receive push the way a website does, but the message has to be addressed to the extension rather than to a page. That takes the extension's id plus a VAPID key pair — a public and a private key that together prove every message comes from the same sender.

## When you'd use it

* A password-manager extension tells the user that a shared vault changed.
* A support-desk extension pings the agent when a new ticket arrives.

## Where to find it

Push → Integrations → **Add New Integration** → Chrome Plugin Push · `/projects/<project>/push/integrations/new/chrome-plugin`

## Before you start

Requires a role that carries `…:notifications:push:settings:manage` — normally **Owner** or **Admin**. Collect these first:

* A published Chrome extension and its **extension id** from the Chrome Web Store.
* A **VAPID key pair** — generate one with `npx web-push generate-vapid-keys` and keep both halves.
* A contact address for the optional subject field.

## How to connect it

1. Open **Push → Integrations → Add New Integration** and pick **Chrome Plugin Push**.
2. Fill the fields below. Create and edit use the same form; editing loads the saved values, but secrets are never shown back.
3. Click **Create**.
4. Open the saved integration and choose **Set as default** if this provider should be used when a template names none. Defaults are per environment.
5. Choose **Test**. One real notification is sent; confirm you received it with **I received the push** so the test is recorded as passed.

**What "working" looks like:** the integration is listed as **Enabled**, carries the **Default for \<environment>** badge if you set it, and its last test is recorded as successful.

## Fields

| Field                        | What it means                                                                    | Example                            |
| ---------------------------- | -------------------------------------------------------------------------------- | ---------------------------------- |
| **Integration Name**         | The name in your integrations list.                                              | `Chrome extension`                 |
| **Chrome Extension Id**      | The extension that receives the notifications.                                   | `aapocclcgogkmnckokdopfmhonfmgoek` |
| **VAPID Public Key**         | The public half of the key pair. Your extension subscribes with the same value.  | `BG…`                              |
| **VAPID Private Key**        | The private half. Never put this in the extension's code.                        | `V…`                               |
| **VAPID Subject (optional)** | A contact address push services can use if something goes wrong with your sends. | `mailto:admin@mycompany.com`       |

## Good to know

* The public key here and the key your extension subscribes with must be **the same**. Change the pair and every existing subscription stops working.
* The private key belongs on the server only. Shipping it inside the extension hands anyone the ability to notify your users.
* The subject is optional but worth filling in — some push services deprioritise senders with no contact address.
* Extension ids differ between a locally loaded extension and the published one.

## Do it in code

{% tabs %}
{% tab title="JavaScript / TypeScript" %}

```ts
await norbix.hub.notifications.savePushIntegration({
  projectId: '<your-project-id>',
  integration: {
    provider: 'ChromePush',
    integrationName: 'Chrome extension',
    extensionId: 'aapocclcgogkmnckokdopfmhonfmgoek',
    vapidPublicKey: 'BG…',
    vapidPrivateKey: 'V…',
    subject: 'mailto:admin@mycompany.com',
  },
});
```

{% endtab %}

{% tab title="Python" %}

```python
norbix.notifications.save_push_integration(
    projectId="<your-project-id>",
    integration={"provider": "ChromePush", "integrationName": "Chrome extension"},
)
```

{% endtab %}

{% tab title="Go" %}

```go
var out map[string]any
err := c.Hub.Notifications.SavePushIntegration(ctx, map[string]any{
	"projectId":   "<your-project-id>",
	"integration": map[string]any{"provider": "ChromePush", "integrationName": "Chrome extension"},
}, &out)
```

{% endtab %}

{% tab title=".NET" %}
Not available yet — the .NET SDK has no push client methods. Call the REST endpoint below.
{% endtab %}
{% endtabs %}

The Python and Go snippets are shortened — the remaining credential fields are the same keys shown in the TypeScript one and in the table above.

Reference: [Save Push Integration](/sdks-and-cli/notifications/push/save-push-integration.md) · [Test](/sdks-and-cli/notifications/push/test-push-integration.md) · [Set as default](/sdks-and-cli/notifications/push/set-push-integration-as-default.md) CLI: no integration commands today.

## API reference

Endpoints: [Save Push Integration](/api-reference/notifications/push/save-push-integration.md), [Test Push Integration](/api-reference/notifications/push/test-push-integration.md), [Confirm human delivery](/api-reference/notifications/push/confirm-push-integration-human-delivery.md), [Push](/api-reference/notifications/push.md).

## Related

[Providers](/cloud/push/integrations/providers.md) · [Integrations](/cloud/push/integrations.md) · [Templates](/cloud/push/templates.md)
