Skip to content

Releases: JirakJ/kick-web-os-app

v0.8.2 — Stream for Kick

Choose a tag to compare

@github-actions github-actions released this 18 Oct 11:42
677abfe

The unofficial Kick TV app for LG webOS now fits home and replay browsing to the screen:

  • Compact channel entry above three saved-channel panels. Their page size follows the available height and text size, with a visible footer and no vertical scrolling.
  • Replay cards use the available thumbnail space and adapt their page size. Titles, dates and paging controls stay fully visible.
  • Directional navigation follows the painted rows and columns. Resizing preserves the selected item or restores focus when a pager disappears.
  • Long unavailable-status labels retain room for favorite channel names.

Verified on LG 55NANO863NA / webOS 5.6.2 / Chromium 68, with 720p/1080p viewport and text/contrast combinations, real replay 1080p/60, decoder cleanup and bounded resize stress. All 1,144 browser screens across 13 locales passed. Physical handset, spoken Voice Guide, audible output and extended-soak limits remain in the device audit.

New native TV captures are attached below and to the documentation. SHA256SUMS covers the IPK and every attached PNG. Saved-channel lists are demonstration choices; replay catalog and playback use public content. Install with webOS Dev Manager or the existing Homebrew setup; unchanged app/service IDs preserve local data. Keep v0.8.1 for rollback.

Home

Home with larger text

Replay catalog

Native replay playback

v0.8.1 — Stream for Kick

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:45
e611889

Fixes home navigation and favorites after the 0.8.0 feature release:

  • The version stays visible in the footer while channel shelves scroll.
  • About and updates and Accessibility now open from the footer.
  • Add or remove favorites with a heart on the right of the channel input, recent-channel row or catalog heading. Row hearts act on their own channel and preserve the entered channel and viewing history.
  • Directional navigation follows the new row controls. Focus outlines stay fully visible at scroll boundaries, including larger text and high contrast.

Verified on LG 55NANO863NA / webOS 5.6.2 / Chromium 68, including eight viewport/text/contrast combinations, seven favorites and original-data preservation. All 1,144 browser layout screens passed across 13 locales. Independent code review passed. The CI-gated release includes dependency checks, legacy Node.js service tests and secret scanning.

Install the IPK with webOS Dev Manager or the existing Homebrew setup and verify SHA256SUMS. The app/service IDs stay unchanged and preserve local data. Keep v0.8.0 for rollback. See the device audit for exact scope and remaining physical-device coverage.

v0.8.0 — Stream for Kick

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:22
82e4735

Adds eight viewer features:

  • Continue watching and replay resume/start-over, with bounded local history.
  • Favorites with stable ordering, paging and visible-channel LIVE status.
  • Auto and validated fixed-quality renditions; pause and replay position survive changes.
  • Fresh-source reconnect with bounded retries, explicit retry and pause/cancellation handling.
  • Local saved-channel and replay-title search, viewing filters and deterministic ordering.
  • Go to time and deliberate ten-minute seek previews with Confirm/Cancel.
  • Viewer-initiated official stable-release checks and supported manual update guidance.
  • App-only larger text and high contrast, consistent focus and localized status labels.

TV acceptance found and fixed a webOS 5 zero-clock race: a second quality change
while paused could lose the requested replay position. Regression coverage and
native retesting now preserve it, including 2:03:04 through 720p, Auto and reconnect.

Verified on LG 55NANO863NA / webOS 5.6.2 / Chromium 68: real live and replay 1080p/60,
fixed 720p/60, restart/storage, native TV keyboard input, multi-hour seeking,
completion, a 55-second TV-only internet outage and bounded recovery. Sixteen
replay start/return and 50 pagination cycles kept catalog DOM/listener counts
stable; native decoder cleanup passed. All 13 locales pass 1,144 browser screens;
CI also covers Node.js 0.12.2 and 8.12.0, dependency audit and secret scanning.

The same app/service IDs preserve local data. Install the official IPK through
webOS Dev Manager or the existing Homebrew setup and verify SHA256SUMS. Keep
v0.7.5 for rollback. There is no automatic in-app installer.

Voice Guide is off and unchanged; audible output, physical handset input,
Wi-Fi/router restart, naturally expired sources, multi-hour soak and actual
4K/1440p decoding remain unverified. Native audio telemetry is active/unmuted.
See the device acceptance audit
for measurements and the distinction between real hardware and browser fixtures.

v0.7.5 — Stream for Kick

Choose a tag to compare

@github-actions github-actions released this 18 Oct 07:49
b04b6dd

