Synchronized viewing, theater, live streaming, video, long-distance relationship
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
zijiren b74e8c279c
fix(room): enforce member-owned resource lifecycle (#425)
## Summary
- preserve room membership and owned resources across global bans while
blocking browsing and playback until unban
- clean up member-owned media and dynamic playlists on leave, kick, and
account deletion while preserving ordinary shared playlists
- enforce lifecycle checks for playback, history, dynamic browsing,
direct IDs, backend generation, publish keys, RTMP, and historical
dynamic ancestors
- serialize playback transitions with ban and lifecycle cleanup
transactions and emit realtime outbox events atomically

## Verification
- `make fmt-check`
- `make clippy-check`
- `make nextest-default` (5238 passed, 1596 skipped)
- 15 targeted ignored Testcontainers lifecycle/concurrency tests passed
- `make sqlx-prepare` with only changed offline query cache entries
retained
1 month ago
.cargo chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
.config chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
.github ci: align checks with repository policies 2 months ago
.sqlx fix(room): enforce member-owned resource lifecycle (#425) 1 month ago
docs fix(bilibili): restore subtitles and dynamic live danmaku (#415) 1 month ago
helm/synctv release: prepare v1.0.2 (#408) 1 month ago
migrations feat(playlist): add browse access controls (#423) 1 month ago
scripts chore(dev): remove background server targets (#407) 1 month ago
synctv fix(room): enforce member-owned resource lifecycle (#425) 1 month ago
synctv-adapter fix: harden Bilibili playback reliability (#412) 1 month ago
synctv-api fix(room): enforce member-owned resource lifecycle (#425) 1 month ago
synctv-api-common fix(room): enforce member-owned resource lifecycle (#425) 1 month ago
synctv-api-grpc feat: separate room visibility from guest settings (#419) 1 month ago
synctv-api-http feat: separate room visibility from guest settings (#419) 1 month ago
synctv-cluster chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
synctv-common chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
synctv-core fix(room): enforce member-owned resource lifecycle (#425) 1 month ago
synctv-livestream chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
synctv-management feat(playlist): add browse access controls (#423) 1 month ago
synctv-media-providers fix(bilibili): restore subtitles and dynamic live danmaku (#415) 1 month ago
synctv-proto feat(playlist): add browse access controls (#423) 1 month ago
synctv-proto-build fix(bilibili): restore subtitles and dynamic live danmaku (#415) 1 month ago
synctv-proto-main chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
synctv-proto-playback-provider feat(playlist): add browse access controls (#423) 1 month ago
synctv-proto-providers fix(bilibili): restore subtitles and dynamic live danmaku (#415) 1 month ago
synctv-proxy fix(bilibili): restore subtitles and dynamic live danmaku (#415) 1 month ago
synctv-realtime fix(realtime): separate presence events from disconnects (#416) 1 month ago
synctv-xiu chore(deps): update backend dependencies (#421) 1 month ago
.dockerignore chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
.env.postgres.example chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
.env.redis.example chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
.env.synctv.example docs: add Compose environment generator 2 months ago
.gitattributes feat: add recoverable resource deletion lifecycle (#394) 2 months ago
.gitignore fix: harden Bilibili playback reliability (#412) 1 month ago
CONTRIBUTING.md chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
Cargo.lock chore(deps): update backend dependencies (#421) 1 month ago
Cargo.toml chore(deps): update backend dependencies (#421) 1 month ago
Dockerfile docs: add Compose environment generator 2 months ago
LICENSE chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
Makefile chore(dev): remove background server targets (#407) 1 month ago
README.md chore(dev): remove background server targets (#407) 1 month ago
README.zh-CN.md chore(dev): remove background server targets (#407) 1 month ago
SECURITY.md chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
deny.toml chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
docker-compose.dev.yml fix(bilibili): restore subtitles and dynamic live danmaku (#415) 1 month ago
docker-compose.yml chore(docker): keep database and cache internal (#414) 1 month ago
rust-toolchain.toml chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
synctv.example.yaml feat(oauth2): add provider modes and native Apple flow 2 months ago

README.md

SyncTV

SyncTV

简体中文 · Website

Rust Tokio Axum gRPC PostgreSQL Redis Docker Helm Kubernetes OpenAPI Astro Starlight License

SyncTV is a Rust implementation of a real-time synchronized video watching platform with media provider integration, livestreaming, HTTP/gRPC APIs, and Kubernetes-ready horizontal scaling.

SyncTV synchronized room playback

Highlights

  • Synchronized room playback with real-time state updates.
  • Media providers for Bilibili, Twitch, YouTube, Douyin, TikTok, Huya, Douyu, AcFun, CCTV, Alist, Cloudreve, Emby/Jellyfin, FNOS, QNAP, Synology, Nextcloud, Seafile, TrueNAS, direct URLs, and livestream sources.
  • RTMP push/pull, HLS, and HTTP-FLV livestream support.
  • RTSP external pull with TCP/UDP transport and live HLS/HTTP-FLV remuxing.
  • HTTP REST, public gRPC, WebSocket, management gRPC, metrics, RTMP, and STUN runtime surfaces.
  • PostgreSQL-backed durable storage with optional Redis shared state, cache, rate limiting, and cluster coordination.
  • Docker Compose and Helm deployment templates.
  • Built-in management CLI and optional OpenAPI/Swagger UI.
  • Astro Starlight documentation site with English and Simplified Chinese content.

Discussion and Contributors

Join the SyncTV Telegram discussion to talk with users and contributors about deployment, operations, media providers, client development, and the product roadmap.

SyncTV contributors

Quick Start

Development environment from a full repository checkout:

# Starts PostgreSQL and Redis, then runs SyncTV locally with development settings.
make dev-serve

# Starts optional media/auth/storage dependencies too.
make dev-stack

# Runs real CLI/curl provider smoke tests through the Makefile dev startup path.
make dev-smoke

Production Compose uses generated PostgreSQL, Redis, and application secrets:

# Requires Docker Compose and openssl.
make compose-init

# Edit SYNCTV_BOOTSTRAP_ROOT_PASSWORD in .env.synctv before starting.
make compose-up

Validate configuration:

cargo +nightly run -p synctv --bin synctv -- config validate

Optional migration preflight. The server also runs embedded SQLx migrations automatically during startup:

cargo +nightly run -p synctv --bin synctv -- db migrate

Start locally:

cargo +nightly run -p synctv --bin synctv -- serve

Documentation

Read the complete documentation at docs.syncs.tv.

Download the native client from the client downloads guide or SyncTV App releases. Store builds are distributed through the supported app stores.

License

MIT. See LICENSE.