Skip to main content
RingKit is a clean-room plugin, not a drop-in fork, so migration is a small, deliberate rewrite of your call wiring. This page maps the common concepts; check your old plugin’s exact names against RingKit’s type definitions (dist/esm/definitions.d.ts in the package) and the API reference.

From @capgo/capacitor-callkit-voip or a community fork

These plugins registered for VoIP and reported the call from native on push — the concepts map directly:
1

Swap the package

Remove the old plugin, then install RingKit from the private repository your license gives you access to (Capacitor 8):
2

Add the static config

Add the plugins.RingKit block to capacitor.config — see Configuration.
3

iOS

Keep your Push Notifications + Background Modes → Voice over IP capabilities; RingKit registers its own PKPushRegistry. Point your VoIP push at the token from the registration event (iOS setup).
4

Android

Choose your push route — RingKit’s opt-in FCM service, or RingKitIncomingCall.present(...) from your existing handler (Android setup).
5

Replace your listeners

Attach them before register(), so the iOS token and an Android cold-start answer aren’t missed.
6

Verify

Use the ready-made test-push senders — see Testing.

From @capgo/capacitor-incoming-call-kit

That plugin gives you the call screen; you already wired push yourself. To gain the full cycle, replace showIncomingCall(...) with RingKit’s register() + reportIncomingCall(...) (or the native present(...) on Android for the killed-app path), and move your PushKit / FCM token handling onto RingKit’s registration event so the wake-from-killed path is owned end to end.

Payload shape

If your backend already sends OneSignal-shaped pushes, set payloadPreset: "onesignal". Otherwise send the call fields directly (callId, handle, hasVideo, chatId) or remap your own names with payloadKeys — see Payload mapping. No backend change is required beyond matching one of those shapes.