Skip to content

Commit eb5b1e6

Browse files
chore(main): release 0.3.0
1 parent 513a34a commit eb5b1e6

4 files changed

Lines changed: 104 additions & 4 deletions

File tree

‎.release-please-manifest.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.2.0"
2+
".": "0.3.0"
33
}

‎CHANGELOG.md‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,106 @@ All notable changes to this project are documented here.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [0.3.0](https://github.com/rowkavdev/nowplaying/compare/v0.2.0...v0.3.0) (2026-10-03)
8+
9+
10+
### Features
11+
12+
* **linux:** add native tray with WebUI menu and bounded lifecycle ([513a34a](https://github.com/rowkavdev/nowplaying/commit/513a34ac83b62177d2227717bd7c6d9d1f6bbe05))
13+
14+
15+
### Fixes
16+
17+
* accept Spotify loopback callback only once ([dcd79cc](https://github.com/rowkavdev/nowplaying/commit/dcd79cc34dee588b9f6f3db8804efa732ab42ea4))
18+
* add Plex GDM and gateway identity discovery ([3ff647d](https://github.com/rowkavdev/nowplaying/commit/3ff647dfe452e7015e573327e25280caf1e3f946))
19+
* allow bounded status card cache buster ([fc52a06](https://github.com/rowkavdev/nowplaying/commit/fc52a06e353994b623754a343e133986f78d0e82))
20+
* **analytics:** send one Discord ping per process start when calls overlap ([1126e31](https://github.com/rowkavdev/nowplaying/commit/1126e31843b5bab01eb77d43bdeab1710c2e9acf))
21+
* apply privacy to Settings sample card preview ([46857d4](https://github.com/rowkavdev/nowplaying/commit/46857d484a4b0e51abf80b2c3d7103069f96977e))
22+
* atomically order hosted device ingests ([2dae312](https://github.com/rowkavdev/nowplaying/commit/2dae31272c56d5e04bb3529906ca6d68442ff7f0))
23+
* bind local card artwork to selected server ([c67c5e7](https://github.com/rowkavdev/nowplaying/commit/c67c5e7b85f34d8928b6406f3184a6424effd92f))
24+
* **card:** pick auto text direction from the displayed title ([cef0e17](https://github.com/rowkavdev/nowplaying/commit/cef0e172411dfffc2c948171cf05b0074ad37097))
25+
* classify revoked media server tokens as authentication failures ([723ed56](https://github.com/rowkavdev/nowplaying/commit/723ed56db9f8078ccd0cc08b7d7208901ed63950))
26+
* clear hosted playback on privacy save during outage ([5b9d572](https://github.com/rowkavdev/nowplaying/commit/5b9d5720e3b7df0ad94f76251d5033799213043d))
27+
* clear stale Spotify consent link on sign-in failure ([5ea5954](https://github.com/rowkavdev/nowplaying/commit/5ea5954385064d6b73c1d7709993110cf5647cb0))
28+
* confine provider credential redirects to original origin ([345edce](https://github.com/rowkavdev/nowplaying/commit/345edcebbc2f47c2cdd03ed2154c97aa5bb76d7a))
29+
* discard late sign-in start after Cancel ([8f52243](https://github.com/rowkavdev/nowplaying/commit/8f52243177978de6b8575688d8d731fc8d119cb5))
30+
* discard Spotify sign-in completion after expiry ([52d53bb](https://github.com/rowkavdev/nowplaying/commit/52d53bb23bfabc59ba3d90bb795f3893efa83817))
31+
* drive the injected test clock through both Discord client timers ([#731](https://github.com/rowkavdev/nowplaying/issues/731)) ([cf15ab0](https://github.com/rowkavdev/nowplaying/commit/cf15ab0fb4c1ba9f651209c9bb35ed3f4b2924d9))
32+
* expire abandoned hosted sign-in guard ([e0629c1](https://github.com/rowkavdev/nowplaying/commit/e0629c159ce6e75c08cc01ceff3ef25df00c82bd))
33+
* expire artwork cache by elapsed time ([#721](https://github.com/rowkavdev/nowplaying/issues/721)) ([513c1af](https://github.com/rowkavdev/nowplaying/commit/513c1afa44468a1d02e80c6ce429ccf1a4d74657))
34+
* expire Discord artwork by elapsed time ([#723](https://github.com/rowkavdev/nowplaying/issues/723)) ([3693e51](https://github.com/rowkavdev/nowplaying/commit/3693e51fd7dee9e440535de54ec02b8215426168))
35+
* expire local last-good card by elapsed time ([7844ffe](https://github.com/rowkavdev/nowplaying/commit/7844ffed00d509a0de2d8a6ff265cf3c28b70b6e))
36+
* expire YouTube tabs by elapsed time ([bcc0465](https://github.com/rowkavdev/nowplaying/commit/bcc0465a4a71750d503a447fc3633f6a06111410))
37+
* explain server sign-in save failures in Settings ([0260a5b](https://github.com/rowkavdev/nowplaying/commit/0260a5bad13e21a6078ca00dc5bfdb42e35f9838))
38+
* guard server sign-in and restore credentials on failed saves ([057f648](https://github.com/rowkavdev/nowplaying/commit/057f64846dc9716b7f3e011fab2f36ea4de82bdc))
39+
* **hosted:** require the exact application/json media type on ingest ([be97948](https://github.com/rowkavdev/nowplaying/commit/be97948dcdea488145b47d541abd91c0b00927fa))
40+
* identify current repository in MusicBrainz User-Agent ([ede2712](https://github.com/rowkavdev/nowplaying/commit/ede271278e80ca96d838ef52188935fb1a25d522))
41+
* invalidate cancelled provider sign-in polls ([ef5cb56](https://github.com/rowkavdev/nowplaying/commit/ef5cb566c4f872a69bedba6118e0eb76df201e44))
42+
* invalidate last-good card after appearance save ([9b21318](https://github.com/rowkavdev/nowplaying/commit/9b21318c9b44d08fb054b8950245b63a44621fa1))
43+
* invalidate pending Spotify sign-in on disconnect ([70f10e3](https://github.com/rowkavdev/nowplaying/commit/70f10e3ad7d393d871a0684c26d945f5cc465de9))
44+
* invalidate private card cache after privacy changes ([76bfa90](https://github.com/rowkavdev/nowplaying/commit/76bfa90e8abadee2178b5ec9810d96beed077083))
45+
* keep a clickable auth link in WebUI provider flows ([287c095](https://github.com/rowkavdev/nowplaying/commit/287c0954e0a2b3f46bed6eb52265a2b75cdfd32a))
46+
* keep authenticated artwork redirects on original origin ([f3f7090](https://github.com/rowkavdev/nowplaying/commit/f3f709014a611610db9c3c6166cfb20bb9230032))
47+
* keep committing sign-in flows through expiry ([1412f5d](https://github.com/rowkavdev/nowplaying/commit/1412f5d4000f3323bb7e45e90566e8736cf21fb9))
48+
* keep hosted heartbeat alive after client clock rollback ([819a4ab](https://github.com/rowkavdev/nowplaying/commit/819a4abcc24aa6db711029d9f628078f019caba3))
49+
* keep sign-in flow claimed throughout finish ([61bd08e](https://github.com/rowkavdev/nowplaying/commit/61bd08eff07e44620ccd9621803803187bfe1d63))
50+
* keep sign-in visible while commit finishes ([23a65a2](https://github.com/rowkavdev/nowplaying/commit/23a65a2b162fab9ed4343bf13764848101b49657))
51+
* keep status snapshot ordered by provider poll start ([9101ee8](https://github.com/rowkavdev/nowplaying/commit/9101ee8c0a0bc88780c95019218b2e83363a72c6))
52+
* make sign-in cancellation honest during credential commit ([bd0ec6a](https://github.com/rowkavdev/nowplaying/commit/bd0ec6a7b7e660b36b52597d967a6b2742851294))
53+
* measure Discord stuck and grace by elapsed time ([#727](https://github.com/rowkavdev/nowplaying/issues/727)) ([dc42e39](https://github.com/rowkavdev/nowplaying/commit/dc42e39e789cbcaeaa956a28463ce30589b8db69))
54+
* newest overlapping Spotify sign-in supersedes older pending flows ([#703](https://github.com/rowkavdev/nowplaying/issues/703)) ([b8649b2](https://github.com/rowkavdev/nowplaying/commit/b8649b2346c2edb032d85034c50686f156efcd87))
55+
* normalize private subnet targets before probing ([c8055b1](https://github.com/rowkavdev/nowplaying/commit/c8055b19b47fe14f04863deda363656c9eb296ff))
56+
* offer auth links in legacy setup page ([ec3fe04](https://github.com/rowkavdev/nowplaying/commit/ec3fe0423fc43d128c69954a1e3329ac1c013679))
57+
* omit hidden subtitles from card metadata and uploads ([4b2f4da](https://github.com/rowkavdev/nowplaying/commit/4b2f4dae6752b292d8e77b128fcc97e2f6935276))
58+
* omit progress track when timing is hidden ([17ad73e](https://github.com/rowkavdev/nowplaying/commit/17ad73e24fa489f4c1f24950fc739af30a2d2cb4))
59+
* prevent older hosted pushes from retrying above newer state ([7801e7d](https://github.com/rowkavdev/nowplaying/commit/7801e7d5d428e56ad6e9f02b5b95b10cbee99cf5))
60+
* prioritize failed sources over hosted startup ([ac10770](https://github.com/rowkavdev/nowplaying/commit/ac107707e79faea493a9120de3279acef201d6b3))
61+
* rank combined playback by activity order ([d4b83f9](https://github.com/rowkavdev/nowplaying/commit/d4b83f9a3f8b7987fc292c18cf73042e1a6b987a))
62+
* rank distinct same-title media items by stable ID ([d44b0ed](https://github.com/rowkavdev/nowplaying/commit/d44b0ed93bd7c051959695da87bb60ef79c87a25))
63+
* rank multi-server playback by activity order ([0bb954e](https://github.com/rowkavdev/nowplaying/commit/0bb954e06c1efd95bbd957ac7ee813e2a2aa4289))
64+
* rank YouTube tabs by playback activity order ([21c140f](https://github.com/rowkavdev/nowplaying/commit/21c140f0f1493bfd75eea0ba149de7037f257e9c))
65+
* re-check credential liveness before saving a rotated refresh token ([#725](https://github.com/rowkavdev/nowplaying/issues/725)) ([3ff3ccb](https://github.com/rowkavdev/nowplaying/commit/3ff3ccb3aa8af4461fc7ee5e70e83b6f3c4a51c5))
66+
* recover hosted upload sequence after clock rollback ([beb495d](https://github.com/rowkavdev/nowplaying/commit/beb495d50da48f6125bb916d64b531223b33fc22))
67+
* reflect per-server auth failures in tray and diagnostics ([1e6203d](https://github.com/rowkavdev/nowplaying/commit/1e6203d8ad59874dcfe8a48114e472e65a9b347f))
68+
* reject hosted ingest committed after device revocation ([2c668ce](https://github.com/rowkavdev/nowplaying/commit/2c668ce18fb43047dcc26a02abe81d49829163da))
69+
* reject oversized Discord IPC activity without leaking waiter ([a94006a](https://github.com/rowkavdev/nowplaying/commit/a94006afb036ca2750ba162127cb106f850de670))
70+
* remove saved sign-in when disconnecting a server ([fdd7c70](https://github.com/rowkavdev/nowplaying/commit/fdd7c701e4a53465d64886204d44116b7dd93b3b))
71+
* replace prior hosted device on same-PC sign-in ([e8e0755](https://github.com/rowkavdev/nowplaying/commit/e8e0755d70c1f585b98210f0322caaea65575e8a))
72+
* report bounded discovery probe failure reasons ([abcccbc](https://github.com/rowkavdev/nowplaying/commit/abcccbcb382f7421ba86a2e011dffb458b9cb7e1))
73+
* reset stuck detection for distinct same-title media ([8e26ced](https://github.com/rowkavdev/nowplaying/commit/8e26cedf3a0e9f01ace04ea845e247ed76148f17))
74+
* restore focus after cancelling server sign-in ([83cee39](https://github.com/rowkavdev/nowplaying/commit/83cee39b80c54d7caf9ba5dc88629d58d7764718))
75+
* restore Spotify credential when config save fails ([6f6b404](https://github.com/rowkavdev/nowplaying/commit/6f6b404dac44408b58bbeaf6fe316691219e8428))
76+
* retain hosted revoke key and expose pending disconnect ([abe2377](https://github.com/rowkavdev/nowplaying/commit/abe2377243f478f6aaf6a06def17cfdf5941c72b))
77+
* retry Discord clear after publish limiter ([7a2203d](https://github.com/rowkavdev/nowplaying/commit/7a2203d69030d3a7158e7b1edfc0e575602adae2))
78+
* retry failed Plex owner checks ([7729906](https://github.com/rowkavdev/nowplaying/commit/77299065807bb261f3393bc2342849cc2e64b2a0))
79+
* retry first-run activation after another sign-in ([91c9fe2](https://github.com/rowkavdev/nowplaying/commit/91c9fe2acd4cd7ff2014fec31fc776c20c45c723))
80+
* retry unchanged Discord activity after publish failure ([d6cff56](https://github.com/rowkavdev/nowplaying/commit/d6cff5638fb67c16718836d53870fad3d393572e))
81+
* run optional setup before committing server config ([89d9319](https://github.com/rowkavdev/nowplaying/commit/89d9319e1a279e6271b2e80126623d07c0dba9e5))
82+
* serialize same-account Spotify credential writes ([#703](https://github.com/rowkavdev/nowplaying/issues/703)) ([be5fdd1](https://github.com/rowkavdev/nowplaying/commit/be5fdd11955012c3acde85d85d2a2fe1fdd7cee4))
83+
* **setup:** accept a 4096-byte draft on load ([7d68d1d](https://github.com/rowkavdev/nowplaying/commit/7d68d1d9c904e73becab33fdbabc092103009c81))
84+
* **setup:** settle LAN discovery when cancelled during bind ([1757815](https://github.com/rowkavdev/nowplaying/commit/1757815d7596d7c69da70b5263d82edc604e6f81))
85+
* share first hosted registration across callers ([0cb6d0e](https://github.com/rowkavdev/nowplaying/commit/0cb6d0e35ecd43713a2bb2e289ac151dd29a5669))
86+
* show failed server in Settings notice ([65d65dd](https://github.com/rowkavdev/nowplaying/commit/65d65dd036d609cdd9c0e59f00dddb0e531fb6b4))
87+
* show localhost Plex probe failures in quick scan ([85d0e28](https://github.com/rowkavdev/nowplaying/commit/85d0e28d058c0f35600125489b79834907d4e29a))
88+
* show per-server sign-in failures in multi-server status ([627a8b2](https://github.com/rowkavdev/nowplaying/commit/627a8b2f2d197286beab59503c7d8fa7b855632c))
89+
* skip artwork fetch when card hides image ([d039fcb](https://github.com/rowkavdev/nowplaying/commit/d039fcb2b80e6e0eb6e9ed56c3405076ed4763f3))
90+
* space MusicBrainz requests by elapsed clock ([#734](https://github.com/rowkavdev/nowplaying/issues/734)) ([4a0cc23](https://github.com/rowkavdev/nowplaying/commit/4a0cc23c430d51fb1b373dbac79df2bab9ff2a06))
91+
* stream first-run discovery probe bodies with a running byte cap ([#745](https://github.com/rowkavdev/nowplaying/issues/745)) ([0ccf48b](https://github.com/rowkavdev/nowplaying/commit/0ccf48b6173b6824ab0d257e9430558d025e0f54))
92+
* surface failed first-run activation with recovery ([192e8b6](https://github.com/rowkavdev/nowplaying/commit/192e8b6d11bde8b4fe49fa081c7c35d29cb798f7))
93+
* surface hosted upload failures in app health ([b670eca](https://github.com/rowkavdev/nowplaying/commit/b670eca419e8f07c53d7b3753d16a42aa265d34b))
94+
* time Discord publish throttle and reconnect backoff by elapsed clock ([#731](https://github.com/rowkavdev/nowplaying/issues/731)) ([5794b1d](https://github.com/rowkavdev/nowplaying/commit/5794b1db1ad6f70dd1e4d29f3fbedb0f87be2cf5))
95+
* time hosted device flow by elapsed clock ([#729](https://github.com/rowkavdev/nowplaying/issues/729)) ([692f110](https://github.com/rowkavdev/nowplaying/commit/692f110f7ee32a541376f61f841fc2f50d6b75d0))
96+
* time hosted sign-in restart guard by elapsed clock ([#741](https://github.com/rowkavdev/nowplaying/issues/741)) ([18859b1](https://github.com/rowkavdev/nowplaying/commit/18859b1d86eac28d23d5068465d5848c0bcd3182))
97+
* time status-only refresh interval by elapsed clock ([#736](https://github.com/rowkavdev/nowplaying/issues/736)) ([d670e3a](https://github.com/rowkavdev/nowplaying/commit/d670e3aeb9a955c6f94cb60dd8701be31696d433))
98+
* track setup test rate window by elapsed clock ([#739](https://github.com/rowkavdev/nowplaying/issues/739)) ([e79d193](https://github.com/rowkavdev/nowplaying/commit/e79d1936b13c4c4153005c5f6c4c289ef74757b4))
99+
* **tray:** close the app on a stop request after the tray fails ([031a0b7](https://github.com/rowkavdev/nowplaying/commit/031a0b796c83085f614bff187aee01042421c94a))
100+
* **tray:** keep one quit waiter across Settings restarts ([1b2d99f](https://github.com/rowkavdev/nowplaying/commit/1b2d99ff9efd7da4e9201a514e7931492127719a))
101+
* **tray:** log tray outcomes with statuses the logger accepts ([73b4110](https://github.com/rowkavdev/nowplaying/commit/73b4110acdc974845f12db83a0fbc8540a53ea0a))
102+
* use elapsed time for hosted stale playback guards ([14b4cd9](https://github.com/rowkavdev/nowplaying/commit/14b4cd9652ebfd77055e7498e018a852590ebd70))
103+
* use elapsed time for hosted upload backoff ([e9cf458](https://github.com/rowkavdev/nowplaying/commit/e9cf45892c11a84052c10d7f7ed4d09700dc4da6))
104+
* use elapsed time for provider reconnect backoff ([e81bc10](https://github.com/rowkavdev/nowplaying/commit/e81bc10b3bd02a497eb585aa475485795146630d))
105+
* wait for cancel before switching server sign-in ([a3e90a6](https://github.com/rowkavdev/nowplaying/commit/a3e90a6535fb106eaa3d34add3a3b11965070982))
106+
7107
## [0.2.0](https://github.com/rowkavdev/nowplaying/compare/v0.1.0...v0.2.0) (2026-09-26)
8108

9109

‎package-lock.json‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nowplaying",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"private": true,
55
"type": "module",
66
"description": "Universal media presence core for Plex, Jellyfin, Navidrome and Emby",

0 commit comments

Comments
 (0)