Thomas Camlong
63e65bbc6c
perf(common): stop useTimeAgo re-rendering every second, add re-render profiler
...
measure-rerenders.mts counts React commits on an untouched board and attributes each
to the shallowest component that re-rendered, i.e. where the update entered the tree.
What it found: an idle board commits 73-96 times per minute, re-rendering
@mantine/core/Box over 30,000 times in 60s. That is the churn behind the 650 MB
browser peak — transient allocation rather than retention. About 80% of those commits
enter at the same anonymous depth-2 provider, props [value, children], value {appDir}:
Next.js's internal HeadManagerContext, whose value is a fresh object literal on every
App Router render, so each render re-renders the whole app beneath it. The rest enter
at __next_metadata_boundary__ / <title>, pointing the same way.
The trigger is inside Next's router/metadata handling — application code has no
polling router.refresh() — so nothing here fixes it. It is the next thing to chase and
it dominates everything downstream of it.
useTimeAgo called setState on a 1s interval even when the label was unchanged ("3
minutes ago" holds for a full minute), re-rendering its subtree ~60x/minute per
consumer for an identical string. It now compares before setting. Recorded as a
correctness fix and NOT a measured win: idle commits stayed inside their 73-96 range
afterwards, because the app-root churn dominates.
pnpm test 1794/1795 (pre-existing pi-hole Testcontainers flake); typecheck clean
across 37 packages; no new lint errors.
2026-08-09 15:18:38 +02:00
Thomas Camlong
33293ba1cf
refactor: simplify Phase 1 infrastructure code
...
- cache-invalidation: extract isExpectedRevalidateError helper
- integration-data-cache: flatten early-return chain, extract eviction
- redis-handler: extract StoredEntry type, readStreamBody, ensureConnected
- svg-purify: single getOwnPropertyDescriptor lookup per prop
- session-scoped-providers: simplify auth flow
- retryable-loader: use function declarations
- translation/request: replace spread-in-reduce with for loop
2026-08-07 21:04:42 +02:00
Thomas Camlong
451dc3ce39
fix: address review #4 — board name invalidation, SVG tests, test gaps
...
- Pass board.name to all invalidateBoardCache calls (permission mutations)
- Align integration create invalidation with update/delete
- Add initial-fetch-failure test for integration-data-cache
- Expand SVG XSS test corpus (javascript:, xlink:href, @import, onbegin)
- Forbid <style> tags in SVG sanitizer to prevent CSS injection
- Fix duplicate export in packages/common/src/index.ts
2026-08-07 19:18:18 +02:00
Thomas Camlong
018f98e318
perf: implement Phase 1 homepage diet via Next.js Cache Components
...
P1-0: V8 heap cap (HOMARR_MAX_OLD_SPACE_SIZE, default 512MB)
P1-1: Module graph cuts
- Dynamic integration imports (55 static → lazy loaders)
- Conditional DB driver loading (only configured driver loaded)
- Replace jsdom with linkedom for SVG sanitization
- Delete eager widget barrel (55 import * as → 0)
- Extract createRetryableLoader to @homarr/common
P1-2: Enable cacheComponents + restructure root layout
- Suspense boundaries around session-dependent providers
- ColorSchemeScript replaces server-side cookie reads
- Board/manage/auth layouts wrapped in Suspense
P1-3: Cache read paths
- Cache tag registry + invalidation helpers
- Cache invalidation wired into all mutation routers
- Translation deep-merge memoized per locale
P1-4: Prerendered shells + loading.tsx files
P1-5: Shared integration data cache (60s TTL, stale-while-revalidate)
P1-6: Redis-backed Next.js cache handler (@homarr/next-cache-handler)
P1-7: Redis optional (memory channel fallback), TTL on pubSub:last:*,
Redis clients consolidated from 6 to 2
2026-08-07 18:59:47 +02:00
Thomas
8e8c29979f
fix(system-disks): format absolute storage values with shared byte helper ( #6299 )
2026-07-12 14:50:58 +02:00
Thomas and homarr-renovate[bot]
4d42eb65e4
chore(deps): mega dependency update ( #6212 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-07-06 10:05:51 +02:00
Thomas
f19033e0d5
feat: simplify caching — TanStack Query as single source of truth ( #6075 )
2026-07-03 16:33:03 +02:00
Thomas
dd7a4908a3
feat(onboarding): enhance integration setup with Docker discovery and URL templating ( #5607 )
2026-06-05 16:50:35 +02:00
Meier Lukas
650f761325
ci(format): fails to apply format due to conflict between --write and --check ( #5815 )
2026-05-29 11:07:48 +02:00
605af19cd8
refactor: replace ESLint + Prettier with OXC (oxlint + oxfmt) ( #5741 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
Co-authored-by: Meierschlumpf <63781622+Meierschlumpf@users.noreply.github.com >
2026-05-27 09:37:44 +02:00
Meier Lukas
7cd30b640c
fix(docker): improve icon matching ( #5693 )
...
* fix(docker): improve icon matching
* fix: unused import
2026-05-18 21:45:33 +02:00
StrandedTurtle and Meier Lukas
7a1272146c
fix(tracearr): support absolute image urls ( #5654 )
...
* Update base URL handling for tracearr integration
* fix: remove unnecessary prefix from bcrypt hashing
* refactor: add is-absolute-url check
* test: add unit tests
---------
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-18 21:39:01 +02:00
Meier Lukas
ed6680ba6a
perf(icons): updater takes 10 seconds to run with high cpu usage ( #5608 )
2026-05-01 16:21:22 +02:00
Meier Lukas
72d636c0f0
refactor(deps): migrate to pnpm catalog ( #5464 )
2026-04-13 22:45:24 +02:00
homarr-renovate[bot]
c8a61a9df3
fix(deps): update react monorepo to v19.2.5 ( #5502 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-13 20:14:59 +00:00
Meier Lukas
dc44fac42a
revert(deps): downgrade undici from v8 to v7 ( #5473 )
2026-04-11 00:33:22 +02:00
homarr-renovate[bot]
7982def853
fix(deps): update dependency next to v16.2.3 [security] ( #5461 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-10 21:05:50 +02:00
homarr-renovate[bot]
75b36bb160
fix(deps): update dependency undici to v8.0.2 ( #5446 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-09 16:01:05 +00:00
homarr-renovate[bot]
a0e0083b16
fix(deps): update dependency undici to v8.0.1 ( #5440 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-08 12:06:50 +00:00
homarr-renovate[bot] and Meier Lukas
f2f5128cbd
fix(deps): update dependency undici to v8 ( #5432 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-04-07 16:52:42 +02:00
homarr-renovate[bot]
859747037b
fix(deps): update nextjs monorepo to v16.2.2 ( #5418 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-04-06 02:45:18 +00:00
homarr-renovate[bot]
a9582f04ed
fix(deps): update dependency zod to ^4.3.6 ( #5376 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 21:50:50 +00:00
homarr-renovate[bot] and Meier Lukas
2b4c83dcca
fix(deps): update dependency zod to ^4.3.5 - abandoned ( #4803 )
...
* fix(deps): update dependency zod to ^4.3.5
* fix: omit can not be used with refine
* fix: convert intersection to object due to trpc-openapi issue
* fix: remove omit after refine
---------
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-03-30 23:11:14 +02:00
homarr-renovate[bot]
4f2cc9af2a
fix(deps): update dependency undici to v7.24.6 ( #5374 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-30 17:06:11 +00:00
homarr-renovate[bot]
e23a397a80
fix(deps): update nextjs monorepo to v16.2.1 ( #5330 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-27 18:03:06 +00:00
homarr-renovate[bot]
22bbef9d8e
fix(deps): update dependency undici to v7.24.5 ( #5338 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-27 18:22:06 +01:00
homarr-renovate[bot]
883161357d
fix(deps): update nextjs monorepo to v16.2.0 ( #5309 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-23 19:06:43 +00:00
homarr-renovate[bot]
3bbde3cbb8
fix(deps): update dependency next to v16.1.7 [security] ( #5263 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-17 21:41:38 +00:00
homarr-renovate[bot]
615062c6b1
fix(deps): update dependency dayjs to ^1.11.20 ( #5253 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-17 16:20:32 +00:00
StrandedTurtle
f68600150a
feat: Tracearr integration ( #5060 )
2026-03-13 19:19:43 +01:00
homarr-renovate[bot]
a9085399c0
chore(deps): update dependency eslint to ^9.39.4 ( #5218 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-03-12 07:57:01 +00:00
homarr-renovate[bot]
12ba14bb3f
chore(deps): update dependency eslint to ^9.39.3 ( #5127 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-02-25 14:58:57 +00:00
homarr-renovate[bot] and Meier Lukas
29d9a9d288
chore(deps): update dependency fastify to v5.7.3 [security] ( #4994 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-02-10 20:05:12 +01:00
homarr-renovate[bot]
7c3fe3d6d4
fix(deps): update nextjs monorepo to v16.1.6 ( #4969 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-02-02 05:05:02 +00:00
homarr-renovate[bot]
d3e0b47875
fix(deps): update react monorepo to v19.2.4 ( #4960 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-31 18:42:46 +00:00
homarr-renovate[bot]
a9db68bd3e
fix(deps): update dependency @paralleldrive/cuid2 to ^3.3.0 ( #4952 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-30 21:36:03 +00:00
homarr-renovate[bot]
aeb1df1229
fix(deps): update dependency next to v16.1.5 [security] ( #4937 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-27 21:21:21 +00:00
homarr-renovate[bot]
99a2574d80
fix(deps): update nextjs monorepo to v16.1.4 ( #4909 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-25 02:08:32 +00:00
homarr-renovate[bot]
5a8e864630
fix(deps): update nextjs monorepo to v16.1.3 ( #4889 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-23 13:50:18 +00:00
homarr-renovate[bot]
c6be8c5475
fix(deps): update nextjs monorepo to v16.1.2 ( #4875 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-19 23:29:51 +00:00
homarr-renovate[bot]
16733c2a0e
fix(deps): update dependency undici to v7.18.2 ( #4837 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-11 17:26:28 +00:00
homarr-renovate[bot]
b76ab2961d
fix(deps): update dependency undici to v7.18.0 ( #4829 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-10 18:40:02 +00:00
homarr-renovate[bot]
21a91b1489
fix(deps): update dependency undici to v7.17.0 ( #4826 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2026-01-10 12:50:10 +00:00
Matti Airas and Claude Opus 4.5
0dc61a88b8
feat(auth): extend API key authentication to tRPC endpoints ( #4732 )
...
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-05 18:43:17 +01:00
homarr-renovate[bot]
7712ab410b
fix(deps): update nextjs monorepo to v16.1.1 ( #4759 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2025-12-27 19:24:09 +00:00
homarr-renovate[bot]
99f2842a5a
fix(deps): update nextjs monorepo to v16.1.0 ( #4739 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2025-12-23 18:40:54 +00:00
homarr-renovate[bot]
68dc6844fd
fix(deps): update dependency zod to ^4.2.1 ( #4722 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2025-12-21 09:37:08 +00:00
homarr-renovate[bot]
6e39524f9d
fix(deps): update dependency zod to ^4.2.0 ( #4712 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
2025-12-20 13:37:00 +00:00
Meier Lukas
6f0dbae121
refactor(http): move to core package ( #4690 )
2025-12-19 16:37:21 +01:00
Meier Lukas
f4bb90013a
refactor(dns): move to core package ( #4687 )
2025-12-19 09:55:41 +01:00