Feature matrix

Feature matrix

What each SDK covers, verified against the SDK sources rather than their docs. Rows follow the server’s per-game /v1 surface. Java and Paper SDKs are planned but deferred; they have no columns because they do not exist yet.

Column notes: React wraps the TypeScript client, so “Full, client” means the operation is fully reachable through useJunjo() (paired with useMutation for writes) without a dedicated hook. UE BP is the Unreal plugin’s Blueprint and delegate surface; Native-only cells are reachable in Unreal today through GetNativeClient(), whose capabilities equal the C++ column exactly.

Groups

OperationTSReactRobloxC++UE BP
CreateFullFull, clientFullFullFull
Get (viewer-scoped)FullFull, hook (useGroup, live)FullFullFull
List (cursor-paginated)Full (+listAll)Full, hook (useGroups, fetchMore)Full (+listAll)Full (paginate)Full (manual cursor)
UpdateFullFull, clientFullFullNative-only
Delete (soft; hard option)FullFull, clientFullFullNative-only
RestoreFullFull, clientFullFullNative-only
Passcode set/change/clearFullFull, clientFullFullPartial (set at create; change/clear Native-only)
Join (passcode-aware)FullFull, clientFullFullFull
LeaveFullFull, clientFullFullFull
Kick (with reason)FullFull, clientFullFullFull
Per-group ban / unbanFullFull, clientFullFullNative-only
Per-group ban historyFull (+banHistoryAll)Full, clientFull (+banHistoryAll)FullNative-only
Relationships set/clear/get/listFullFull, clientFullFullNative-only
Parent set / children listFullFull, clientFullFullNative-only

Members

OperationTSReactRobloxC++UE BP
Get (group + user)FullFull, clientFullFullNative-only
Get by member idFullFull, clientFullFullNative-only
List (status filter, paginated)Full (+listAll)Full, hook (useMembers, live, optimistic)Full (+listAll)FullFull
List memberships for a userFullFull, clientFullFullNative-only
Notes (public/private)FullFull, clientFullFullNative-only
MetadataFullFull, clientFullFullNative-only
Assign / remove role on memberFullFull, clientFullFullNative-only
Permission overrides set/clear/listFullFull, clientFullFullNative-only

Roles

OperationTSReactRobloxC++UE BP
Create / get / list / update / deleteFullPartial (useRoles live read; mutations via client)FullFullNative-only
Grant / revoke permission on roleFullFull, clientFullFullNative-only

Permissions

OperationTSReactRobloxC++UE BP
check (full decision + source)FullFull, clientFullFullFull
can (boolean sugar)FullFull, hook (useCan, cached; manual invalidation via useInvalidatePermissions)FullFullFull (read bAllowed from the check result)

Invitations

OperationTSReactRobloxC++UE BP
Invite by user idFullFull, clientFullFullNative-only
Open invite by codeFullFull, clientFullFullNative-only
Invite-link builderFull (inviteByLink)Full, clientFullFull (invite_by_link)Native-only
Bulk invite (CSV)FullFull, clientFullFull (bulk_invite)Native-only
List per group (paginated)FullFull, hook (useInvitations, live, optimistic)FullFullNative-only
Lookup by codeFullFull, clientFullFullNative-only
RevokeFullFull, clientFullFullNative-only
Accept / declineFullFull, clientFullFullNative-only

Game-wide bans

OperationTSReactRobloxC++UE BP
Add / removeFullFull, clientFullFullFull (BanUser / UnbanUser)
Get oneFullFull, clientFullFullNative-only
List (paginated)Full (+listAll)Full, hook (useBans)Full (+listAll)FullNative-only
History (paginated)Full (+historyAll)Full, clientFull (+historyAll)FullNative-only

Friends

