Skip to content

Releases: rivulet-kodi/rivulet-engine

v0.28.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 22:45

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

Choose a tag to compare

@github-actions github-actions released this 21 Oct 08:13
1dc77f2

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

Choose a tag to compare

@github-actions github-actions released this 17 Oct 14:36
fea8c70

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

Choose a tag to compare

@github-actions github-actions released this 17 Oct 14:08
f7bc8c5

Changelog

♻️ Refactor

  • : refactor!: rename STREMIO_* environment variables to RIVULET_* (@M0Rf30)

🧰 Miscellaneous

  • : chore(deps): bump github.com/nwaples/rardecode/v2 (@dependabot[bot])

v0.26.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 13:41
3dec142

Changelog

♻️ Refactor

  • : refactor!: rename project to rivulet-engine under the rivulet-kodi org (@M0Rf30)

v0.25.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 17:13

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

Choose a tag to compare

@github-actions github-actions released this 09 Oct 21:33
2bdaed0

Changelog

🚀 Features

  • : feat(dvr): EasyProxy-compatible /record and /api/recordings (@M0Rf30)
  • : feat(streamproxy): POST/JSON-body extractor steps, embed match on /proxy/hls and /proxy/mpd (@M0Rf30)

v0.23.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 18:10

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=mmap to 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_BYTES caps 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

  • : perf(archive,nzb): reuse the live session when a create request is repeated (@M0Rf30)
  • : perf(media,api): STREMIO_HLS_SEGMENT_CACHE_BYTES knob; 1 h stalled-client bound (@M0Rf30)

v0.22.1

Choose a tag to compare

@github-actions github-actions released this 09 Oct 14:36

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

  • : perf(streamproxy): cut HLS playlist rewrite cost 3.6x (@M0Rf30)
  • : perf(streamproxy): lock- and allocation-free definition matching (@M0Rf30)

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 13:55

Upgrade notes

  • Security: built with Go 1.27.2 and golang.org/x/net v0.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=1 was previously a no-op (the auto-generated signing secret always forced private-address blocking). With it set and no proxy password or IP ACL, /proxy can now really reach loopback/LAN destinations. Defaults are unchanged (blocked). To reach specific LAN hosts from a password-protected server, use the new STREMIO_PROXY_PRIVATE_ALLOW.
  • New: MediaFlow/EasyProxy-compatible /extractor/video driven 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 new STREMIO_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)

🧰 Miscellaneous

  • : chore(media): drop unused runProbe wrapper (@M0Rf30)
  • : chore: add SPDX headers to new api tests (@M0Rf30)