Skip to content
Launching Oct 10 — OpenPush is free forever to 1M MAU per app, every feature included. Get early access →
ProductJourneysLive ActivitiesPricingCompareDocsChangelogMigrate from OneSignalSign in
Home / Migrate / Compatibility matrix
OneSignal compatibility · the exact scope

What "OneSignal-compatible"
means, exactly.

"Compatible" is a promise, so here's the receipt: every OneSignal concept, whether OpenPush supports it, and where the edges are. If it's not green below, we say so — no surprises mid-migration.

Each Supported row is exercised by the automated suite on every deploy; the SDK rows come from the published method-by-method compatibility table in the docs. Last reviewed 29 Aug 2026.
Supported built and exercised by our automated suiteBy design follows from how the migration works, not from a test we have runPartial works with a caveatRoadmap not in the Oct 10 launchGap not planned
Platforms & SDKs
CapabilityOneSignalOpenPush supportStatus
Android pushFCM v1 SDKNative Kotlin SDK over FCM; host-owned FCM service or the optional FCM artifact; drop-in init callSupported
iOS pushAPNs SDKNative Swift SDK over APNs (token-based auth with your .p8 key); no method swizzlingSupported
Web pushService worker + VAPIDVAPID web-push SDK; imports existing subscriptionsSupported
UnityUnity SDKC# SDK with the same initialize / login / tags surface; Live Activities from Unity with a bundled default widgetSupported
SDK surfaceinitialize / login / logout / addTag / addAlias / pushSubscription …Same method names on iOS, Android and Unity — keep your OneSignal.initialize call and swap the keys. Every method is listed as forwarded, adapted or refused in the compatibility tableSupported
React Native · Flutter · CordovaWrapper SDKsNot yet — the REST API and web push work today; wrappers follow the native SDKsRoadmap
Identity, tokens & data
CapabilityOneSignalOpenPush supportStatus
Device tokensFCM tokens · APNs tokens · Web VAPIDImported and re-registered on first SDK run; no re-permission prompt. FCM, APNs and VAPID all round-tripSupported
External IDs / aliasesexternal_id, aliasesexternal_id mapped 1:1; multi-alias on import and in the SDKSupported
Data tagskey/value tags, capped per planUnlimited tags; column-mapped on import; numeric operators in segmentsSupported
Identity verificationHMAC-signed external IDsSame HMAC scheme; per-app toggle; already-registered devices are migrated, not rejectedSupported
Subscription statussubscribed / unsubscribed / never-subscribedPreserved exactly — unsubscribed stays unsubscribedSupported
Custom eventsCustom Events (Professional plans and up)SDK trackEvent + REST ingest; usable as segment filters and journey triggers, freeSupported
Direct import (REST key)—Paste a OneSignal REST key: subscribers, opt-in status, tags, templates and message history are pulled and imported; delivery charts rebuilt from campaign statsSupported
CSV import columnsAudience → Export CSVAuto-maps player_id, token, external_id, tags, language, status; large files import in the backgroundSupported
Messaging & product features
CapabilityOneSignalOpenPush supportStatus
SegmentsCapped per planUnlimited, same filter vocabulary (last_session, session_count, tags, language, custom events)Supported
Templates & schedulingTemplates, timezone sendReusable templates with images, translations and actions; timezone-aware scheduling with a live countdownSupported
Intelligent DeliveryIntelligent Delivery (Professional plans and up)Same delayed_option on the API: per-user learned hour or per-timezone time of day, freeSupported
JourneysCapped per planSegment or event entrance; push and in-app steps, wait, tag, yes/no, weighted split with holdout, Live Activity and webhook steps; exit and re-entry rules; no cap on active journeysSupported
Journeys — wait-until-event, time windows, goalsWait Until, Time Window, GoalsWait until an event, time windows, and goals that end a run on conversionSupported
Live ActivitiesiOS Live Activities, capped by total subscribers per planSame two REST endpoints (start by activity type, update/end by activity id), push-to-start, update fan-out; Android Live Updates alongsideSupported
Delivery analyticsDelivery/CTR reportsStep-by-step funnel (Audience→Sent→Delivered→Confirmed→Clicked), separate Held bucket — the provider accepting it is not reported as a deliverySupported
A/B testA/B chip in the composerTwo to ten variants in the composer or the API, a held-back audience, manual or automatic winner; weighted splits inside Journeys tooSupported
In-app messagesIn-app / IAM builderIn-app builder: top, center, bottom, full screen or carousel; triggers, buttons, reports; a journey step tooSupported
Email / SMSOmnichannel email + SMSOut of scope — OpenPush is push (see "when OneSignal is right")Gap
REST APICreate/send message APIPer-app keys; send, audience, events, journeys and Live Activities endpoints, readable in one sittingSupported
Migration mechanics
CapabilityOneSignalOpenPush supportStatus
Dual-run both SDKs—OpenPush + OneSignal SDKs coexist in one build during rollout — they are independent SDKs on separate credentialsBy design
Rollback—Point sends back at OneSignal; nothing is deleted on either side, so your OneSignal audience stays intact throughoutBy design
Staged rollout—Migrate a share of traffic, verify, then cut fully overBy design
Data exportCSV exportYour whole account exports free, any time, as a point-in-time snapshot our own importer reads back — no lock-inSupported

Engineering owns the truth of this page. A row is green only when its fixture passes in the suite that runs on every deploy; the SDK rows mirror the published compatibility table, method by method. Spot a mismatch? Tell us and we fix it the same day.

Known gaps — stated plainly

Email and SMS are out of scope — OpenPush is push, not omnichannel; if you need them in one console today, OneSignal's paid tiers are the honest choice. The React Native and Flutter wrappers are on the roadmap, not in the launch. Web push runs through Firebase Cloud Messaging with your own service worker; there is no first-party JavaScript SDK yet. If your cutover depends on one of these, tell us and we'll give you the real date.

How we verify

Fixtures, not vibes

Each "Supported" row is backed by a fixture that round-trips a real OneSignal export: import it, register a device on the OpenPush SDK, send, and assert the subscription status and tags match byte-for-byte. A row goes green only when its fixture passes in the suite.

Found a mismatch?

Tell us, we fix fast

If your OneSignal setup uses something not covered here, send us your export schema (no PII needed) and we'll tell you within a day whether it maps — and add it to this page. Accuracy is the whole point.

Migrate with your eyes open

Know exactly what moves.

Free forever to 1M MAU · importer built for switching · read the pledge