Skip to main content
Feature

Generate type-safe analytics SDKs from your tracking plan

Turn your event schema into idiomatic, type-safe code for Swift, Kotlin, TypeScript, and Python. Every property typed. Every required field enforced at compile time.

Multi-Platform SDKs

Generate idiomatic code for Swift, Kotlin, TypeScript, and Python. Each language gets native types, not just JSON wrappers.

Fully Type-Safe

Required properties are non-optional. Enums are real enum types. Passing the wrong value or skipping a required field is a compile error.

CLI Sync

Run `ordaze sync` to pull the latest schema and regenerate SDKs. Add it to CI to keep every platform automatically in sync.

Zero Configuration

Connect your workspace, choose your languages, run the CLI. No templates to configure, no mapping files to maintain.

Multi-Platform

Idiomatic code for every platform

The same event schema generates native, idiomatic code in each language. Not just JSON - real types your compiler understands.
Swift
// Generated by Ordaze - ordaze sync --lang swift

struct CheckoutCompleted: AnalyticsEvent {
  static let name = "checkout_completed"

  let orderId: String
  let amount: Double
  let currency: Currency
  var couponCode: String?

  enum Currency: String, Codable {
    case usd = "USD"
    case eur = "EUR"
    case gbp = "GBP"
  }
}

// Usage - compiler catches missing required fields
Analytics.track(CheckoutCompleted(
  orderId: order.id,
  amount: order.total,
  currency: .usd
))
Kotlin
// Generated by Ordaze - ordaze sync --lang kotlin

data class CheckoutCompleted(
  val orderId: String,
  val amount: Double,
  val currency: Currency,
  val couponCode: String? = null
) : AnalyticsEvent("checkout_completed") {

  enum class Currency { USD, EUR, GBP }
}

// Usage
Analytics.track(CheckoutCompleted(
  orderId = order.id,
  amount = order.total,
  currency = CheckoutCompleted.Currency.USD
))
TypeScript
// Generated by Ordaze - ordaze sync --lang typescript

export interface CheckoutCompleted {
  readonly orderId: string;
  readonly amount: number;
  readonly currency: "USD" | "EUR" | "GBP";
  readonly couponCode?: string;
}

export const EVENT_CHECKOUT_COMPLETED =
  "checkout_completed" as const;

// Usage - TypeScript narrows all property types
track(EVENT_CHECKOUT_COMPLETED, {
  orderId: order.id,
  amount: order.total,
  currency: "USD",
} satisfies CheckoutCompleted);
Python
# Generated by Ordaze - ordaze sync --lang python
from dataclasses import dataclass
from enum import Enum
from typing import Optional

class Currency(Enum):
    USD = "USD"
    EUR = "EUR"
    GBP = "GBP"

@dataclass
class CheckoutCompleted:
    EVENT_NAME = "checkout_completed"
    order_id: str
    amount: float
    currency: Currency
    coupon_code: Optional[str] = None

# Usage
analytics.track(CheckoutCompleted(
    order_id=order.id,
    amount=order.total,
    currency=Currency.USD,
))
How it works
1
Define your tracking plan
Add events with properties, types, and required flags in Ordaze.
2
Run ordaze sync
The CLI pulls your schema and generates SDK files for your chosen languages.
3
Commit the generated files
Check the generated SDK into your repo and import it in your tracking code.
4
Update when the schema changes
Re-run ordaze sync after schema changes. The compiler will highlight breaking changes.
From Schema to Code

Schema changes propagate automatically

The code generation pipeline is fully automated. When the product team updates an event schema (adding a required property, renaming a field, changing an enum value), engineers run ordaze sync to regenerate the SDK.

The compiler then highlights every call site that needs updating. No grep, no manual audit, no missed callsites. The type system does the work.

How the tracking plan works
CLI Sync

Always in sync, zero manual steps

The Ordaze CLI integrates with your CI pipeline. Runordaze syncon every PR to ensure your SDKs are always generated from the latest approved schema.

If the schema changes and the sync hasn't been run, the SDK will be stale, and your CI check will catch it. No surprises in production.

CLI reference
Terminal
$ npx ordaze sync --lang swift kotlin typescript

✓ Fetched schema (38 events)
✓ Generated Analytics.swift
✓ Generated Analytics.kt
✓ Generated analytics.ts

$ npx ordaze sync --lang python --output ./src/analytics

✓ Fetched schema (38 events)
✓ Generated analytics/events.py
✓ Generated analytics/types.py

All SDKs up to date with schema v12
Explore More

Related features and use cases

Code generation works best as part of the complete Ordaze workflow.
Get started
Stop hardcoding event names
Free plan with full code generation for Swift, Kotlin, TypeScript, and Python. No credit card required.