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.
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.
dependencies:
- agora_rtc_engine: ^6.6.3
+ voxa_rtc_engine: ^0.2.7import '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,
),
);Most 'Agora alternatives' ask you to rewrite your call layer. This one asks you to change a dependency line.
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.
Golden transcripts recorded from the live Agora service and replayed against VoxaRTC. Callback ordering, dedup and timing are diffed scenario by scenario.
The gateway verifies genuine Agora AccessToken2 (007) and legacy (006) tokens, including relative privilege expiry. Your backend keeps minting what it always minted.
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.
Participant-minutes accumulate from LiveKit webhooks. Kick a participant or close a channel from the console or the admin API.
Run it on one VPS or a cluster. You pay for the hardware and bandwidth you actually use, and the SDK is MIT-licensed.
The gateway sits beside your token server. It never touches audio or video.
voxa_rtc_engine implements it. joinChannel, roles, mute, camera flip, volume indication, stats — the calls and callbacks your code already makes.
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.
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 / onAudioVolumeIndicationThe SDK is free and MIT-licensed in every tier. What you pay for is somebody running the servers — and that somebody can be you.
MIT licensed
Run the whole stack yourself. No key, no quota, no call home.
/ month + $0.99 per 1k participant-minutes
We run the gateway, the SFU and the TLS. You point your app at it.
annual, volume-priced
Dedicated capacity, regional SFUs and a migration engineer.
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.
The quickstart takes about ten minutes, including the Docker Compose stack.