Skip to main content
One line gives you the list:
Each entry is the signed-in player’s friend on Arcane, with their presence right now:

in_game is about your title

in_game is true when the friend is playing the same game_id as this client — the id Arcane Powered launched you with. A friend playing something else on Arcane is online, not in_game. That presence is set by the Arcane desktop app when a game opens its play session, so it costs your game nothing. false is never a guess about your own title: the client always knows its game_id, so in_game is false only when the friend is playing something else, or nothing at all.

stale

The Arcane desktop app caches the list for 15 seconds. When it is offline it serves that cache and says so:
stale: true is a success, not an error. The SDK keeps no list of its own: every call asks the desktop app, and the desktop app decides what to answer with.
list() is synchronous: one loopback round trip to the Arcane desktop app, on your thread, on the order of a millisecond. Call it when a friends menu opens, or on a timer of your own of a few seconds — never per frame.

What stays in the launcher

This is a read of presence, and only that. Friend requests, accepting or removing a friend, chat and the in-game overlay stay in the Arcane Powered desktop app. A game does not send friend requests on the player’s behalf, and there is nothing to call for it.

Errors

Full table and what to do about each: Errors.

In C

Same call, same round trip. A -4 means it failed — read arcane_sdk_last_error_json for the code. Size the buffer to the player’s friend list (a few hundred bytes per friend); a short buffer gives -3 and an empty string, never a truncated one. Details: C ABI.

Next steps

  • Session — the play session that makes your player “in game” for their friends
  • Achievements — unlock("first_blood"), one line, idempotent
  • Errors — every code, and its fix
  • Rust API · C ABI