SDK Plugins

Note: Support for Partner-Contributed and Maintained SDK Plugins is under active development.

SDK Plugins are used to augment traditional Destination and Source components (Subscriptions and Streams) by shipping code to the End User’s Device. You can use this mechanism to enable customers to dynamically include your libraries or SDKs and to wire up the Segment SDK to invoke them directly when your plugin is enabled. This pattern is most commonly used to build what we call “Device Mode Destinations.”

Segment’s Client SDKs (analytics.js, analytics-ios, and analytics-android) serve as “microcosms” of the Segment Customer Data Infrastructure runtime — they enable the dynamic orchestration of event collection, cleaning and validation, transforming, and delivery to collection endpoints right from inside the SDK.

SDK Plugins are an appropriate component for your App if your source or destination requires client-side side effects, such as collecting ambient data in the client (Heatmapping, Error & Performance Monitoring tools), relying on device-native context such as third party cookies (Advertising pixels), or needs to actively modify the Client UI (e.g. A/B testing, Push Notification, In-App Messaging and LiveChat).

Note: SDK Plugins show up in our Connections Catalog as a “Device Based Destination” today, but this is subject to change, especially as we add support for more data data collection, enrichment, and transformation oriented primitives to plugins.

Please follow the documentation carefully. Segment will not approve submissions for SDK plugin components that don’t follow best practices or don’t provide any more functionality than that supported by a subscription, as customers universally prefer Cloud Mode to Device Mode when available.

1. Request access to the Segment Developer Center.

Request access so we know you’re interested in building an SDK Plugin.

We’ll grant you access to our Developer Center and agree on a launch date so that we can provide a focused window of deep guidance and support.

2. Build and test the plugin

Once you’ve received approval from the team at Segment, you’ll then need to write custom transformation module(s) for the appropriate Segment SDK(s). As you can host and distribute these modules in repositories and package managers yourself, you’ll have no impediment from Segment in updating and releasing new versions of your plugin. For Mobile SDK plugins, customers will specify in their build phase the version of your Plugin they’d like to use. For Analytics.js Web SDK plugins, you’ll be able to specify the version we should distribute in the Developer Center.

Please refer to the documentation and examples in these repositories to learn how to build and initialize your plugins for the appropriate libraries.

Note that for now, we will only support one setting for partner-contributed SDK plugins: a write-scoped key such as “Client ID” or “Property ID” that dictates where to write data inside your tool (if applicable).

As with all partner contributions, only those which follow the Segment Spec will be approved.

Before reviewing, we’ll need to see a full suite of cross-device tests.

3. Submit your integration for review!

Each of the wikis above reference steps for testing your plugin locally. Once you’ve tested your plugin successfully, reach out to with:

  • A link (and, if you insist on it remaining private, an invite) to your repo with live CI demonstrating passing tests
  • The name of your settings field for your write key (Client ID, App ID, etc).
  • A list of customer workspaces you intend to test your integration with.

In the near future, this process will be automated through the Segment Developer Center.

4. Private Beta

After we have reviewed and approved your application and plugin, you’ll be launched in Beta. The purpose of Beta is to test the plugin with at least 3 mutual customers. You’ll remain in Private Beta until you have shown that these customers are getting value out of your integration.

When you have completed the requirements of Beta, you’ll be fully launched onto the platform.

If you have any questions, or see anywhere we can improve our documentation, please let us know!