# webrtc-android rebuilds the WebRTC core Google stopped shipping

> WebRTC Android is a pre-compiled WebRTC core for Android maintained by Stream, with Kotlin extensions, Compose components and a platform BOM, published to Maven Central. The library exists because Google stopped supporting the native WebRTC library for Android years ago and JCenter has since been shut down, so the pre-compiled binaries had to be rebuilt by somebody.

**GetStream/webrtc-android** — 🛰️ A versatile WebRTC pre-compiled Android library that reflects the recent WebRTC updates to facilitate real-time video chat for Android and Compose.

- Repository: https://github.com/GetStream/webrtc-android
- Website: https://getstream.github.io/webrtc-android/
- Stars: 886 · Forks: 108
- Language: Kotlin
- License: Apache-2.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/getstream-webrtc-android

## The upstream library stopped, so somebody had to rebuild it

WebRTC Android is Google's WebRTC pre-compiled library for Android, maintained by Stream. The README is explicit about the provenance: it reflects the recent GetStream/webrtc updates to facilitate real-time video chat using functional UI components, Kotlin extensions for Android, and Compose.

The reason it exists is in the Agenda section, and it is a short history of a dependency that disappeared. Since Google no longer supported the WebRTC library for Android for many years, and even JCenter has been shut down, the library is not available now, so Stream decided to build its own pre-compiled WebRTC core library that reflects recent WebRTC commits with some improvements.

That is the whole motivation, and it explains the shape of the project. A pre-compiled native library has to be rebuilt for every Android ABI and every release, and that is work nobody does for free. Stream did it because they were building video products and needed it, and published it under Apache-2.0.

The audience is an Android developer who needs WebRTC and has found that the old AARs are no longer downloadable. The primary language is Kotlin, the default branch is main, the homepage is getstream.github.io/webrtc-android, and the last push to the repository was on 2026-07-08. The listed releases are 1.3.10 on 2025-09-11, 1.3.9 on 2025-08-28 and 1.3.8 on 2025-02-21, so the release line is moving more slowly than the commit history.

## Six artifacts, and a bill of materials to keep them in step

The repository is a multi-module Gradle project, and the module names tell you what the library actually offers.

stream-webrtc-android/ is the core, the pre-compiled WebRTC binaries wrapped in a library module. stream-webrtc-android-compose/ holds the Compose UI components, and stream-webrtc-android-ktx/ the Kotlin extensions. There is stream-webrtc-android-ui/ for the parts of the interface that are not Compose specific, stream-webrtc-android-utils/ for the helpers, and stream-webrtc-android-bom/ for the platform BOM.

That last module is the one worth understanding. A platform BOM is a file that pins a version for every artifact in the group, so that a project can align the versions of the core, the extensions and the Compose components with a single declaration instead of pinning each one by hand. For a native library with several artifacts that have to match at the ABI level, that is not a convenience, it is the difference between a build that works and one that fails to link.

The rest of the tree is standard Gradle machinery. There is a build.gradle.kts and a settings.gradle.kts at the root, a gradle.properties, the gradle/ directory and the gradlew and gradlew.bat wrappers, and a buildSrc/ directory for custom build logic. There is a spotless/ directory, which is the code formatting setup, a benchmark/ directory, an app/ directory that is presumably a sample application, and bash/ and scripts/ directories of helper scripts.

The usecases.md file at the root is the list of projects using the library, which the README points to, and it is the most direct evidence of adoption available.

## One dependency line in a module build.gradle

The installation is a single dependency declaration, added to the module's build.gradle file:

```kotlin
dependencies {
    implementation("io.getstream:stream-webrtc-android:1.3.9")
}
```

The coordinates are io.getstream with the artifact stream-webrtc-android, and the version in the README example is 1.3.9. The package is on Maven Central, and the README carries a Maven Central badge pointing at a search for the io.getstream group and the stream-webrtc-android artifact.

The fact that it is a normal Gradle dependency rather than a jar you copy into the project is the point of the whole exercise. The old WebRTC AARs were distributed as binary downloads, which meant no dependency resolution, no version alignment and a manual upgrade step, and the JCenter shutdown removed even that. A Maven Central artifact gives you Gradle's dependency graph, and the platform BOM module gives you version alignment across the group.

Note that the artifact name in the coordinates, stream-webrtc-android, does not match the repository name, webrtc-android, and the README also refers to a snapshot repository path for the stream-webrtc-android artifact. That inconsistency is a small papercut, and it is worth checking the exact coordinate and version you are about to depend on rather than assuming they track the repository name.

## Snapshots come from Sonatype, and the version is dated

For developers who want the current development version, the README documents a snapshot import, and it works the way you would expect from a Maven setup.

The repository is added to the build file:

```kotlin
repositories {
   maven(url="https://central.sonatype.com/repository/maven-snapshots/")
}
```

and the dependency points at a snapshot version:

```kotlin
dependencies {
    implementation("io.getstream:stream-webrtc-android:1.3.11-SNAPSHOT")
}
```

A snapshot is a moving target, so this is a development convenience rather than something to ship. The README's example is version 1.3.11-SNAPSHOT, which is a useful detail, because the released versions listed at the top of the README are 1.3.10, 1.3.9 and 1.3.8, and the snapshot line is a patch ahead of the newest release.