Fixes playback recovery and seek races, reduces timer churn, and bounds retained
UI and network resources. Includes the build-tool security fixes prepared in
0.7.4; 0.7.4 was tested locally but was not published.

  • Preserve a newly entered seek target when resuming or recovering a decoder.
  • Cancel a seek's debounce timer when native seek completion starts queued work,
    preventing orphan callbacks from committing later input early.
  • Keep one stall watchdog and renew its deadline using a monotonic clock. A
    simulated minute with 240 progress events now allocates 3 timers instead of
    240, while still detecting a stall twenty seconds after the last progress.
  • Detach retired videos before the final empty-source reset, remove every media
    listener, and avoid retaining old videos in unsettled play callbacks. Native
    stress testing caught the webOS teardown-order retention.
  • Release replay cards and thumbnail references on return to the home screen.
  • Cap idle HTTPS sockets at two across all media origins. A real-socket test
    over 25 CDN origins verifies the cap and same-origin keep-alive reuse.
  • Add both resource integration tests to the Node.js 0.12.2 and 8.12.0 CI jobs.
  • Require npm audit and a checksum-verified, pinned Gitleaks history scan in CI;
    publication runs only after every main-branch CI job succeeds.

The application and service identity remain com.jakubjirak and
com.jakubjirak.service. Updates from 0.7.2 or newer preserve their stored data.
Download com.jakubjirak_0.7.5_all.ipk and verify the attached SHA256SUMS.

Validation and device measurements are recorded in the
production audit.
Resource limits and bounded stress tests are not a guarantee against every
browser, decoder or firmware leak, and multi-hour playback remains unverified.

v0.7.3 — Stream for Kick

Choose a tag to compare

@github-actions github-actions released this 17 Oct 23:39
b7015e5

Fresh release of the current main-branch state, consolidating the completed legacy-runtime, package-identity and CI fixes. There are no additional player features or dependency upgrades compared with 0.7.2; app, service, lockfile and displayed versions are aligned to 0.7.3.

  • Application/package ID: com.jakubjirak.
  • Luna service: com.jakubjirak.service.
  • Includes Claire's Node.js 0.12.2 compatibility fix, ES5 title handling, safe playlist request encoding, fresh-socket retries and the CSS Grid fallback.
  • Includes the Actions npm-cache cleanup fix tracked in issue #4; the historical failed run remains in the audit, with successful follow-up runs linked.
  • The release is built by CI from the tagged commit. Download com.jakubjirak_0.7.3_all.ipk and verify it with the attached SHA256SUMS.

Validation: the full regression suite and official webOS CLI package build are rerun for this release. CI also runs service integration checks on actual Node.js 0.12.2 and 8.12.0. Publication is gated on all main-branch CI jobs succeeding.

Installation: updates from 0.7.2 use the same app/service identity and retain the new application's data. Versions 0.7.1 and earlier used cz.jirak.kicktv; installing this package alongside those versions starts separate recent-channel and replay history, without automatic migration.

Device verification: LG UJ6307 / webOS 3.5 installation, live Kick TLS connectivity, native playback/seek and old-engine visual layout remain unverified on hardware.

v0.7.2 — Stream for Kick

Choose a tag to compare

@github-actions github-actions released this 17 Oct 23:34
bda4864

Changes the application/package ID to com.jakubjirak and its Luna service ID to com.jakubjirak.service.

  • Updates application and service manifests, service registration, and all UI service calls together.
  • Names the installation package com.jakubjirak_0.7.2_all.ipk; release publishing derives this name from the app manifest.
  • Adds checks that the manifests, service registration and UI requests agree on the new identity.
  • Retains the Node.js 0.12.2 / older webOS compatibility fixes from 0.7.1.

Installation: this ID is different from cz.jirak.kicktv used in 0.7.1 and earlier. The new application installs separately and starts with its own recent channels and replay history. Existing data stays with the old application; no automatic migration is performed. Both can be installed at the same time.

Validation: full local regression suite, actual Node.js 0.12.2 and 8.12.0 service integration checks, and the official webOS CLI package build. CI repeats the tests before publishing the exact tested artifact and SHA256SUMS. On-device installation, native playback and layout on LG UJ6307 / webOS 3.5 remain unverified.

v0.7.1 — Legacy LG TV compatibility

Choose a tag to compare

@github-actions github-actions released this 17 Oct 23:28
7c1ab5b

Adds legacy service-runtime compatibility for LG TVs using Node.js 0.12.2, including the LG UJ6307 (2017) / webOS 3.5 reported by Claire. Thanks to Claire for the detailed investigation. Fixes #2.

  • Replaces unavailable Array.from in the service and UI while keeping complete emoji at title-length limits.
  • Removes the dependency on WHATWG url.URL; playlist requests retain strict HTTPS host validation and preserve signed query escapes.
  • Uses Unicode normalization when the TV provides it and retains readable original text otherwise.
  • Retries a reset connection once using a fresh socket, avoiding stale keep-alive sockets on old Node versions.
  • Adds a flexbox replay catalog fallback for engines without CSS Grid.
  • Adds real Node.js 0.12.2 and 8.12.0 integration checks to CI.

