mirror of https://github.com/synctv-org/synctv
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.
## Summary - split Prometheus definitions into domain-owned modules backed by one registry - eagerly initialize every metric family and fail startup on invalid or duplicate definitions - add reusable RAII guards for gauges and relay durations across cancellation, panic, and retry paths - centralize HTTP, WebSocket, gRPC, and relay recording behind bounded-label helpers - enforce the 65-metric bilingual catalog from registered descriptors - persist completed explicit-message deletion and user-ban moderation steps - update the pinned Rust toolchain and CI jobs to `nightly-2026-08-25` - make the CI Clippy job fail on every Rust warning with `-D warnings` - keep Helm configuration-validation builds visible to avoid silent-run termination - separate Rust caches by artifact type and let Helm reuse codegen artifacts from the Build job - work around the nightly global next-solver memory regression and remove obsolete rustc recursion-limit overrides - preserve workspace Rust flags in Docker builds while applying linker flags to the final binary ## Compatibility - preserve all existing metric names, HELP text, label order, and histogram buckets - keep route-template and bounded status/error labels - return HTTP 500 when Prometheus exposition encoding fails - keep the latest nightly while restoring the previous coherence-only trait-solver behavior ## Nightly memory regression The failed CI jobs were terminated by the runner while compiling `synctv-api-http` (SIGTERM, exit 143). Local peak-RSS measurements for that crate were: | Configuration | Peak RSS | | --- | ---: | | `nightly-2026-08-21` | 6.62 GB | | `nightly-2026-08-25`, global next solver | 10.76 GB | | `nightly-2026-08-25`, `-Znext-solver=coherence` | 6.64 GB | Rust enabled `-Znext-solver=globally` by default on nightly in [rust-lang/rust#160619](https://github.com/rust-lang/rust/pull/160619). The same memory blow-up is tracked in [rust-lang/rust#161748](https://github.com/rust-lang/rust/issues/161748), and the official tracking issue documents `-Znext-solver=coherence` as the temporary opt-out. The workspace now applies that option in `.cargo/config.toml`. The Dockerfile previously set `RUSTFLAGS` for linker options, which overrode the workspace configuration and re-enabled the global solver inside image builds. It now uses `cargo rustc` to pass linker flags only to the final binary, preserving the workspace solver setting for every crate. All rustc `#![recursion_limit = "256"]` attributes were removed. The default limit passes with the coherence-only solver, confirming that a higher recursion limit was unrelated to the CI termination. ## Validation - `make build-workspace` - `make clippy-check` (`--workspace --all-targets -- -D warnings`) - `cargo check --locked -p synctv-api-http` - `cargo check --locked -p synctv-api-common -p synctv-api-grpc` - `cargo test -p synctv-api-common --lib` (655 passed, 165 Docker tests ignored) - `cargo test -p synctv-core metrics --lib` (9 passed) - `make fmt-check` - `docker build --check .` - `make validate-helm` - `actionlint .github/workflows/ci.yml .github/workflows/helm-ci.yml` - `npm run validate` in `docs` (124 pages, 353 links, Astro 0 errors/warnings) |
4 weeks ago | |
|---|---|---|
| .cargo | 4 weeks ago | |
| .config | 2 months ago | |
| .github | 4 weeks ago | |
| .sqlx | 4 weeks ago | |
| docs | 4 weeks ago | |
| helm/synctv | 1 month ago | |
| migrations | 4 weeks ago | |
| scripts | 4 weeks ago | |
| synctv | 4 weeks ago | |
| synctv-adapter | 1 month ago | |
| synctv-api | 4 weeks ago | |
| synctv-api-common | 4 weeks ago | |
| synctv-api-grpc | 4 weeks ago | |
| synctv-api-http | 4 weeks ago | |
| synctv-cluster | 4 weeks ago | |
| synctv-common | 1 month ago | |
| synctv-core | 4 weeks ago | |
| synctv-livestream | 4 weeks ago | |
| synctv-management | 1 month ago | |
| synctv-media-providers | 4 weeks ago | |
| synctv-proto | 4 weeks ago | |
| synctv-proto-build | 1 month ago | |
| synctv-proto-main | 1 month ago | |
| synctv-proto-playback-provider | 1 month ago | |
| synctv-proto-providers | 1 month ago | |
| synctv-proxy | 1 month ago | |
| synctv-realtime | 1 month ago | |
| synctv-web-ui | 1 month ago | |
| synctv-xiu | 1 month ago | |
| .dockerignore | 1 month ago | |
| .env.postgres.example | 2 months ago | |
| .env.redis.example | 2 months ago | |
| .env.synctv.example | 1 month ago | |
| .gitattributes | 1 month ago | |
| .gitignore | 1 month ago | |
| CONTRIBUTING.md | 2 months ago | |
| Cargo.lock | 1 month ago | |
| Cargo.toml | 1 month ago | |
| Dockerfile | 4 weeks ago | |
| LICENSE | 2 months ago | |
| Makefile | 4 weeks ago | |
| README.md | 1 month ago | |
| README.zh-CN.md | 1 month ago | |
| SECURITY.md | 2 months ago | |
| deny.toml | 2 months ago | |
| docker-compose.dev.yml | 1 month ago | |
| docker-compose.yml | 1 month ago | |
| rust-toolchain.toml | 4 weeks ago | |
| synctv.example.yaml | 1 month ago | |
README.md
SyncTV
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.
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.
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.