Livqeno has a package for each platform. This page helps you pick the right ones, and explains how they work together.
Every Livqeno app uses two packages, one on each side:
- A backend package runs on your server. It holds your secret API key and uses it to make tokens.
- A client package runs in your app (browser or phone). It holds only a token, and uses it to join a call, a chat, or a live stream.
Neither kind can do the other's job. The split is on purpose: the API key can do anything in your project, so it must stay on a server you control. A token is short-lived and only works for one room or conversation, so it's safe to hand to a user's device.
How the two sides work together
livqeno.tokens.create(...)client.join(grant)You write steps 1–5 yourself: a normal HTTP endpoint on your backend, and a
fetch in your app. The SDKs do steps 6–7. The Quickstart
builds this whole loop in about ten minutes.
Pick by what you're building
| You're building… | Backend package | Client package |
|---|---|---|
| A web video call (plain JS) | Any server SDK | @livqeno/rtc |
| A web chat | Any server SDK | @livqeno/chat |
| A web app with calls and chat | Any server SDK | @livqeno/live |
| A React or Next.js app | Any server SDK | @livqeno/react (+ rtc / chat) |
| An iOS / Android app in React Native | Any server SDK | @livqeno/react-native |
| An iOS / Android app in Flutter | Any server SDK | livqeno_rtc, livqeno_chat, livqeno_live |
| Scripts, CI, or managing projects by hand | — | @livqeno/cli |
The backend choice depends only on your server's language: TypeScript, Python, Go, Java or PHP. Any backend package works with any client package.
Pick a package
| Package | Runs on | Uses | Reference |
|---|---|---|---|
@livqeno/server | Your TypeScript backend | API key | TypeScript |
livqeno | Your Python backend | API key | Python |
github.com/atulsinghhhh/swalvo-sdks/sdks/go/livqeno | Your Go backend | API key | Go |
com.livqeno:livqeno-server | Your Java / JVM backend | API key | Java |
livqeno/livqeno-php | Your PHP backend | API key | PHP |
@livqeno/rtc | Browser | RTC token | Next.js |
@livqeno/chat | Browser | Chat token | Next.js |
@livqeno/live | Browser | Both, in one object | Livqeno Client |
@livqeno/react | Browser (React) | Hooks for the above | React |
@livqeno/react-native | iOS, Android | RTC + chat | React Native |
livqeno_rtc, livqeno_chat, livqeno_live | iOS, Android (Flutter) | RTC / chat / streaming | Flutter |
@livqeno/cli | Your terminal | Your dashboard login | CLI |
Where to get them
| Packages | Registry | Install |
|---|---|---|
@livqeno/* (including the CLI) | npm | npm install @livqeno/..., or pnpm add, yarn add, bun add |
livqeno_rtc, livqeno_chat, livqeno_live | pub.dev | flutter pub add ... |
livqeno | PyPI | pip install livqeno |
| Go SDK | Go modules | go get github.com/atulsinghhhh/swalvo-sdks/sdks/go/livqeno |
com.livqeno:livqeno-server | Not on Maven Central yet | mvn install from sdks/java, then add the dependency |
livqeno/livqeno-php | Not on Packagist yet | composer require livqeno/livqeno-php with a path repository |
The two packages for a web video call:
pnpm add @livqeno/server @livqeno/rtcnpm install @livqeno/server @livqeno/rtcyarn add @livqeno/server @livqeno/rtcbun add @livqeno/server @livqeno/rtcRequirements
| Package | Minimum |
|---|---|
@livqeno/server | Node.js 20 |
livqeno | Python 3.10 |
| Go SDK | Go 1.22 |
com.livqeno:livqeno-server | Java 17 |
livqeno/livqeno-php | PHP 8.1, ext-curl, ext-json |
@livqeno/react | React 18 |
@livqeno/react-native | React Native 0.73, react-native-webrtc 124 |
livqeno_rtc, livqeno_chat, livqeno_live | Flutter 3.27 (Dart 3.6), Android minSdkVersion 23, iOS 13 |
Every JavaScript SDK ships ESM and CommonJS builds with its own TypeScript types. Full setup: Install an SDK.
What each SDK supports
✓ means it works and has a test in the repository. Planned features are never marked ✓.
| Browser | React | React Native | Flutter | Node | Python | Go / Java / PHP | CLI | |
|---|---|---|---|---|---|---|---|---|
| Mint tokens | — | — | — | — | ✓ | ✓ | ✓ | — |
| Join a room | ✓ | ✓ | ✓ | ✓ | — | — | — | — |
| Camera / microphone | ✓ | ✓ | ✓ | ✓ | — | — | — | — |
| Screen sharing | ✓ | ✓ | — ¹ | ✓ | — | — | — | — |
| Device selection | ✓ | ✓ | ✓ | ✓ ² | — | — | — | — |
| Data messages | ✓ | ✓ | ✓ | ✓ | — | — | — | — |
| Diagnostics / stats | ✓ | ✓ | ✓ | — ³ | — | — | — | ✓ |
| Simulcast layer control | ✓ | ✓ ⁴ | ✓ ⁴ | ✓ | — | — | — | — |
| Chat | ✓ | ✓ | ✓ | ✓ | ✓ ⁵ | ✓ ⁵ | ✓ ⁵ | — ⁶ |
| Live streaming | ✓ | ✓ | ✓ | ✓ | ✓ ⁵ | ✓ ⁵ | ✓ ⁵ | ✓ ⁷ |
| Rooms / streams management | — | — | — | — | ✓ | ✓ | ✓ | ✓ |
| Observability | — | — | — | — | ✓ | ✓ | ✓ | ✓ |
- The platform can't capture the screen. This isn't a Livqeno gap.
switchCamera()switches front/rear. The web has no equivalent.LivqenoRoomhas no stats method yet.- Through the same
@livqeno/rtctrack:track.setLayer(), withadaptiveStreamon by default. The tests for it are in@livqeno/rtc. Details. - Server-side admin only: create conversations, post messages, mint credentials. It does not join and read the live feed.
- Read-only. The CLI uses your dashboard login, not an API key.
- Start/stop only. Minting credentials stays in the server SDKs.
Same names everywhere
This matters when your team builds for more than one platform: what you learn on one SDK carries over to the others.
- A
Roomon the web is the same as aRoomin React Native. - A
LivqenoRoomin Dart has the same ideas, in Dart syntax. - No SDK renames things. There is no "Broadcast" on one and "LiveSession" on another.
No SDK exposes raw WebRTC types like RTCPeerConnection. The one exception
is track.mediaStreamTrack, for when you really need low-level access.
What every SDK promises
- The API key is stored privately. It never shows up in
JSON.stringify(), a Pythonrepr(), Go's%+v, a JavatoString()or a PHPvar_dump(). - Credentials are never logged.
- Credentials never appear in errors. Errors carry
{message, code, requestId}. - Errors are typed. You never get a raw
DOMExceptionor a raw HTTP body.
Next steps
Set up your backend first, because the client can't do anything without a token.
@livqeno/server: rooms, tokens, chat admin.
livqeno, sync and async clients.
Standard library only, context on every call.
Java 17+, builders and immutable records.
PHPPHP 8.1+, ext-curl, typed responses.
Requirements, TypeScript, Next.js setup.
Next.jsA Route Handler mints the token, a Client Component joins.
React<LivqenoRoom> and hooks.
The same Room API on iOS and Android.
livqeno_rtc, livqeno_chat, livqeno_live.
Projects, keys and diagnostics from a terminal.
Browser supportWhat each browser can and can't do.