Getting Started
Build your first SDK with SDK Kit in minutes.
Installation
Install SDK Kit core and plugins:
npm
npm install @lytics/sdk-kit @lytics/sdk-kit-pluginsTypeScript users: Type definitions are included automatically. No additional @types packages needed.
Building Your SDK
Create an SDK Instance
Start with a blank SDK:
import { SDK } from '@lytics/sdk-kit'
const sdk = new SDK()Compose with Plugins
Add the functionality your SDK needs by composing plugins:
import { storagePlugin, contextPlugin } from '@lytics/sdk-kit-plugins'
sdk.use(storagePlugin)
sdk.use(contextPlugin)Plugin Order: Register plugins before calling init(). Plugins cannot be added after initialization.
Initialize with Configuration
Configure your SDK’s behavior:
await sdk.init({
storage: {
namespace: 'mycompany',
defaultBackend: 'localStorage'
}
})Your SDK is Ready
Now you have a working SDK with the features you composed:
// Storage
sdk.storage.set('user', { id: 123, name: 'John' })
const user = sdk.storage.get('user')
// Context
const context = sdk.context.get()
console.log(context.page.url)
console.log(context.device.type)Essential Building Blocks
SDK Kit includes 6 essential plugins you can use to compose your SDK. Mix and match based on what your SDK needs.
Storage Plugin
Multi-backend storage with TTL, namespacing, and JSON serialization.
import { storagePlugin } from '@lytics/sdk-kit-plugins'
sdk.use(storagePlugin)
await sdk.init({
storage: {
namespace: 'myapp',
defaultBackend: 'localStorage'
}
})
sdk.storage.set('key', 'value', { ttl: 3600 })
const value = sdk.storage.get('key')Backends: localStorage, sessionStorage, cookies, memory
Context Plugin
Automatic collection of page, device, screen, and environment context.
import { contextPlugin } from '@lytics/sdk-kit-plugins'
sdk.use(contextPlugin)
const context = sdk.context.get()
// Access collected data
console.log(context.page.url)
console.log(context.device.type)
console.log(context.screen.width)Poll Plugin
Promise-based async polling for DOM elements, globals, or custom conditions.
import { pollPlugin } from '@lytics/sdk-kit-plugins'
sdk.use(pollPlugin)
// Wait for element
await sdk.poll.element('#my-element')
// Wait for global
await sdk.poll.global('MyLibrary')
// Custom condition
await sdk.poll.waitFor(() => someCondition())Queue Plugin
Event batching and queuing with automatic flushing, persistence, and retry support.
import { queuePlugin } from '@lytics/sdk-kit-plugins'
sdk.use(queuePlugin)
await sdk.init({
queue: {
maxSize: 20,
flushInterval: 5000,
persist: true
}
})
sdk.queue.add({ event: 'pageview' })
sdk.queue.flush()Transport Plugin
HTTP transport abstraction with automatic transport selection, retry logic, and hooks.
import { transportPlugin } from '@lytics/sdk-kit-plugins'
sdk.use(transportPlugin)
await sdk.transport.send({
url: 'https://api.example.com/events',
method: 'POST',
data: { event: 'pageview' }
})Transports: fetch, sendBeacon, XHR, pixel
Consent Plugin
State-based consent management with platform adapters.
import { consentPlugin } from '@lytics/sdk-kit-plugins'
sdk.use(consentPlugin)
await sdk.init({
consent: {
platform: 'OneTrust', // or 'Cookiebot', 'Usercentrics'
categories: ['C0001', 'C0002']
}
})
const hasConsent = sdk.consent.hasConsent('analytics')Next Steps
Ready to go deeper?
- Core Concepts - Understand the architecture (functional, event-driven, plugin-based)
- Plugin Guide - Build your own custom plugins