# Implement tracking with Snowtype
> Generate and implement tracking code from your event specifications using Snowtype, Console code snippets, or manual SDK integration.
> Source: https://docs.snowplow.io/docs/event-studio/implement-tracking/
> Documentation index: https://docs.snowplow.io/llms.txt

- Cloud: available
- Private Managed Cloud: available
- Self-Hosted: not available
- Add-on: not available

Snowtype is available for Snowplow CDI customers only.

Find out more about [Snowplow CDI](/docs/cdi/) and [product availability](/docs/get-started/feature-comparison/), or contact [Support](https://support.snowplow.io) to upgrade.

Once you've defined your [tracking plans](/docs/event-studio/tracking-plans/) and [event specifications](/docs/event-studio/tracking-plans/event-specifications/), the next step is implementing the tracking code in your applications.

The best way to implement tracking is to use our CLI code generation tool, **Snowtype**. Snowtype reads your [event specifications](/docs/event-studio/tracking-plans/event-specifications/) and [data structures](/docs/event-studio/data-structures/) from your Snowplow account, and generates type-safe tracking code for the language and tracker you specify.

This provides several key advantages over manual implementation:

- Quicker implementation: reduce the work needed to produce production-ready tracking code
- Type safety: ensure your tracking code is consistent with your schemas and catch errors before they reach your pipeline
- Workflow integration: use CI/CD GitOps-like processes to [keep your tracking code in sync](/docs/event-studio/implement-tracking/keep-code-up-to-date/) with your schemas

For custom tracking on web, you also have the option of using the ready-to-use event specification code snippets in [Console](https://console.snowplowanalytics.com), with or without Snowtype. See below for details.

> **Tip: Implement tracking with your AI assistant**
>
> A coding agent connected to the Snowplow MCP server can read your tracking plans and event specifications, add the tracking to your application, and check that the events arrive. For example: "Implement the event specifications from our checkout tracking plan in this app, and confirm each event reaches my development pipeline."
>
> Install the [Snowplow MCP server](/docs/ai/snowplow-mcp/) and [skills](/docs/ai/skills/) in your coding agent, such as Claude Code, Cursor, or Codex, with `npx plugins add snowplow/skills`. In Console, the [Snowplow Assistant](/docs/ai/console-agent/) has the same tools.

## Snowtype workflow

The workflow for using Snowtype is:

1. **Define** your events and entities in [Console](https://console.snowplowanalytics.com) or [programmatically](/docs/event-studio/programmatic-management/).
2. **Generate** tracking code by [running Snowtype](/docs/event-studio/implement-tracking/generate-tracking-code/) in your project. It produces typed functions you call instead of constructing event payloads manually.
3. **Track** events using the generated functions in your application code.
4. **Update** when schemas change. Snowtype can [detect new versions](/docs/event-studio/implement-tracking/keep-code-up-to-date/) and regenerate your code.

## Supported trackers

Snowtype generates code for the following Snowplow trackers:

| Tracker                                                 | Language               |
| ------------------------------------------------------- | ---------------------- |
| [Browser](/docs/sources/web-trackers/)                  | TypeScript, JavaScript |
| [JavaScript](/docs/sources/web-trackers/)               | JavaScript             |
| [iOS](/docs/sources/mobile-trackers/)                   | Swift                  |
| [Android](/docs/sources/mobile-trackers/)               | Kotlin                 |
| [React Native](/docs/sources/react-native-tracker/)     | TypeScript             |
| [Flutter](/docs/sources/flutter-tracker/)               | Dart                   |
| [Node.js](/docs/sources/node-js-tracker/)               | TypeScript, JavaScript |
| [Go](/docs/sources/golang-tracker/)                     | Go                     |
| [Java](/docs/sources/java-tracker/)                     | Java                   |
| [Google Tag Manager](/docs/sources/google-tag-manager/) | JavaScript             |

Check out the generated code examples for [data structures](/docs/event-studio/implement-tracking/generate-tracking-code/example-data-structures/) and [event specifications](/docs/event-studio/implement-tracking/generate-tracking-code/example-event-specs/) for each language to see how Snowtype integrates with each tracker.

## Console code snippets

When viewing an [event specification](/docs/event-studio/tracking-plans/event-specifications/) in Console, the **Working with this event** section provides ready-to-use code snippets.

The snippets in the **Implementation** tab show the exact tracking calls needed for each event, including all required properties and entities.

> **Note: Available for custom web events only**
>
> Code snippets are available for the JavaScript tracker only, for event specifications with custom event data structures.

Here's an example snippet for the JavaScript tracker. It provides a `trackSelfDescribingEvent` call for the event specification, with the correct schema references and properties.

The example event specification has an event data structure named `article_click`, and one entity data structure, `article`. The snippet also includes an autogenerated `event_specification` entity. This helps with analysis as it's a direct link between the tracked event and the tracking plan.

To use your snippet, paste it into your application code, and provide the appropriate property values.

```javascript
window.snowplow("trackSelfDescribingEvent", {
    "event": {
        "schema": "iglu:com.example/article_click/jsonschema/1-0-1",
        "data": {
            "name": "", // string - Required - maxLength: 1000
            "location": "", // string - Nullable - maxLength: 1000
        }
    },
    "context": [
        // Entity: article (min: 0)
        {
            "schema": "iglu:com.example/article/jsonschema/3-0-0",
            "data": {
                "publish_date": "", // string - Nullable
                "content_id": "", // string - Nullable
            }
        },
        // System entity. Please do not edit it.
        {
            "schema": "iglu:com.snowplowanalytics.snowplow/event_specification/jsonschema/1-0-3",
            "data": {
                "id": "0a0ef8bb-314c-4973-8988-f192e8714d68",
                "name": "Article Click",
                "data_product_id": "28a6316a-47fd-473b-b5a1-00c555ba25e4",
                "data_product_name": "Article Performance",
                "data_product_domain": "Marketing"
            }
        }
    ]
});
```

Use the **Show Snowtype code** toggle to display the specific Snowtype function name to call in your tracking implementation. Note that it relies on you having generated the required Snowtype code in your project.

![\&quot;Working with this event\&quot; panel on the Implementation tab showing JavaScript code for a Snowtype-generated trackAddToCartSpec function, with the \&quot;Show Snowtype code\&quot; toggle enabled and a Download button](/assets/images/show-snowtype-code-f0c0e475e699e14327af5e306eee2121.png)
