Livqeno splits along one line: your backend holds the API key and mints tokens; your client holds a token and connects. Those are different packages and neither can do the other's job.
Pick by where the code runs
| Package | Runs in | Holds | Reference |
|---|---|---|---|
@ravenkash/server | Your Node backend | API key | Node.js |
raven-sdk | Your Python backend | API key | Python |
@ravenkash/rtc | Browser | RTC token | Web |
@ravenkash/chat | Browser | Chat token | Web |
@ravenkash/client | Browser | Both, behind one object | Livqeno Client |
@ravenkash/react | Browser | Hooks over the above | React |
@ravenkash/react-native | iOS, Android | RTC + chat | React Native |
raven_rtc, raven_chat, raven_live | iOS, Android | RTC / chat / streaming | Flutter |
@ravenkash/effects | Browser | Nothing — no credential | Effects |
@ravenkash/cli | Your terminal | Dashboard session | CLI |
Stability
Every package is at 0.1.0 and none is published to a registry.
Treat every SDK signature as pre-1.0 and subject to change. The two wire protocols and the REST API are more settled than the SDKs that wrap them — see Changelog for what each surface promises.
Install from a checkout until the first release: Installing from source.
Feature support
✓ means implemented and covered by a test in the repository. Never for something merely planned.
| Web | React | React Native | Flutter | Node | Python | CLI | |
|---|---|---|---|---|---|---|---|
| Mint tokens | — | — | — | — | ✓ | ✓ | — |
| Join a room | ✓ | ✓ | ✓ | ✓ | — | — | — |
| Camera / microphone | ✓ | ✓ | ✓ | ✓ | — | — | — |
| Screen sharing | ✓ | ✓ | — ¹ | ✓ | — | — | — |
| Device selection | ✓ | ✓ | ✓ | ✓ ² | — | — | — |
| Data messages | ✓ | ✓ | ✓ | ✓ | — | — | — |
| Diagnostics / stats | ✓ | ✓ | ✓ | — ³ | — | — | ✓ |
| Simulcast layer control | — ⁴ | — ⁴ | — ⁴ | ✓ | — | — | — |
| Chat | ✓ | ✓ | ✓ | ✓ | ✓ ⁵ | ✓ ⁵ | — ⁶ |
| Live streaming | ✓ | ✓ | ✓ | ✓ | ✓ ⁵ | ✓ ⁵ | ✓ ⁷ |
| Camera effects | ✓ | ✓ | — ⁸ | — ⁸ | — | — | — |
| Rooms / streams management | — | — | — | — | ✓ | ✓ | ✓ |
| Observability | — | — | — | — | ✓ | ✓ | ✓ |
¹ The platform cannot capture the screen. Not a Livqeno gap.
² switchCamera() — front/rear, which has no web equivalent.
³ RavenRoom exposes no stats method yet.
⁴ Flutter only; the frame exists in the protocol. Details.
⁵ Server-side administration — create conversations, post messages, mint credentials. Not "join and read the live feed".
⁶ Read-only: the CLI holds a dashboard session, not an API key.
⁷ Lifecycle only. Minting credentials stays on the server SDKs.
⁸ Filter and preset configuration is real and shared; the native frame-processing engine is not shipped.
One vocabulary, several syntaxes
A Room on the web is the same class as a Room in React Native. A
RavenRoom in Dart is the same concepts with Dart syntax. No SDK
substitutes a platform-specific term — there is no "Broadcast" on one and
"LiveSession" on another.
No SDK exposes a WebRTC type. RTCPeerConnection, RTCRtpSender and
friends stay internal, on every platform. The one deliberate exception is
track.mediaStreamTrack, for when you genuinely need to go deeper.
What every SDK guarantees
- The API key lives in a private field. Never enumerable, never in
JSON.stringify()or a Pythonrepr(). - No credential is logged, at any level.
- No credential appears in a thrown error. Errors carry
{message, code, requestId}. - Errors are typed. Never a raw
DOMException, never a raw HTTP body.
Next steps
- Install an SDK — the commands.
- Browser support — what is verified, and what is not.