VoxaRTC
Live in production · v0.2.7

Agora-compatible realtime video, on servers you own.

VoxaRTC is a drop-in replacement for agora_rtc_engine. Same classes, same signatures, same error codes, same callback order — pointed at your own LiveKit stack.

pubspec.yaml — the entire migration
dependencies:
-  agora_rtc_engine: ^6.6.3
+  voxa_rtc_engine: ^0.2.7
Then change the import. Every RtcEngine call site in your app compiles and behaves the same.
lib/call_page.dart
import 'package:voxa_rtc_engine/voxa_rtc_engine.dart';
import 'package:voxa_rtc_engine/voxa.dart';

// The one line Agora didn't have:
VoxaRtc.serverUrl = 'https://gate.zamansheikh.com';

final engine = createAgoraRtcEngine();
await engine.initialize(const RtcEngineContext(appId: appId));
await engine.joinChannel(
  token: token,
  channelId: 'room-42',
  uid: 0,
  options: const ChannelMediaOptions(
    clientRoleType: ClientRoleType.clientRoleBroadcaster,
  ),
);
Why VoxaRTC

Compatibility as a product, not a promise

Most 'Agora alternatives' ask you to rewrite your call layer. This one asks you to change a dependency line.

Import-only migration

The complete agora_rtc_engine 6.6.3 public surface is present. Your existing call sites, enums and error codes compile untouched — no shims, no wrappers.

Behaviour verified, not assumed

Golden transcripts recorded from the live Agora service and replayed against VoxaRTC. Callback ordering, dedup and timing are diffed scenario by scenario.

Your existing token server

The gateway verifies genuine Agora AccessToken2 (007) and legacy (006) tokens, including relative privilege expiry. Your backend keeps minting what it always minted.

LiveKit under the hood

A proven SFU does the media. VoxaRTC is the compatibility layer: Agora semantics in, LiveKit rooms out, with the seams that differ handled for you.

Metered and moderated

Participant-minutes accumulate from LiveKit webhooks. Kick a participant or close a channel from the console or the admin API.

No per-minute vendor bill

Run it on one VPS or a cluster. You pay for the hardware and bandwidth you actually use, and the SDK is MIT-licensed.

Architecture

Three moving parts, one of them yours already

The gateway sits beside your token server. It never touches audio or video.

  1. 01

    Your app calls the Agora API

    voxa_rtc_engine implements it. joinChannel, roles, mute, camera flip, volume indication, stats — the calls and callbacks your code already makes.

  2. 02

    The Compat Gateway exchanges the token

    It verifies your Agora-format token against the app certificate, maps channel + uid to a LiveKit room + identity, and returns a short-lived LiveKit JWT.

  3. 03

    LiveKit carries the media

    The SDK connects straight to your SFU. The gateway is out of the media path entirely — it only sees join requests and usage webhooks.

  Flutter app                Compat Gateway              LiveKit SFU
  ───────────                ──────────────              ───────────
  voxa_rtc_engine
    joinChannel(token) ──▶  POST /v1/join
                            verify Agora 006/007
                            map channel+uid ──▶ room+identity
                       ◀──  { url, LiveKit JWT }
    connect ─────────────────────────────────────────────▶  media
                            POST /v1/webhooks  ◀───────────  usage
  onJoinChannelSuccess
  onUserJoined / onUserPublished / onAudioVolumeIndication
Pricing

Pay for infrastructure, not per minute

The SDK is free and MIT-licensed in every tier. What you pay for is somebody running the servers — and that somebody can be you.

Self-hosted

Free

MIT licensed

Run the whole stack yourself. No key, no quota, no call home.

  • Flutter SDK from pub.dev
  • Compat Gateway + LiveKit via Docker Compose
  • Unlimited apps, channels and participants
  • Usage metering and admin API included
  • Community support
Read the self-hosting guide
Most popular

Managed

$29

/ month + $0.99 per 1k participant-minutes

We run the gateway, the SFU and the TLS. You point your app at it.

  • Everything in Self-hosted
  • Managed gateway + SFU with TLS
  • Console access with usage and moderation
  • Token import: keep your existing App ID and certificate
  • Email support, 72h response
Open the console

Scale

Talk to us

annual, volume-priced

Dedicated capacity, regional SFUs and a migration engineer.

  • Everything in Managed
  • Dedicated or on-prem deployment
  • Regional SFUs and TURN relays
  • Parity testing against your own call flows
  • SLA and priority support
Start the conversation

A participant-minute is one person connected for one minute, audio or video. Metered from LiveKit room webhooks — the same numbers the console shows you.

One dependency line stands between you and your own infrastructure.

The quickstart takes about ten minutes, including the Docker Compose stack.