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 9ebfef16e9
feat(web): support runtime UI assets (#440)
## Summary

- add a `web-ui-dynamic` feature that serves a mutable Web distribution
without compile-time embedding
- add `server.web_ui_directory` and `SYNCTV_SERVER_WEB_UI_DIRECTORY`,
with per-request disk reads, SPA fallback, security headers, and path
containment checks
- keep `web-ui` release builds embedded while allowing the same
production binary and Docker image to use a mounted runtime directory
- configure `make dev-serve` to use `synctv-web-ui/dist` and document
both modes

## Docker behavior

CI continues to build release images with `web-ui`, so embedded assets
remain the default. Mounting a distribution and setting
`SYNCTV_SERVER_WEB_UI_DIRECTORY` makes that directory authoritative at
runtime.

## Verification

- `cargo fmt --all -- --check`
- `git diff --check`
- `cargo test -p synctv-api-http --features web-ui-dynamic
http::web_ui::tests`
- `cargo test -p synctv-api-http --features web-ui http::web_ui::tests`
- `cargo check -p synctv --features web-ui-dynamic`
- `cargo check -p synctv --features web-ui`
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 feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
.sqlx feat: add playback history management (#431) 1 month ago
docs feat(web): support runtime UI assets (#440) 1 month ago
helm/synctv release: prepare v1.0.3 (#430) 1 month ago
migrations feat: add personal user blocking (#429) 1 month ago
scripts release: prepare v1.0.3 (#430) 1 month ago
synctv feat(web): support runtime UI assets (#440) 1 month ago
synctv-adapter feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
synctv-api feat(web): support runtime UI assets (#440) 1 month ago
synctv-api-common feat(web): support runtime UI assets (#440) 1 month ago
synctv-api-grpc feat(logging): add structured transport access logs (#436) 1 month ago
synctv-api-http feat(web): support runtime UI assets (#440) 1 month ago
synctv-cluster refactor: remove low-value thin wrappers (#426) 1 month ago
synctv-common refactor: remove low-value thin wrappers (#426) 1 month ago
synctv-core feat(rtmp): add advertised publish workflow (#439) 1 month ago
synctv-livestream feat(rtmp): add advertised publish workflow (#439) 1 month ago
synctv-management feat: add personal user blocking (#429) 1 month ago
synctv-media-providers refactor: remove low-value thin wrappers (#426) 1 month ago
synctv-proto feat(rtmp): add advertised publish workflow (#439) 1 month ago
synctv-proto-build feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
synctv-proto-main refactor: remove low-value thin wrappers (#426) 1 month ago
synctv-proto-playback-provider feat(playlist): add browse access controls (#423) 1 month ago
synctv-proto-providers refactor: remove low-value thin wrappers (#426) 1 month ago
synctv-proxy fix(proxy): preserve seek range requests after inconclusive HEAD (#437) 1 month ago
synctv-realtime refactor: remove low-value thin wrappers (#426) 1 month ago
synctv-web-ui feat(web): support runtime UI assets (#440) 1 month ago
synctv-xiu feat(rtmp): add advertised publish workflow (#439) 1 month ago
.dockerignore feat(web): add client-aware playback and reproducible UI (#433) 1 month 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 feat(web): support runtime UI assets (#440) 1 month ago
.gitattributes feat: add recoverable resource deletion lifecycle (#394) 1 month ago
.gitignore feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
CONTRIBUTING.md chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
Cargo.lock feat(web): support runtime UI assets (#440) 1 month ago
Cargo.toml feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
Dockerfile feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
LICENSE chore: replace synctv-org backend with SyncTV v1.0.0 2 months ago
Makefile feat(web): support runtime UI assets (#440) 1 month ago
README.md chore: finalize web UI root coverage and docs (#438) 1 month ago
README.zh-CN.md chore: finalize web UI root coverage and docs (#438) 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 fix(webrtc): use public STUN by default (#427) 1 month ago
rust-toolchain.toml feat(web): add client-aware playback and reproducible UI (#433) 1 month ago
synctv.example.yaml feat(logging): add structured transport access logs (#436) 1 month 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

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.