Repository navigation
Releases: rivulet-kodi/rivulet-engine
Releases · rivulet-kodi/rivulet-engine
Release list
v0.28.0
Changelog
🚀 Features
- : feat(api): OpenAPI 3.1 spec with Scalar reference, Schemathesis API fuzzing and fuzz-found fixes (@M0Rf30)
🐛 Bug Fixes
- : fix(api-fuzz): request timeout above the server's 30 s yt-dlp/ffprobe bound (@M0Rf30)
- : fix: resolve deferred API-fuzz findings and fuzz stateful routes (@M0Rf30)
♻️ Refactor
- : refactor: remove dead code and gate it in CI (@M0Rf30)
🔧 CI & Build
- : build(deps): bump anacrolix/torrent to upstream HEAD 5f95cd3 (@M0Rf30)
- : ci: add workflow lint, CodeQL, Scorecard, Trivy, dependency review and tool pinning (@M0Rf30)
🧰 Miscellaneous
- : chore(agents): vendor golang review skills, review rules and agent commands (@M0Rf30)
v0.27.2
Changelog
📘 Documentation
- : docs(streamproxy): fix clientIP trust comment (@M0Rf30)
- : docs: point container image at ghcr.io/rivulet-kodi (@M0Rf30)
- : docs: slim the README to an overview and split the reference into docs/ (@M0Rf30)
🔧 CI & Build
- : build: bump Go to 1.27.3 (GO-2026-6809) and update modules (@M0Rf30)
v0.27.1
Changelog
🚀 Features
- : feat!: default data dir is ~/.rivulet-engine, migrating ~/.stremio-server (@M0Rf30)
♻️ Refactor
- : refactor!: rename remaining stremio-branded identifiers (@M0Rf30)
📘 Documentation
- : docs: use the Rivulet Engine product name in the systemd unit, Dockerfile label and HF card (@M0Rf30)
v0.27.0
Changelog
♻️ Refactor
- : refactor!: rename STREMIO_* environment variables to RIVULET_* (@M0Rf30)
🧰 Miscellaneous
- : chore(deps): bump github.com/nwaples/rardecode/v2 (@dependabot[bot])
v0.26.0
Changelog
♻️ Refactor
- : refactor!: rename project to rivulet-engine under the rivulet-kodi org (@M0Rf30)
v0.25.0
Changelog
🚀 Features
- : feat(media): STREMIO_HLS_PRIVATE_ALLOW for LAN media URLs (@Science4583)
🐛 Bug Fixes
- : fix(api): silence ST1005 on the verbatim EasyProxy duration error (@M0Rf30)
- : fix(hls): answer 502/504 with a reason when the source fails mid-transcode (@Science4583)
- : fix(hls): neutral segment-timeout wording, regenerated spec, README for 502/504 (@Science4583)
- : fix(media): accept decimal transcode bitrates (@Science4583)
- : fix(media): advertise the variant's peak as HLS BANDWIDTH (@Science4583)
- : fix(media): check self-origin mediaURLs by route; relay /proxy, /ftp, /yt (@Science4583)
- : fix(media): count a decimal audio bitrate in HLS BANDWIDTH (@Science4583)
- : fix(media): don't cache a segment whose video ends early or that ran during shutdown (@Science4583)
- : fix(media): inspect compressed relay responses as ffmpeg reads them (@Science4583)
- : fix(media): refuse DASH manifests the relay can't rule out (@Science4583)
- : fix(media): resolve relayed playlist entries against the post-redirect URL (@Science4583)
- : fix(media): tests and comments for the short-segment check (@Science4583)
📘 Documentation
- : docs(readme): rewrap the BANDWIDTH paragraph (@Science4583)
🧰 Miscellaneous
- : chore(ci): bump the github-actions group with 2 updates (@dependabot[bot])
- : chore(deps): bump the go-dependencies group with 3 updates (@dependabot[bot])
- : test(api): count cert API stub hits and keep /yt tests off the real yt-dlp (@Science4583)
- : test(api): keep the cert API out of the live network and the source tree (@Science4583)
- : test(media): accept any visible failure when the upstream body breaks off (@Science4583)
- : test(media): accept either failure reason when the upstream body breaks off (@Science4583)
v0.24.0
v0.23.0
Upgrade notes
Global performance & memory release. Measured on a real torrent vs v0.22.1: RSS after streaming a 123 MB file 164.7 → 40.4 MB (−75 %), server CPU per GB −12 %, throughput +9 %.
- Default disk-cache I/O is now classic (pread/pwrite) instead of memory-mapping torrent files, so memory no longer grows with the amount watched. Set
TORRENT_STORAGE_DEFAULT_FILE_IO=mmapto restore the old behaviour. - Archives / NZB stream progressively: playback starts before the whole entry/file is extracted or assembled (stored ZIP/TAR entries served in place; NZB over parallel NNTP connections, up to 4 per session). A failure discovered mid-stream now truncates the response instead of a pre-stream 500.
- Repeated identical
…/create/{key}requests reuse the live session for up to 1 h (players re-request it on every seek); local archives are re-checked by size/mtime, remote URLs are not re-fetched within that hour. - FTP reuses logged-in connections across seeks.
- HLS: new
STREMIO_HLS_SEGMENT_CACHE_BYTEScaps each session's transcoded segments on disk (default derived from bitrate, ~20 min). - Stream clients that make no progress for 1 h are disconnected.
Changelog
🐛 Bug Fixes
- : fix(api): bound the regex cache by compiled size; arm stream write deadlines only around writes (@M0Rf30)
- : fix(archive): don't hold archive files open across requests or past teardown (Windows) (@M0Rf30)
- : fix(archive): keep live streams on re-create, smarter byte-cap eviction, CRC-verify stored entries (@M0Rf30)
- : fix(engine): only trust a quiet janitor measurement once download counters are stable (@M0Rf30)
- : fix(ftp): reuse sessions after aborted seeks; don't redial on refused transfers (@M0Rf30)
- : fix(media): re-read the live slot limit when a cancelled waiter hands back its grant (@M0Rf30)
- : fix(nzb): keep in-use sessions alive on same-key re-create; close temp file before removing it (@M0Rf30)
- : fix(streamproxy): stalled clients can no longer pin the in-flight segment budget (@M0Rf30)
⚡ Performance
- : perf(api): actually use the pooled 256 KB stream copy buffer (@M0Rf30)
- : perf(api): cache f= filter regexes, drop stalled stream clients, prune local-addon caches (@M0Rf30)
- : perf(archive): serve archive entries progressively; stored entries in place (@M0Rf30)
- : perf(engine): choose classic file I/O via storage options, not the process env (@M0Rf30)
- : perf(engine): default torrent storage to classic file I/O on every platform (@M0Rf30)
- : perf(engine): sharded in-RAM storage locking, heap LRU eviction, event-driven refetch, cheaper janitor (@M0Rf30)
- : perf(ftp): reuse logged-in FTP control connections across Range requests (@M0Rf30)
- : perf(media): event-driven transcode slots, capped segment cache, O(1) relay eviction (@M0Rf30)
- : perf(nzb): progressive serving over parallel NNTP connections; pooled yEnc buffers (@M0Rf30)
- : perf(streamproxy): bound in-flight segment memory; decrypt in place (@M0Rf30)
🧰 Miscellaneous
v0.22.1
Upgrade notes
Performance release; no behaviour or configuration changes. Fixes a v0.22.0 regression in HLS proxying and goes well past v0.21.0:
| v0.21.0 | v0.22.0 | v0.22.1 | |
|---|---|---|---|
| Rewrite a 2000-segment VOD playlist | 2.82 ms · 22.0k allocs | 3.50 ms · 26.0k | 0.97 ms · 2.0k |
| Rewrite a live window (10 segments) | 14.1 µs | 17.2 µs | 7.1 µs |
/proxy/stream definition check (concurrent) |
— | 1.09 µs | 0.36 µs, lock- and allocation-free |
Changelog
⚡ Performance
v0.22.0
Upgrade notes
- Security: built with Go 1.27.2 and
golang.org/x/netv0.60.0 to fix GO-2026-6617 (HTTP/2 server crash from an HPACK encoder race). Upgrading is recommended. - Behaviour change:
STREMIO_PROXY_ALLOW_PRIVATE=1was previously a no-op (the auto-generated signing secret always forced private-address blocking). With it set and no proxy password or IP ACL,/proxycan now really reach loopback/LAN destinations. Defaults are unchanged (blocked). To reach specific LAN hosts from a password-protected server, use the newSTREMIO_PROXY_PRIVATE_ALLOW. - New: MediaFlow/EasyProxy-compatible
/extractor/videodriven by external, signed-or-local JSON definitions (no hosts ship in the binary), and embed-page resolution on/proxy/stream. See the README's Extractors section and the newSTREMIO_EXTRACTORS_*variables. - Players: proxied HLS now plays in ffmpeg ≥ 7.1 / mpv with default settings, and alternate audio/subtitle renditions are rewritten correctly.
Changelog
🚀 Features
- : feat(streamproxy): add MediaFlow-compatible /extractor/video endpoint (@M0Rf30)
- : feat(streamproxy): declarative, externally managed /extractor definitions (@M0Rf30)
- : feat(streamproxy): resolve embed pages on /proxy/stream via definition match (@M0Rf30)
🐛 Bug Fixes
- : fix(deps): bump Go to 1.27.2 and x/net to v0.60.0 for GO-2026-6617 (@M0Rf30)
- : fix(proxy): make STREMIO_PROXY_ALLOW_PRIVATE effective; add STREMIO_PROXY_PRIVATE_ALLOW (@M0Rf30)
- : fix(streamproxy): give proxied HLS segments a media file extension (@M0Rf30)
- : fix(streamproxy): route EXT-X-MEDIA/I-FRAME URIs to the HLS endpoint (@M0Rf30)
🔧 CI & Build
- : ci: bump golangci-lint to v2.14.0 for Go 1.27.2 (@M0Rf30)