A clean-room reverse engineering of the TikTok LIVE Protobuf Schema for interoperability.
Java
23
124 commits
updated Sep 28, 2026
Canonical Protobuf schemas for TikTok's Webcast WebSocket protocol, plus auto-generated language bindings published to their native package registries. Originally reverse-engineered for the TikTokLive project; maintained here as a standalone source of truth so multiple client libraries can share one schema.
[!IMPORTANT] This repository is an independent, non-commercial interoperability project. Its purpose is to document and provide compatible Protocol Buffer interface definitions for systems that need to communicate with TikTok-related services or data formats.
The Protocol Buffer definitions in this repository were produced through a clean-room reverse-engineering process. They are intended to describe interface behavior and wire-format compatibility, not to copy TikTok’s implementation code, internal systems, proprietary documentation, branding, or other protected expressive materials.
This project is based on the good-faith position that independently reimplemented interface definitions used for interoperability is permissible under applicable law, including principles reflected in Google LLC v. Oracle America, Inc., > 593 U.S. 1 (2021), where the U.S. Supreme Court held that limited reuse of software interface material for a transformative interoperability-related purpose constituted fair use.
Nothing in this repository is intended to:
- misappropriate trade secrets;
- reproduce TikTok source code or proprietary implementation logic;
- imply affiliation with, endorsement by, or sponsorship from TikTok or ByteDance;
- bypass technical protection measures;
- facilitate unauthorized access to any system; or
- enable infringement of TikTok’s intellectual property rights.
All trademarks, service marks, and product names are the property of their respective owners and are used only for identification and interoperability purposes.
If you believe this repository contains material that infringes your rights or otherwise raises a legal concern, please contact
info@isaackogan.com.
Join the TikTokLive discord for questions, contributions, and ideas.
Only src/**/*.proto is hand-edited. Generated bindings live under each target package's src/ tree and are rewritten by CI whenever a .proto file changes.
| Target | Package | Status |
|---|---|---|
| TypeScript | tiktok-live-proto on npm | ✅ Supported |
| Python | TikTokLiveProto | ✅ Supported |
| Go | — | Planned |
| Rust | — | Planned |
| Kotlin | — | Planned |
| Java | — | Planned |
The Python target uses betterproto2 with Pydantic-backed generated
dataclasses, versioned directly under v1 and v2, and imported as
TikTokLiveProto.v1 and TikTokLiveProto.v2.
Each target lives under targets/<language>/<package-name>/ with:
src/v{1,2}/*.proto files and emits committed bindings under the package's src/ tree.package.json, pyproject.toml, Cargo.toml).generate-<language>.yml — regenerates and commits bindings on .proto change.release-<language>.yml — workflow-dispatched publish with version bump.The TypeScript target is the reference implementation — mirror its layout and CI conventions when adding a new language.
This project is licensed under a modified AGPL License and is intended for non-commercial use only (research, interoperability, and reverse-engineering). See the LICENSE file at the repo root for details.
See also the full list of contributors who have participated in this project.
305 followers · starred Apr 2026
A clean-room reverse engineering of the TikTok LIVE Protobuf Schema for interoperability.
Java
23
124 commits
updated Sep 28, 2026
Canonical Protobuf schemas for TikTok's Webcast WebSocket protocol, plus auto-generated language bindings published to their native package registries. Originally reverse-engineered for the TikTokLive project; maintained here as a standalone source of truth so multiple client libraries can share one schema.
[!IMPORTANT] This repository is an independent, non-commercial interoperability project. Its purpose is to document and provide compatible Protocol Buffer interface definitions for systems that need to communicate with TikTok-related services or data formats.
The Protocol Buffer definitions in this repository were produced through a clean-room reverse-engineering process. They are intended to describe interface behavior and wire-format compatibility, not to copy TikTok’s implementation code, internal systems, proprietary documentation, branding, or other protected expressive materials.
This project is based on the good-faith position that independently reimplemented interface definitions used for interoperability is permissible under applicable law, including principles reflected in Google LLC v. Oracle America, Inc., > 593 U.S. 1 (2021), where the U.S. Supreme Court held that limited reuse of software interface material for a transformative interoperability-related purpose constituted fair use.
Nothing in this repository is intended to:
- misappropriate trade secrets;
- reproduce TikTok source code or proprietary implementation logic;
- imply affiliation with, endorsement by, or sponsorship from TikTok or ByteDance;
- bypass technical protection measures;
- facilitate unauthorized access to any system; or
- enable infringement of TikTok’s intellectual property rights.
All trademarks, service marks, and product names are the property of their respective owners and are used only for identification and interoperability purposes.
If you believe this repository contains material that infringes your rights or otherwise raises a legal concern, please contact
info@isaackogan.com.
Join the TikTokLive discord for questions, contributions, and ideas.
Only src/**/*.proto is hand-edited. Generated bindings live under each target package's src/ tree and are rewritten by CI whenever a .proto file changes.
| Target | Package | Status |
|---|---|---|
| TypeScript | tiktok-live-proto on npm | ✅ Supported |
| Python | TikTokLiveProto | ✅ Supported |
| Go | — | Planned |
| Rust | — | Planned |
| Kotlin | — | Planned |
| Java | — | Planned |
The Python target uses betterproto2 with Pydantic-backed generated
dataclasses, versioned directly under v1 and v2, and imported as
TikTokLiveProto.v1 and TikTokLiveProto.v2.
Each target lives under targets/<language>/<package-name>/ with:
src/v{1,2}/*.proto files and emits committed bindings under the package's src/ tree.package.json, pyproject.toml, Cargo.toml).generate-<language>.yml — regenerates and commits bindings on .proto change.release-<language>.yml — workflow-dispatched publish with version bump.The TypeScript target is the reference implementation — mirror its layout and CI conventions when adding a new language.
This project is licensed under a modified AGPL License and is intended for non-commercial use only (research, interoperability, and reverse-engineering). See the LICENSE file at the repo root for details.
See also the full list of contributors who have participated in this project.
305 followers · starred Apr 2026