> Part of the walkerOS documentation. Project overview and full index: <https://www.walkeros.io/llms.txt>

# Plausible Analytics

[Web](#)[ Source code](https://github.com/elbwalker/walkerOS/tree/main/packages/web/destinations/plausible)[ Package](https://www.npmjs.com/package/@walkeros/web-destination-plausible)

[Plausible Analytics](https://plausible.io/) is a simple, privacy-friendly Google Analytics alternative. With `loadScript: true` the destination loads Plausible's manual script (`script.manual.js`) for your `domain`. It installs the `plausible` queue function and sends each event as `plausible(name, data)`.

Where this fits

Plausible is a **web destination** in the walkerOS flow:

## Installation[​](#installation "Direct link to Installation")

```bash
npm install @walkeros/web-destination-plausible
```

* Integrated
* Bundled

```typescript
import { startFlow } from '@walkeros/collector';
import { destinationPlausible } from '@walkeros/web-destination-plausible';

await startFlow({
  destinations: {
    plausible: {
      code: destinationPlausible,
      config: {
        loadScript: true,
        settings: {
          domain: 'walkeros.io',
        },
        mapping: {
          page: { view: { name: 'pageview' } },
        },
      },
    },
  },
});
```

Add to your `flow.json` destinations:

```json
"destinations": {
  "plausible": {
    "package": "@walkeros/web-destination-plausible",
    "config": {
      "loadScript": true,
      "settings": {
        "domain": "walkeros.io"
      },
      "mapping": {
        "page": { "view": { "name": "pageview" } }
      }
    }
  }
}
```

[See bundled mode setup](/preview/pr-749/docs/getting-started/modes/bundled.md) | [CLI reference](/preview/pr-749/docs/apps/cli.md)

## Configuration[​](#configuration "Direct link to Configuration")

This destination uses the standard destination config wrapper (consent, data, env, id, ...). For the shared fields see [destination configuration](/docs/destinations#configuration). Package-specific fields live under `config.settings` and are listed below.

## Settings[​](#settings "Direct link to Settings")

| Property | Type     | Description                                        | More |
| -------- | -------- | -------------------------------------------------- | ---- |
| `domain` | `string` | The domain of your site as registered in Plausible |      |

## Mapping[​](#mapping "Direct link to Mapping")

This package does not define custom rule-level settings. For the standard rule fields (consent, condition, data, batch, name, policy) see [mapping](/docs/mapping).

## Examples

### Custom event

A generic entity action fires a Plausible custom event with mapped scalar props.

Event

```json
{
  "name": "entity action",
  "data": {
    "string": "foo",
    "number": 1,
    "boolean": true,
    "array": [
      0,
      "text",
      false
    ]
  },
  "context": {
    "dev": [
      "test",
      1
    ]
  },
  "globals": {
    "lang": "elb"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "child",
      "data": {
        "is": "subordinated"
      }
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "7eec6bbe5a9ea285",
  "trigger": "test",
  "entity": "entity",
  "action": "action",
  "timestamp": 1700000201,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```json
{
  "name": "Custom Event",
  "data": {
    "map": {
      "props": {
        "map": {
          "string": "data.string",
          "number": "data.number",
          "boolean": "data.boolean"
        }
      }
    }
  }
}
```

Out

```javascript
plausible("Custom Event", {
  "props": {
    "string": "foo",
    "number": 1,
    "boolean": true
  }
})
```

### Initialization

Destination bootstrap loads the Plausible script for the configured domain and installs the queue.

Event

```json
{
  "loadScript": true,
  "settings": {
    "domain": "example.com"
  }
}
```

Out

```javascript
script.appendChild({
  "src": "https://plausible.io/js/script.manual.js",
  "domain": "example.com"
})
```

### Purchase

A completed order fires a Plausible purchase event with revenue currency and amount.

Event

```json
{
  "name": "order complete",
  "data": {
    "id": "0rd3r1d",
    "currency": "EUR",
    "shipping": 5.22,
    "taxes": 73.76,
    "total": 555
  },
  "context": {
    "shopping": [
      "complete",
      0
    ]
  },
  "globals": {
    "pagegroup": "shop"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "product",
      "data": {
        "id": "ers",
        "name": "Everyday Ruck Snack",
        "color": "black",
        "size": "l",
        "price": 420
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "product",
      "data": {
        "id": "cc",
        "name": "Cool Cap",
        "size": "one size",
        "price": 42
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "gift",
      "data": {
        "name": "Surprise"
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "2aea272726729086",
  "trigger": "load",
  "entity": "order",
  "action": "complete",
  "timestamp": 1700000200,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```json
{
  "name": "purchase",
  "data": {
    "map": {
      "revenue": {
        "map": {
          "currency": {
            "value": "EUR"
          },
          "amount": "data.total"
        }
      }
    }
  }
}
```

Out

```javascript
plausible("purchase", {
  "revenue": {
    "currency": "EUR",
    "amount": 555
  }
})
```

## Page views and custom events[​](#page-views-and-custom-events "Direct link to Page views and custom events")

The manual script records no page view by itself. Plausible counts a page view for an event named `pageview`, so the example above maps `page view` to it. Without that rule, a walkerOS `page view` reaches Plausible as a custom event named `page view`.

Every other event is a custom event named after the rule's `name`, or the walkerOS event name. Plausible accepts custom properties with scalar values only (strings, numbers, booleans) under `props`, and revenue as `{ currency, amount }`, as the examples above show.

Without `loadScript`, the calls wait in the `plausible` queue until a Plausible script on your page processes them.
