Pushlanedocs
Documentation menu

Pushlane overview

Pushlane is push-only lifecycle messaging for subscription apps. You send events from your iOS app; Pushlane decides who gets a push and when.

#What Pushlane does

Subscription apps live or die by a handful of moments — trial start, paywall view, first core action, day-7 lapse, renewal. Pushlane lets you build timed, branching push journeys that react to those moments without you running a backend scheduler.

The mental model has three moving parts:

  • Events — your app calls Pushlane.track(); every event arrives at the ingest endpoint and is stored in ClickHouse with a typed catalogue.
  • Flows — visual journeys you build on the canvas. A flow listens for an event (or audience membership, or a schedule) and steps a user through delays, branches, and push message nodes.
  • Delivery — when a message node fires, Pushlane checks marketing consent, frequency caps, and time-window rules, then sends the push to Apple APNs via the Go sender on Fly.io.

#Key concepts at a glance

ConceptWhat it is
Write-keyAn lpk_live_… token that authenticates every SDK and API call. Your tenant is derived server-side from the key — it cannot be spoofed from the request body. Found under Settings → API keys.
External IDYour own stable user ID (UUID, Supabase UID, etc.). Pass it to Pushlane.identify() before tracking events. Pushlane maps it to a dense internal surrogate and never re-resolves it per event.
CatalogueThe typed registry of event names and property types for your tenant. It fills in automatically as events arrive — no manual schema step required. Declare explicit types in the dashboard to lock them down.
Consent (R10)Pushlane checks app.consent_current for a marketing opt-in before every send. No opt-in row = suppressed. The suppression is always logged — nothing is silently dropped.
Flow IRThe compiled representation of a flow. Every node type (entry, delay, branch, message, exit…) is validated against a Zod schema before a flow can be activated. The worker executes this IR inside a per-user Durable Object.
FlowUserDOOne Cloudflare Durable Object per user. It holds all flow instances, timers, frequency-cap sliding windows, and send dedup markers for that user — strongly consistent and serialised per user.

#The ingest pipeline in one sentence

POST /v1/events → identity resolve → shard queue → dedup gate → catalogue coerce → ClickHouse insert → OTel spans → FlowUserDO → decision log → consent check → APNs.

Every step is observable: OTel traces span the full path from the SDK call to the APNs acknowledgement on a single W3C traceparent. The Logs tab in the dashboard shows the decision_log row for every send and every suppression.

#Push-only scope

Note
Pushlane is push-only. The only delivery channel is Apple Push Notifications (APNs). Email, SMS, and in-app banners are out of scope by design — this keeps the product focused and the surface area small.

Transactional emails (receipts, password reset, GDPR exports) are handled by your existing email provider and are explicitly outside Pushlane.

#Where to go next

  • iOS Quickstart — install the SDK, register a device, and send your first push in under 10 minutes.
  • How Pushlane works — the ingest → decision → delivery pipeline, step by step.
  • Events & catalogue — what to track and how the catalogue builds itself.
  • Building flows — the canvas, node types, and how to activate a flow.