Validation: full regression suite on Node.js 24.19.0; integration checks on actual Node.js 0.12.2 and 8.12.0; official ares-package build. Integration checks use local network streams and gzip, covering channels, public replays, statuses, HLS metadata, Unicode, signed URL escaping, rejected origins, response limits and transfer failures.

Device verification: no LG UJ6307 was available. Installation, live Kick TLS connectivity, native playback/seek and old-engine visual layout still need to be checked on webOS 3.5. This release fixes confirmed code incompatibilities; it does not claim completed hardware verification.

Install cz.jirak.kicktv_0.7.1_all.ipk with webOS Dev Manager. It includes both the app and its service, preserves the existing app ID and stored viewing history, and does not modify TV firmware. SHA256SUMS verifies the package.

v0.7.0 — Interface in the TV language and lighter Kick transfers

Choose a tag to compare

@JirakJ JirakJ released this 12 Sep 22:01
da80d90

The interface now follows the TV's system language. Czech, Slovak, English, German, Polish, Spanish, Portuguese, French, Italian, Hungarian, Ukrainian, Russian and Turkish are bundled; other languages fall back to English. The launcher title is localized through resources/<language>/appinfo.json, and service errors carry stable codes that the app translates.

Performance: the TV service negotiates gzip for Kick responses (measured 8.8 KB → 2.4 KB for a channel document and 64 KB → 7.5 KB for a 30-replay list) and reuses TLS connections through a keep-alive agent. The emoji-isolating title expression is compiled once and thumbnails decode asynchronously.

Security: compressed responses are piped with backpressure and rejected at the existing 1 MiB decoded limit; unsupported encodings are refused before reading; translated error codes are validated against the dictionary with bounded parameters; the deprecated url.parse was replaced with the WHATWG parser after the allowlist check. A PR review caught an inflater teardown that would have crashed the TV's Node 8 runtime; the fix was confirmed on a real Node 8.12.0 binary. OSV (229 packages), npm audit, Gitleaks and Semgrep reported no findings in their checked scopes.

Validation: local regression suite including 13-language coverage, locale detection, launcher resources, translated service errors, gzip/malformed transfers, and the packaged IPK contents. The TV was unreachable during this release, so the language switch, launcher resources and gzip path have not yet been checked on the device.

Install the attached IPK with webOS Dev Manager. It contains both the app and service and preserves saved channels and replay history. This is an application update, not TV firmware. See README and docs/production-audit.md for controls, verification scope and limitations.

v0.6.0 — Live recent channels and TV UI improvements

Choose a tag to compare

@JirakJ JirakJ released this 12 Sep 17:52

Recent channels now show a ŽIVĚ badge while live, retain up to 50 entries with six per page, and can be removed individually with ×. The app has a green Kick launcher icon, a visible version in the footer and a seek bar without the focus rectangle.

This release also fixes failed HTTP request cleanup, bounds input sizes and reduces redundant thumbnail/timeline work. Long text and symbols stay within their controls in the checked layouts. Repository screenshots were refreshed from this version running on the TV.

Validation: local regression and packaged-app tests; 18 layout checks in the LG webOS browser; actual live and replay video at 1080p/60, paused seeking and rapid remote inputs. OSV (229 packages), npm audit, Gitleaks and Semgrep reported no findings in their checked scopes. Actual 4K/1440p playback and audible sound were not independently verified; the TV reported an active unmuted audio track.

Install the attached IPK with webOS Dev Manager. It contains both the app and service and preserves saved channels and replay history. This is an application update, not TV firmware. See README and docs/production-audit.md for controls, verification scope and limitations.

v0.5.2 — Broader channel symbol support

Choose a tag to compare

@JirakJ JirakJ released this 12 Sep 16:33

Fixes title symbol fallback after auditing 681 public LIVE/replay title entries from 35 channels, including 19 channels outside the initial sample.

  • Fixes fallback routing for ⚔️, ⚠️, ⛽, ✍️, ❌ and ❣️, with coverage for all 170 BMP emoji in the bundled font.
  • Keeps flags, skin tones, joined emoji and keycaps together while preserving ordinary text and number spacing.
  • Adds regression checks for all 68 sampled emoji sequences in catalog/player titles and eight compound cases. Includes the audit and local font rendering.

Local regressions, packaging, secret/SAST checks and dependency audit passed. The TV remained powered off: this release was not installed or tested on the TV. The font rendering is a local glyph check, not a browser or TV screenshot.

Install the attached IPK containing both the app and its service. SHA256SUMS records its checksum. Existing app data retains channel and replay history.