The API level badge says API 21 and above, which is the minimum Android version the library supports. That is a floor worth checking against your application, and it is also the kind of constraint that a modern Compose application will satisfy without thinking about it, since Compose itself requires a much newer platform than API 21.

For the package structure, the repository has a build workflow in GitHub Actions under the android.yml name, and a Stream Feeds badge pointing at the organisation's own services.

## You program against org.webrtc, not against a Stream API

The usage section is short, and its substance is what the library does not change. Once you import it, you can use all of the org.webrtc package functions, such as org.webrtc.PeerConnection and org.webrtc.VideoTrack, and the README points at the API reference for more.

This is the key architectural decision, and it is a good one for an adopter. The library is not a wrapper with a Stream shaped interface on top. It is Google's own WebRTC API, compiled and packaged, with a Kotlin flavoured layer around it. Everything you already know about WebRTC from the browser applies, and the Android specific parts are the parts that were always awkward: the camera and microphone plumbing, the surface texture rendering, and the lifecycle.

The difference between this and a hosted SDK is therefore about where the work is. With this library you own the peer connection, the signalling and the media pipeline. With a hosted video SDK you get a complete product, but you are inside that vendor's API and their network.

That trade is exactly what the README's use case section describes. The official Android Video SDK by Stream is built from a versatile Core plus Compose UI component libraries, and it allows you to build video calling, audio room and live streaming apps based on WebRTC running on Stream's global edge network. A separate repository, webrtc-in-jetpack-compose, demonstrates the WebRTC protocol for real time video communications with Jetpack Compose directly.

So the same company publishes both the raw core and the hosted product, and the choice is whether you want the plumbing or the service.

## Apache-2.0, a slow release line and a well organised repository

The licence is Apache-2.0, and the repository root holds a LICENSE file. The badge in the README points at the Apache 2.0 licence page.

The repository is organised in a way that suggests regular work. There is an .editorconfig and a .gitattributes for the whitespace and line ending conventions, a .github/ directory for the workflows, and the spotless/ directory for formatting, which means the code style is enforced by a tool rather than by review comments. The gradle/ directory and the wrapper scripts mean the build does not depend on a system Gradle installation, and buildSrc/ holds the custom build logic, which is where the work of packaging the native binaries for each ABI and each Compose and Kotlin variant will live.

The version picture is the part to keep an eye on. The recent releases are 1.3.10 from 2025-09-11, 1.3.9 from 2025-08-28 and 1.3.8 from 2025-02-21, while the last push was on 2026-07-08. A gap of several months between the newest release and the newest commit is normal for a native library whose release process involves building binaries for several architectures, and it also means that if you are depending on a specific commit rather than a release, you are carrying something nobody has validated as a package.

The README also points at a set of technical articles on the organisation's site, covering the WebRTC concepts, how to establish a peer to peer connection and talk to a signalling server on Android, and the two tutorial parts on building a video chat app with WebRTC on Android and in Jetpack Compose. Those are the fastest way to understand the code, and they are written by the same people who maintain the library.

## Conclusion

Adopt webrtc-android if you are building an Android application with peer to peer video or audio and you need a pre-compiled WebRTC core that reflects recent upstream commits, with Kotlin and Compose layers on top. Do not adopt it if you would rather use a hosted communication service, because the official Stream Video SDK for Compose is built on this library and will save you the signalling work, and do not adopt it without checking the release line, since the listed releases are from 2025 while the last push was on 2026-07-08. Before you build against it, confirm the minimum API level of 21 matches your application, decide whether you want the Compose components or the plain Kotlin extensions, and read the usecases.md file to see how other teams have used it.

## FAQ

### Why does webrtc-android exist?

Because Google stopped supporting the WebRTC library for Android for many years and JCenter has been shut down, so the pre-compiled library was no longer available. Stream built their own pre-compiled WebRTC core that reflects recent WebRTC commits with some improvements.

### How do I add webrtc-android to an Android project?

Add the dependency to your module's build.gradle file with implementation("io.getstream:stream-webrtc-android:1.3.9"). The package is published on Maven Central, and snapshots are available from the Sonatype maven-snapshots repository.

### What API do you program against with webrtc-android?

The org.webrtc package, including org.webrtc.PeerConnection and org.webrtc.VideoTrack. The library packages Google's WebRTC core rather than replacing it with a different interface, and adds Kotlin extensions and Compose components on top.

### What is the difference between webrtc-android and the Stream Video SDK?

The Stream Video SDK for Compose is built on top of webrtc-android and provides a complete service for video calls, audio rooms and live streaming over Stream's edge network. webrtc-android on its own gives you the core and the peer connection, and you own the signalling and the media pipeline.

### What licence is webrtc-android released under?

Apache-2.0, with the LICENSE file at the repository root. The library supports API 21 and above, the recent releases are 1.3.10 from 2025-09-11, 1.3.9 from 2025-08-28 and 1.3.8 from 2025-02-21, and the last push was on 2026-07-08.

## Sources

- [GetStream/webrtc-android on GitHub](https://github.com/GetStream/webrtc-android)
- [License: Apache-2.0](https://github.com/GetStream/webrtc-android/blob/main/LICENSE)
- [Project website](https://getstream.github.io/webrtc-android/)
- [README](https://github.com/GetStream/webrtc-android/blob/main/README.md)
- [Releases](https://github.com/GetStream/webrtc-android/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/getstream-webrtc-android
