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.
Idiomatic code for every platform
// 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
))// 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
))// 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);# 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,
))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 worksAlways 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$ 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