Thomas
19f9769d9e
fix(manage/about): bypass self-fetch + add manage error boundary (LLM exploration) ( #6009 )
...
* fix(manage/about): bypass self-fetch to prevent ECONNREFUSED crash
The /manage/about page fetched its own API routes over HTTP
(http://$HOSTNAME:3000/api/about/ ...). When the server could not
reach itself (misconfigured HOSTNAME, restricted container networking,
reverse-proxy setups), fetch threw ECONNREFUSED and the whole page
crashed with a full-page Next.js error (issue #6008 ).
All four routes were force-static serving static JSON / a direct fs
read, so the HTTP round-trip was unnecessary. Replace the fetches
with direct JSON imports and a direct getDependenciesAsync() call,
eliminating the self-network dependency entirely.
Also add a manage-level error.tsx boundary (Next.js 16 convention) so
that any future runtime error in a manage page renders a friendly,
localised fallback inside the existing layout (sidebar stays usable)
instead of the ugly default full-page error.
Exploration draft by an LLM.
Refs #6008
* style: auto-fix lint and format
* refactor: use @static-data path alias, simplify error ternary
- Add @static-data/* tsconfig path alias to replace 7-level relative
imports (../../../../../../../static-data/...) with clean alias
imports across the about page and all 3 API route handlers.
- Simplify error.tsx: replace ternary with && short-circuit.
- Preserve CI lint bot's .sort() -> .toSorted() fix.
Refs #6008
2026-06-26 20:12:39 +02:00
Thomas Camlong
3e782a6907
style: remove remaining ponytail comments
2026-06-26 18:38:23 +02:00
homarr-renovate[bot]
f0b2486c8a
chore(deps): update dependency timezones-ical-library to ^2.2.1 ( #6077 )
...
* chore(deps): update dependency timezones-ical-library to ^2.2.1
* style: auto-fix lint and format
---------
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-26 16:18:40 +00:00
Matt Van Horn
2443b89b46
fix(plex): use series title for media releases instead of season label ( #6083 )
2026-06-26 14:42:36 +02:00
Thomas
915c8a3501
fix: show app first in add item modal ( #6087 )
2026-06-26 14:42:13 +02:00
a2bb53a8b8
feat: add VPN status widget ( #5812 )
...
Co-authored-by: Lokesh-Kumar-Dudi <lkumardudi@gmail.com >
Co-authored-by: Thomas Camlong <thomas@ajnart.fr >
2026-06-26 14:29:23 +02:00
homarr-renovate[bot]
f56a05bd8e
chore(deps): update dependency video.js to ^8.23.9 ( #6084 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-26 11:04:52 +00:00
homarr-renovate[bot]
6051b17401
chore(deps): update dependency nanoid@>=4.0.0 <5.0.9 to >=5.1.15 ( #6079 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-25 16:37:40 +00:00
ajnart
2018e9e81b
style: auto-fix lint and format
2026-06-25 15:39:31 +00:00
Thomas Camlong
c848dbfc1f
fix: scope polling to widgets, fix retry, guard dates, throttle umami
...
- Remove global refetchInterval; scope to widget queries via setQueryDefaults
- Fix error boundary retry: correct queryKey to [["widget"]], move invalidation to onReset
- Add toValidDate() helper in @homarr/common for cache hydration safety
- Guard date formatting in media-releases and media-requests against non-Date values
- Set umami refetchInterval to 60s via shared umamiQueryOptions constant
- Simplify dns-hole mutations to invalidate() instead of manual optimistic setData
2026-06-25 17:38:13 +02:00
ajnart
210a62b35a
style: auto-fix lint and format
2026-06-25 12:49:13 +00:00
Thomas Camlong
8f4f543d29
fix: resilient RSS/releases fetching and effect deps
...
- RSS feed: Promise.allSettled so one bad URL doesn't fail all feeds
- Releases: Promise.allSettled so one bad repo doesn't blank widget
- system-resources: add data to useEffect deps
- media-requests: invalidate all mediaRequests queries on answer
2026-06-25 14:47:58 +02:00
Thomas Camlong
92920db07d
style: fix dep ordering and restore redis null guard
2026-06-25 13:02:39 +02:00
Thomas Camlong
e7037ddfe9
chore: remove dead code leftovers from caching rework
...
- Remove dead Redis exports (exampleChannel, homeAssistantEntityState, queueChannel)
- Remove dead Beszel subscribeRealtimeMetrics/subscribeTopic (~100 lines)
- Add missing onSettled invalidation to downloads queue + indexer-manager mutations
- Rename invalidate-update-checker-cache → warm-update-checker
- Delete empty cron-jobs/integrations directory
- Fix stale comment and unused type imports
2026-06-25 12:37:33 +02:00
ajnart
cc50e47668
style: auto-fix lint and format
2026-06-25 10:02:36 +00:00
Thomas Camlong
cb5ad15305
fix: remove unused isEditMode params and dead clientApi import
...
Post-merge lint errors from dev — unused variables left behind
after subscription removal.
2026-06-25 12:01:01 +02:00
ajnart
2cb0964aa2
style: auto-fix lint and format
2026-06-25 09:57:29 +00:00
Thomas Camlong
26a8d219af
refactor: resilient integration queries + simplification
...
- Extract settleIntegrationQueries helper (Promise.allSettled + logging)
so one failing integration no longer kills the entire widget
- Convert 16 widget routers from Promise.all to settleIntegrationQueries
- Add onSettled query invalidation to downloads and media-requests mutations
- Inline 4 single-use firewall useUpdating* hooks
- Deduplicate firewall router (4 identical procedures → shared factory)
- Fix system-resources chart duplicate initial point (ref-based dedup)
- Simplify docker table refresh (refetch + isFetching, drop manual state)
- Trim invalidateIntegrationCacheAsync to session-store only (dead scan)
- Fix Beszel getAlerts: inner Promise.allSettled so systems failure
doesn't discard alerts
2026-06-25 11:56:05 +02:00
Thomas
cf5934aef6
Merge branch 'dev' into feat/simplify-caching-tanstack-persister
2026-06-25 11:49:39 +02:00
ajnart
9c6f900b82
style: auto-fix lint and format
2026-06-25 09:26:18 +00:00
Thomas Camlong
c4a664b7ac
fix: address PR review — bugs, dead code, error handling
...
Critical fixes:
- Smart Home: invalidate entity state query after toggle mutation
- Beszel live mode: use 5s refetchInterval instead of global 30s
- Fix unit test assertions for 5-arg setQueryCacheAsync signature
- Fix serialize/deserialize mismatch: JSON.parse on read (matches persister's JSON.stringify)
- Remove render-time setActiveQueryCacheBoardId race (keep only useEffect)
Error handling:
- Log persistence errors instead of swallowing with catch(() => {})
- Log QueryCacheHydration failures with ErrorWithMetadata
- Beszel: log partial failures (system details, container stats)
Dead code removal:
- Remove dead queryKey from all 39 request handlers + lib files
- Delete unused Redis APIs: createCacheChannel, createChannelWithLatestAndEvents,
createChannelEventHistory, history-channel.ts
- Remove stale createCacheChannel mock from docker test
Cleanup:
- Seed system-resources chart from initial query data (no empty start)
- Remove redundant refetchOnWindowFocus/refetchOnReconnect from BoardProvider
2026-06-25 11:25:09 +02:00
ajnart
457b1b0ce0
style: auto-fix lint and format
2026-06-25 09:07:24 +00:00
Thomas Camlong
5581b6db94
refactor: simplify request handlers and deduplicate config
...
- Re-enable TanStack Query retry (retry: 3 with exponential backoff),
delete all server-side retry logic from request handlers
- Strip handler factories to bare minimum: remove isValid, retry, widgetKind
- Remove redundant refetchOnWindowFocus/refetchOnReconnect from docker-table
- Deduplicate queryCacheMaxValueBytes (pass as param, single source of truth)
- Simplify system-resources chart: use dataUpdatedAt instead of ref-based tracking
- Fix leading blank lines in 27 request handler files
2026-06-25 11:06:03 +02:00
homarr-renovate[bot]
29eed08408
chore(deps): update dependency isomorphic-dompurify to ^3.18.0 ( #6074 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 17:20:55 +00:00
homarr-renovate[bot]
bd74fe4a61
chore(deps): update dependency posthog-js to ^1.391.0 ( #6073 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 17:18:43 +00:00
homarr-renovate[bot]
b88e8861e1
chore(deps): update dependency rollup@>=4.0.0 <4.22.4 to >=4.62.1 ( #6076 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 17:17:34 +00:00
homarr-renovate[bot]
39af3ec7e6
chore(deps): update dependency mantine-datatable to ^9.3.1 ( #6072 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 17:17:15 +00:00
homarr-renovate[bot]
7f50be3dbb
chore(deps): update dependency fast-xml-parser to ^5.9.3 ( #6069 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 14:48:29 +00:00
ajnart
a164c951ce
style: auto-fix lint and format
2026-06-24 13:11:34 +00:00
Thomas Camlong
18d6013f3f
merge: resolve conflicts with origin/dev
...
Take dev's newer dependency versions (tiptap 3.27.1, testcontainers 12.0.3).
Resolve beszel widget conflicts by keeping our approach (no per-widget
staleTime/refetchInterval/subscriptions, globals handle it).
2026-06-24 15:10:10 +02:00
Thomas Camlong
6416080b79
feat: replace server-side Redis caching with TanStack Query AsyncStoragePersister
...
Consolidate two overlapping cache systems (broken TanStack persister + per-query Redis hash + pub/sub) into one: TanStack Query as single source of truth with Redis as its persistence layer via createAsyncStoragePersister.
- Replace QueryClientProvider with PersistQueryClientProvider backed by Redis
- Set global query defaults (staleTime: 0, refetchInterval: 30s, gcTime: 24h)
- Remove all per-widget staleTime/refetchInterval/retry/refetchOnWindowFocus overrides
- Replace cached request handlers with simplified fetch-only versions
- Remove all tRPC subscription procedures and useSubscription calls in favor of polling
- Delete 20 cron jobs that only pre-warmed server-side cache
- Simplify Redis from per-query hash to single blob per user+board
2026-06-24 14:55:17 +02:00
homarr-renovate[bot]
b6b7bea1dd
chore(deps): update dependency mantine-contextmenu to ^9.3.1 ( #6071 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 11:56:45 +00:00
homarr-renovate[bot]
9bde1dfbd6
chore(deps): update dependency pg to ^8.22.0 ( #6068 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-24 04:26:21 +00:00
homarr-renovate[bot]
c2712ed7f1
chore(deps): update tiptap monorepo to v3.27.1 ( #6067 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 22:24:52 +00:00
homarr-renovate[bot]
16be7ece33
chore(deps): update dependency nanoid@>=4.0.0 <5.0.9 to >=5.1.14 ( #6066 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 20:19:16 +00:00
homarr-renovate[bot]
b0a46186d1
chore(deps): update node.js to v24.17.0 ( #6043 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 18:07:27 +00:00
homarr-renovate[bot]
d0385a4480
chore(deps): update dependency @ctrl/qbittorrent to ^9.13.0 ( #5978 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 18:06:38 +00:00
homarr-renovate[bot]
3d6a3594a3
chore(deps): update pnpm to v11.8.0 ( #6064 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 16:02:26 +00:00
homarr-renovate[bot]
641ee18278
chore(deps): update dependency hono@<4.6.5 to >=4.12.26 ( #6062 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 12:44:43 +00:00
homarr-renovate[bot]
2e538bf40d
chore(deps): update dependency lucide-react to ^1.21.0 ( #6063 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 09:52:42 +00:00
homarr-renovate[bot]
1c0a94a6dc
chore(deps): update playwright monorepo ( #6045 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 00:26:23 +00:00
homarr-renovate[bot]
3a3dc449de
chore(deps): update scalar monorepo ( #6056 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 00:22:43 +00:00
homarr-renovate[bot]
d6b156b8ee
chore(deps): update dependency posthog-js to ^1.388.1 ( #6041 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 00:21:38 +00:00
homarr-renovate[bot]
fc4e31fb42
chore(deps): update dependency @gfazioli/mantine-onboarding-tour to ^4.0.5 ( #6033 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-23 00:19:54 +00:00
homarr-renovate[bot]
b82b22431b
chore(deps): update vitest monorepo to ^4.1.9 ( #6037 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-22 22:15:25 +00:00
homarr-renovate[bot]
510cba295a
chore(deps): update dependency oxfmt to ^0.55.0 ( #6040 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-22 19:49:24 +00:00
homarr-renovate[bot]
56d838dafc
chore(deps): update dependency fast-xml-parser to ^5.9.2 ( #6039 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-22 19:45:28 +00:00
homarr-renovate[bot]
eae9f0438c
chore(deps): update oxlint monorepo ( #6044 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-22 16:17:14 +00:00
homarr-renovate[bot]
b81f729bfd
chore(deps): update testcontainers-node monorepo to ^12.0.3 ( #6057 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-22 16:07:28 +00:00
homarr-renovate[bot]
86b83c5425
chore(deps): update mantine monorepo to ^9.3.2 ( #6036 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-06-22 16:05:35 +00:00