OperationTSReactRobloxC++UE BP
Requests send/list/accept/decline/cancelFullPartial (useFriendRequests read; mutations via client)FullFullNative-only
Friends list / unfriend / relationshipFull (+listAll)Partial (useFriends read)FullFullNative-only
Blocks add/remove/listFullPartial (useBlocklist read)FullFullNative-only
Tags CRUD + assign to friendFullPartial (useFriendTags read)FullFullNative-only
Visibility get/setFullPartial (useUserVisibility read)FullFullNative-only
SuggestionsFullFull, hook (useFriendSuggestions)FullFullNative-only

Audit

OperationTSReactRobloxC++UE BP
Group audit list (before boundary, action filter)FullFull, hook (useAuditLog, fetchMore)FullFullNative-only

Webhooks

OperationTSReactRobloxC++UE BP
Endpoints CRUD (create returns secret)Full (+listAll)Full, clientFull (+listAll)FullNative-only
Delivery verificationFulln.a. (browser)n.a. (Roblox cannot receive HTTP)FullNative-only
Signing helperFull (signWebhookBody)n.a.n.a.Full (sign_webhook_body)Native-only
Framework middlewareFull (Express-compatible)n.a.n.a.NoNo
Unknown-event-type handlingThrows by default; onUnknownType: "raw" opt-inn.a.n.a.Verifies verbatim alwaysNative-only

Events (SSE)

OperationTSReactRobloxC++UE BP
Per-group subscribeFullFull (shared SubscriptionHub)No (HttpService cannot stream)FullFull (UJunjoEventStream)
Skip-unknown-event behaviorFullFulln.a.FullFull

Client plumbing

CapabilityTSReactRobloxC++UE BP
Key info (GET /v1/whoami)Full (keyInfo)Full, clientFullFull (key_info)Full (KeyInfo)
Pagination helpersFull (listAll + paginate)Full (fetchMore)Full (listAll + pageAll)Full (junjo::paginate; audit uses before directly)Partial (manual cursor)
Auth adaptersFull (Clerk, Supabase, JWT)n.a. (proxy mode instead)Partial (Player-to-user-id resolver)n.a.n.a.
Browser proxy modeFullFulln.a.n.a.n.a.
Typed error surfaceFullFullFullFull (Result, never throws)Full (FJunjoError)
Retry-After surfacingFullFullFullFullFull
Automatic retry policyNo (deliberate)NoFull (opt-in, Retry-After-aware)No (deliberate)No
Cancellation / per-call timeoutFullFullPartial (fixed ~30s, no cancellation)Full (tokens + per-call timeout)Partial (client-level timeout; cancellable async nodes)

Per-SDK summaries

TypeScript is the reference implementation and the only SDK covering every row: full REST surface, SSE, webhook receiving with middleware, invite links and CSV bulk invite, three auth adapters plus browser proxy mode, and the richest error object.

React is a hooks layer over the TypeScript client, not a reimplementation. Reads are first-class (live SSE-backed hooks, fetchMore, optimistic updates, a permission cache with manual invalidation via useInvalidatePermissions); mutations go through the client plus useMutation, so effective coverage equals the TypeScript SDK. Webhook receiving and auth adapters are not applicable in a browser; proxy mode is the intended credential model.

Roblox holds near-parity with TypeScript on the REST surface and is the only SDK with an automatic retry policy (opt-in, tuned for HttpService budgets). Platform limits shape the gaps: no SSE, no webhook receiving, fixed timeouts without cancellation, and a leaner error object.

C++ covers the full REST surface with a Result-based never-throw contract, cancellation tokens, a caller-owned-executor async facade, SSE, and webhook verification that accepts unknown event types verbatim by design. The one surface it does not bind is the Express-style webhook receiving middleware, which is a Node framework helper; verification and signing are present.

Unreal binds a deliberately scoped gameplay slice to Blueprint and delegates (key info, permission checks, group get/create/list/join/leave/kick, member list, game-wide bans, live event streams), with everything else reachable through the native junjo:: client, whose capabilities equal the C++ column exactly.