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
Related features and use cases
Stop hardcoding event names
Free plan with full code generation for Swift, Kotlin, TypeScript, and Python. No credit card required.