Skip to content

RFC: VoIP calls helper (CallKit + PushKit + Telecom)#545

Closed
MiloszFilimowski wants to merge 1 commit into
mainfrom
claude/refine-local-plan-9yfscw
Closed

RFC: VoIP calls helper (CallKit + PushKit + Telecom)#545
MiloszFilimowski wants to merge 1 commit into
mainfrom
claude/refine-local-plan-9yfscw

Conversation

@MiloszFilimowski

Copy link
Copy Markdown
Collaborator

What

Design document (rfc/voip-calls.md) for SDK-level VoIP call helpers — no implementation in this PR, this is for team discussion.

Why

Apps integrating Fishjam for VoIP calls currently hand-write ~800 lines of native plumbing (reference: InstaWork's integration/fishjam branch): iOS CallKit provider + PushKit delegate + manual RTCAudioSession handling, a full custom Android incoming-call notification/activity stack (with no Telecom integration at all), and a JS call-state layer. The SDK today only ships outgoing-call iOS CallKit.

Contents

  1. Problem statement — per-platform boilerplate inventory from the reference integration
  2. Competitive analysis — Sendbird (the DIY anti-pattern), Twilio (best event model), Stream (best cold-start story), Telnyx, and why we don't build on react-native-callkeep
  3. Platform constraints — iOS 13+ PushKit kill rule, simulator limits, self-managed Telecom via Jetpack core-telecom, Android 14 FGS types + full-screen-intent restrictions, cold start
  4. Proposed architecture — native layer in the fishjam-react-native-webrtc submodule (extending CallKitManager), static JS API + hooks + Expo plugin in packages/mobile-client, versioned push payload schema, full TS surface
  5. End-to-end flows — incl. the terminated-app lock-screen-accept sequence
  6. Alternatives considered with rationale
  7. Open questions for the team, incl. proposed phasing

Decisions already baked in (made by @miloszfil): extend the existing CallKit integration (no new package), Android push via forwarding API (app keeps its FCM handler), app-controlled room join on accept (no peer tokens in push payloads).

Note: the doc lives under rfc/ rather than docs/ because docs/ is the gitignored typedoc output directory.

https://claude.ai/code/session_01QNA4UXaENCny9zSbusX2DH


Generated by Claude Code

Design document for SDK-level VoIP helpers: incoming-call CallKit +
PushKit on iOS, self-managed Telecom on Android, and a hook-based JS
surface in mobile-client. Covers the boilerplate problem, competitive
analysis, platform constraints, proposed architecture (submodule native
layer + mobile-client JS/plugin split), end-to-end flows, alternatives,
and open questions for team review. No implementation.

Note: placed under rfc/ rather than docs/ because docs/ is the
gitignored typedoc output directory.

https://claude.ai/code/session_01QNA4UXaENCny9zSbusX2DH
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants