Changelog
What changed in Apparent, its SDKs and these docs. Newest first. Follow it with the RSS feed.
All four SDKs are out (0.2.1)
- Expo and React Native:
npx expo install apparent-expo(npm). - Swift: add
https://github.com/AhmedAshour/apparent-swiftin Xcode, from0.2.1. - Kotlin:
implementation("fyi.apparent:apparent-android:0.2.1"), plusapparent-composefor Compose screens (Maven Central). - Flutter:
flutter pub add apparent(pub.dev).
The code is open in apparent-sdks and apparent-swift.
Swift, Kotlin and Flutter: links, notifications, consent, sturdier
- Same features as Expo:
beforeSend,optOutByDefault(consent remembered),deep_link_openedandpush_opened(only the campaign and title from the data, never the text). Kotlin picks up the launch link and Firebase taps on its own (Apparent.handleIntent(intent)foronNewIntent); Swift (Apparent.handleDeepLink,handleNotificationResponse,.apparentDeepLinks()) and Flutter (Apparent.trackDeepLink,trackPushOpened) give you one call to make. Retry-Afterwaited exactly, never sooner; a clock change never stretches a wait.- Sign-in, logout and opt-out saved at once, so a kill right after keeps them.
- Broken saved state, a stuck disk, odd property values or a bad
startnever stop the SDK or throw into your app.
React Native and Expo: links, notifications, consent
- Links that open the app are sent as
deep_link_opened, secrets redacted. A campaign link (utm_source) that opens the app on its first day counts as where that person came from. - Tapped notifications are sent as
push_opened(withexpo-notifications), with only the campaign and title you put in the data. beforeSendlets you change or drop any event before it is saved.optOutByDefaultcollects nothing untiloptIn(), for apps that ask for consent first.
Send events from your server
A new guide: send events from your server with curl, Node and Python. People are now counted by account: the same signed-in person on two phones, or after a reinstall, is one person, and only a visit with the app open makes someone active.
SDKs: Macs, simulators, a wrong key
- Macs count as their own platform,
macos(Swift, and iPhone apps running on a Mac). - Simulators and emulators say so in every batch, so they stay out of your numbers even without a device model.
- A wrong app id or key prints one line in debug builds instead of losing events quietly.
- Early events (tracked in the first milliseconds after start) keep their user and properties. Fixed in all four SDKs.
- Flutter passes the same conformance rules as the others.
Docs
These docs, at apparent.fyi/docs. A quick start that begins with one prompt for your AI, a page per SDK, the privacy answers for both stores, and the intake API. Every page is also Markdown (add .md), and all of it is in llms-full.txt for agents.
SDKs for every platform
One contract for every SDK, checked by the same 25 rules:
- React Native and Expo:
apparent-expo0.2 now works in bare React Native too. Not released yet. - Swift: iOS and macOS, SwiftUI screens, StoreKit 2, privacy manifest. Not released yet.
- Kotlin: Android, Compose screens, Play Billing, install links. Not released yet.
- Flutter: navigator observer, errors, offline queue. Not released yet.
- Website: one script tag. Live.
Until each is published, its install line is what it will be. This page says when each ships.
Set up with your AI
Add your app gives you one prompt for Claude Code, Cursor or Codex with your app's id and key in it, then turns green with "First event from your app ✓". Personal tokens let your own AI ask your numbers through MCP, read-only.