Skip to content
Launching Oct 20 — OpenPush is free forever to 100K MAU per app, every push 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; the SDK rows come from the published method-by-method compatibility table in the docs. Last reviewed 11 Oct 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 20 launchGap not planned
What OpenPush supports today · checked 11 Oct 2026
AreaCapabilityTodayStatus
ChannelsiOS push (APNs)Sent straight to Apple on your own .p8 key.Live
ChannelsAndroid push (FCM)Sent straight to Google on your own service account.Live
ChannelsWeb pushThrough Firebase Cloud Messaging with the Firebase JS SDK. No OpenPush JavaScript SDK and no direct VAPID sender yet.Limited
ChannelsEmail, SMS, WhatsAppOpenPush is push and in-app. The only email it sends is to your team.Not yet
ChannelsHuawei, Amazon, Windows pushImported Huawei devices are treated as Android (FCM).Not yet
SDKsiOS, Android and Unity SDKsOneSignal's method names, so a migration is mostly a key swap. Early-access teams get them now; the repositories go public with the launch.Live
SDKsReact Native, Flutter, CordovaUse the REST API from your backend meanwhile.Not yet
MigrationOneSignal importWith a REST key or a CSV: subscribers with opt-in status, message history, templates and segment definitions.Live
MigrationImported Android devices before your app updateImported Android tokens keep receiving from OpenPush until your new release, with the OpenPush SDK, reaches them.Live
MigrationOneSignal REST API drop-inThe Live Activity routes accept OneSignal's request shape. Sends use the OpenPush REST API.Limited
SendingSegmentsTags, sessions, language, custom events and session duration. Filtering on what a person did with a message is not built yet.Live
SendingTemplates, translations and action buttonsLive
SendingPersonalisationLiquid in titles, bodies, images and links, with uploaded lookup tables.Live
SendingImagesUpload in the composer, or paste a URL.Live
SendingScheduling and per-time-zone sendsLive
SendingA/B tests2 to 10 variants, a held-back audience, and a manual or automatic winner.Live
SendingIntelligent DeliveryEach device's learned hour, or a time-zone mode. Not inside journey steps.Live
SendingFrequency caps, quiet hours, throttlingSet per app.Live
LifecycleJourneysSegment and event entrances; push, in-app, Live Activity and webhook steps; waits, wait-until-event, time windows, yes/no, splits with holdout, tags, goals and exits.Live
LifecycleAI decision step in journeysSwitched on per app; chooses each person's next step from 2 to 10 options, with a fallback.Limited
LifecycleIn-app messagesTop, centre, bottom, full screen and carousel, triggered from the SDK or a journey.Live
LifecycleiOS Live ActivitiesStart, update, end and push-to-start from the console, the API or a journey.Live
LifecycleReady-made Live Activity templatesToday you define the attributes and widget in your app.Not yet
LifecycleAndroid Live UpdatesThe Android SDK renders a Live Activity send as an ongoing notification where the OS allows it.Limited
DataCustom events and the live events APILive
DataReports and delivery tracePer message and per device, with funnels and journey stats.Live
DataData connectionsStream out to a webhook or Amplitude, and bring data in. No warehouse destinations yet.Live
DataExportEvery app, free, as NDJSON or CSV that our importer reads back.Live
AIOpenPush AICompose, translate, summarise, AI-drafted segments and journeys, and suggestions. Metered in OpenTokens.Live
AIAsk OpenPushAsk questions about an app's own data in plain English.Live
AIMCP server for coding agentsSign in from Claude, ChatGPT or Cursor. Every write is two-step.Live
AICodebase scanA command-line scan that maps your app's events and screens for OpenPush.Live
AccountSign-inGoogle or GitHub. Access is by early-access approval until the launch.Live
AccountTeam roles and audit logViewer, manager and admin, with per-app overrides.Live
AccountIdentity verificationHMAC-SHA256 of the external ID, per app.Live
AccountSAML single sign-onNot yet
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 + VAPIDThrough Firebase Cloud Messaging: your site uses the Firebase JS SDK and a service worker, and OpenPush sends to the FCM web token. No first-party JavaScript SDK and no direct VAPID sender yet, so imported OneSignal web subscriptions need to re-subscribe through FCMPartial
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, refused or not applicable 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 VAPIDFCM and APNs tokens are imported and re-registered on first SDK run, with no re-permission prompt. Imported Android tokens keep receiving before your app ships the OpenPush SDK. VAPID web subscriptions are not sendable yet (see Web push)Supported
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 IDsHMAC-SHA256 of the external ID, as in OneSignal's identity verification; a per-app toggle. OneSignal's newer JWT scheme is not supportedSupported
Subscription statussubscribed / unsubscribed / never-subscribedPreserved exactly — unsubscribed stays unsubscribedSupported
Custom eventsCustom Events (Growth 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 (Growth 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; on the Free plan, for organizations with up to 1,000 MAUSame 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—Not verified in one build yet. Migrate by app release instead: import your subscribers, and imported Android devices keep receiving from OpenPush until the new release reaches themPartial
Rollback—Point sends back at OneSignal; nothing is deleted on either side, so your OneSignal audience stays intact throughoutBy design
Staged rollout—Send to a segment first, check the delivery trace, then send to everyoneBy design
Data exportCSV exportEvery app 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 automated suite; 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 100K MAU · importer built for switching · read the pledge