Thomas Camlong
f6a598b774
feat: config portability with generic entity resolver framework
...
Full configuration export/import system for Homarr with excellent DX:
- Export/import boards, apps, integrations (with re-encrypted secrets),
users (with bcrypt hashes), groups (with permissions and memberships),
search engines, and server settings
- Homepage services.yaml import with widget-type mapping
- Generic resolveEntities() utility eliminates per-entity boilerplate
- Declarative entity-fields.ts: adding a new user preference requires
only one line change (no export/import/schema edits needed)
- User schema uses .catchall(z.unknown()) for forward-compatible prefs
- groupByKey() utility replaces manual Map-building
- CONFIG_ENTITY_KEYS as single source of truth for entity metadata
- Reuse existing entities (apps by name+icon+href, integrations by
kind+name+url, users by email, groups by name, boards by name)
- Skip duplicates with warnings rather than failing
- Onboarding flow skips user creation step when config includes users
- Reuse existing admin group during onboarding after config import
2026-06-06 16:22:59 +02:00
Thomas Camlong
1f7b7f0516
Merge branch 'dev' into feat/config-portability
...
# Conflicts:
# apps/nextjs/src/app/[locale]/init/_steps/start/init-start.tsx
# apps/nextjs/src/app/[locale]/manage/tools/logs/terminal.tsx
# packages/api/src/router/docker/docker-router.ts
# packages/api/src/router/test/docker/docker-router.spec.ts
# packages/db/migrations/mysql/meta/0039_snapshot.json
# packages/db/migrations/mysql/meta/_journal.json
# packages/db/migrations/postgresql/meta/0005_snapshot.json
# packages/db/migrations/postgresql/meta/_journal.json
# packages/db/migrations/sqlite/meta/0037_snapshot.json
# packages/db/migrations/sqlite/meta/_journal.json
2026-06-06 09:32:41 +02:00
Thomas Camlong
efd37dca93
fix(db): log when UNSAFE_ENABLE_MOCK_INTEGRATION is enabled during seeding
...
Warn on startup seed when mock integration env flag is set, matching demo mode visibility.
2026-06-05 18:43:33 +02:00
Thomas Camlong
68f24e34d5
fix: disable onboarding tours when demo mode is enabled
...
Return completed tour status in demo mode so board and manage tours do not start for demo users.
2026-06-05 18:02:08 +02:00
Thomas Camlong
4f5f3e14a1
fix: sync docs sitemap and remove stale coolify ts-expect-error
2026-06-05 17:39:03 +02:00
Thomas and copilot-swe-agent[bot]
dbf021e04a
feat(docker): add container logs modal and stats columns ( #4807 )
...
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-06-05 16:57:26 +02:00
Thomas
0b663a7fc6
feat(onboarding): guided management and board tours ( #5756 )
2026-06-05 16:54:50 +02:00
Afonso Jorge Ramos
0dc2558faf
feat: add PeaNUT integration and UPS monitoring widget ( #5862 )
2026-06-05 16:51:09 +02:00
Thomas
dd7a4908a3
feat(onboarding): enhance integration setup with Docker discovery and URL templating ( #5607 )
2026-06-05 16:50:35 +02:00
Thomas
0a6467979a
feat: add comprehensive demo mode with mock integrations ( #5870 )
2026-06-05 16:36:45 +02:00
Thomas and Meier Lukas
25d964a197
refactor(spotlight): registry-driven CMDK preferences ( #5817 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-06-05 16:26:48 +02:00
Thomas
3d3e3059a9
feat: media request search as first-class spotlight mode ( #5823 )
2026-06-05 16:09:14 +02:00
homarr-crowdin[bot] and Meier Lukas
9ae8cb2768
chore(lang): updated translations from crowdin ( #5863 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-06-05 13:48:42 +02:00
Thomas
99346f288b
feat(widgets): add in-place app editing in widget edit modal ( #5809 )
2026-06-05 12:31:50 +02:00
Thomas
41fe5928f1
fix: add bookmark widget option to toggle card borders ( #5854 )
2026-06-04 11:07:31 +02:00
Thomas Camlong
fb8721bd4e
feat: add config portability — full export/import, homepage import, docker label discovery
...
Add a dedicated Import/Export tool page with full configuration export/import
(v2.0 bundle with encrypted secrets), Homepage services.yaml import with env
variable resolution, and manual Docker label discovery (moved from cron job).
Support importing Homarr JSON during onboarding alongside legacy zip import.
New @homarr/board-portability package handles schema, serialization, compat
checks, and import planning. Shared preview UI reused across admin and onboarding.
Fix xterm.js crash by removing deprecated @xterm/addon-canvas (incompatible
with xterm v6). Fix Homepage env variable i18n and React 19 currentTarget bug.
See docs/config-portability.md for full changelog.
2026-06-04 10:56:42 +02:00
Afonso Jorge Ramos
2c6b7a818e
fix(immich): respect app color scheme in server-stats widget ( #5859 )
2026-06-04 09:50:02 +02:00
Thomas
fd10788838
fix(auth): relax password complexity requirements to suggestions-only ( #5764 )
2026-06-04 07:56:34 +02:00
homarr-crowdin[bot]
d86fe3ddf0
chore(lang): updated translations from crowdin
...
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2026-06-02 02:23:34 +00:00
homarr-crowdin[bot]
07d991a0a1
chore(lang): updated translations from crowdin
...
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2026-05-30 05:27:45 +00:00
Thomas and Meier Lukas
2991777b0a
feat(users): rework general settings ( #4915 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-29 21:22:55 +02:00
Thomas and Meier Lukas
6cc2ac56a9
fix: prevent GitHub releases check from blocking app on API failure ( #5807 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-29 21:14:51 +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
David
be61602576
feat(auth): support custom token endpoint auth methods ( #5806 )
2026-05-29 10:51:28 +02:00
homarr-crowdin[bot]
d01834d975
chore(lang): updated translations from crowdin ( #5814 )
2026-05-29 10:07:48 +02:00
Thomas
4454e3fb7a
fix: matine ui fixes for concistency ( #5733 )
2026-05-28 10:59:03 +02:00
Thomas
c252b4f9ac
feat(manage): unified management page layout ( #5758 )
2026-05-28 10:56:46 +02:00
Vivaan Dhawan
b19549b601
fix: parse Speedtest Tracker created_at as local time ( #5751 )
2026-05-28 07:48:00 +00:00
homarr-renovate[bot] and Thomas Camlong
f7ea1b33a0
chore(deps): update mantine monorepo to v9 ( #5411 )
...
Co-authored-by: Thomas Camlong <thomas@ajnart.fr >
2026-05-27 17:29:52 +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
homarr-crowdin[bot]
ff974bf343
chore(lang): updated translations from crowdin
...
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2026-05-24 02:04:49 +00:00
Meier Lukas
a93f03eae4
Merge branch 'main' into dev
2026-05-22 22:46:15 +02:00
Thomas and Manuel
dade477b32
feat(seed): add demo mode with pre-seeded user ( #5739 )
...
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com >
2026-05-21 16:08:46 +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
Austin
e9142c0dbc
fix(downloads-widget): increase name column default width ratio
2026-05-18 21:44:47 +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
4aa43ae27a
Merge branch 'dev' into beta [skip-ci]
2026-05-15 19:25:38 +02:00
Meier Lukas
ab867a9e50
chore: remove temporary ts-expect-error
2026-05-10 10:40:29 +02:00
homarr-crowdin[bot]
968338aa97
chore(lang): updated translations from crowdin ( #5685 )
...
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
2026-05-10 10:38:59 +02:00
Meier Lukas
3a8abe4415
chore(docs): update sitemap
2026-05-08 23:48:31 +02:00
Meier Lukas
6feb37dfd4
Merge branch 'main' into next
2026-05-08 23:46:21 +02:00
Meier Lukas
756e8d1724
feat(qbittorrent): add api-key support ( #5677 )
2026-05-08 20:08:37 +02:00
Ashton Batty and Meier Lukas
56af6bcaf0
feat(docker): Podman compatibility, multi-socket support, per-host error isolation ( #5425 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-08 17:31:56 +02:00
036f6aa185
chore(deps): update dependency recharts to v3 ( #4302 )
...
Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com >
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-08 15:02:52 +02:00
homarr-crowdin[bot] and Meier Lukas
12a1bd7e2e
chore(lang): updated translations from crowdin
...
* chore(lang): update translations from crowdin
* chore(lang): update translations from crowdin
---------
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-08 13:54:36 +02:00
44bd16d677
fix(calendar): keep working integrations when one fails ( #5629 )
...
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com >
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-07 22:02:21 +02:00
homarr-crowdin[bot] and Meier Lukas
a9ad991892
chore(lang): updated translations from crowdin ( #5623 )
...
Co-authored-by: Crowdin Homarr <190541745+homarr-crowdin[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-07 21:04:10 +02:00
Meier Lukas
3183914a15
fix(apps): creation on the fly broken ( #5605 )
2026-05-07 20:59:12 +02:00
Meier Lukas
62be81ea60
fix(lang): portuguese is linked to brazilian portuguese on crowdin ( #5622 )
2026-05-07 20:54:11 +02:00
Thomas and Meier Lukas
b5c316b825
feat(spotlight): rework !bang search UX ( #4813 )
...
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com >
2026-05-07 18:38:40 +02:00