OTVI (Open TV Interface) is a YAML-driven television streaming platform. It lets providers expose login, channel browsing, and playback flows through configuration instead of custom per-provider application code.
otvi-server- Axum backend for auth, provider integration, streaming APIs, and static asset servingotvi-core- shared types, provider schema, and template/extraction utilitiesotvi-web- Leptos WebAssembly frontend for login, channel browsing, and playbackdocs/- Docusaurus documentation site with versioned release snapshots and a release blog
flowchart LR
operator["Provider author / operator"]
config["providers/*.yaml"]
subgraph server["otvi-server"]
direction TB
static["Static asset server"]
api["Axum JSON API"]
schema["Provider schema endpoint"]
runtime["Provider runtime\ntemplates + extractors"]
end
subgraph browser["Browser"]
direction TB
web["otvi-web\nLeptos + WebAssembly"]
player["Video player\nHLS / DASH / DRM config"]
end
subgraph providers["Provider platforms"]
direction TB
auth["Authentication"]
catalog["Channel catalog"]
playback["Playback + DRM"]
end
operator --> config
config --> runtime
static -- "serves app shell" --> web
web -- "JSON API" --> api
api --> schema
api --> runtime
runtime -- "HTTP" --> auth
runtime -- "HTTP" --> catalog
runtime -- "HTTP" --> playback
api -- "normalized responses" --> web
web --> player
classDef source fill:#f6f8fa,stroke:#8c959f,color:#24292f
classDef serverNode fill:#ddf4ff,stroke:#0969da,color:#24292f
classDef client fill:#dafbe1,stroke:#1a7f37,color:#24292f
classDef external fill:#fff8c5,stroke:#9a6700,color:#24292f
class operator,config source
class static,api,schema,runtime serverNode
class web,player client
class auth,catalog,playback external
- Rust stable
trunkfor the frontend:cargo binstall trunkwasm32-unknown-unknown:rustup target add wasm32-unknown-unknownwasm-packfor frontend UI tests:cargo binstall wasm-pack- Bun for the docs site and frontend package scripts
# build the frontend
(cd web && trunk build)
# run the backend
cargo run -p otvi-serverThe app serves on http://localhost:3000 by default.
# full Rust test suite
cargo test --workspace --all-features
# frontend UI tests
(cd web && wasm-pack test --headless --firefox --features ui-test --lib)
# docs site
(cd docs && bun install && bun run build)- Product and operator docs:
docs/ - Docs site maintainer workflow:
docs/README.md - Contributing guide:
CONTRIBUTING.md - Release process:
RELEASING.md - Security policy:
SECURITY.md - Support guide:
SUPPORT.md - Code of conduct:
CODE_OF_CONDUCT.md
devis the integration branch for normal pull requestsmainstages the next release and should stay closer to release-candidate quality- Pushes to
mainautomatically create pre-release builds with binaries for all supported platforms - Release automation publishes binaries and containers from
vX.Y.Ztags - Tagged releases require matching versions in
crates/otvi-core/Cargo.toml,crates/otvi-server/Cargo.toml, andweb/Cargo.toml - GHCR images are published without a floating
latesttag; usedev,main,v0,v0.1, or a full release tag such asv0.1.0 - Public docs default to the latest released version; unreleased docs remain available separately
Repository files can document and enforce part of this model, but GitHub settings still need administrator setup. See CONTRIBUTING.md and RELEASING.md.
AGPL-3.0-only. See LICENSE.