Synchronized Settings #3473

Open
hj wants to merge 114 commits from setttingssync into develop
Owner
No description provided.
hj added 28 commits 2026-02-13 07:17:38 +00:00
hj added 4 commits 2026-02-13 08:45:22 +00:00
hj force-pushed setttingssync from d0c3ee8e2d to db960cda58 2026-02-13 13:19:24 +00:00 Compare
hj force-pushed setttingssync from db960cda58 to 496099bb00 2026-02-13 13:22:10 +00:00 Compare
hj added 4 commits 2026-02-15 19:48:27 +00:00
hj added 4 commits 2026-02-16 15:05:51 +00:00
hj added 2 commits 2026-02-16 17:10:34 +00:00
hj added 3 commits 2026-02-23 17:28:22 +00:00
hj added 3 commits 2026-02-23 18:15:59 +00:00
hj added 2 commits 2026-02-24 19:12:37 +00:00
hj added 2 commits 2026-02-27 14:20:02 +00:00
hj added 5 commits 2026-03-06 11:33:42 +00:00
hj added 4 commits 2026-03-06 13:35:02 +00:00
hj added 2 commits 2026-03-06 14:35:23 +00:00
hj added 3 commits 2026-03-06 15:15:33 +00:00
hj added 2 commits 2026-03-06 15:53:58 +00:00
hj added 2 commits 2026-03-11 21:53:23 +00:00
hj added 4 commits 2026-03-13 09:52:30 +00:00
hj added 2 commits 2026-03-13 10:10:01 +00:00
hj added 2 commits 2026-03-13 10:18:30 +00:00
hj added 2 commits 2026-03-13 11:21:10 +00:00
hj added 5 commits 2026-03-15 17:08:15 +00:00
hj added 3 commits 2026-03-15 17:55:00 +00:00
Owner

Another considerations for local-only:

  • Timeline filtering options for muting bots/sensitive posts; hiding image previews
    • Possible use case: A user might want to hide images for data conservation when browsing on a phone, but not on desktop. A user might want to mute sensitive posts completely when browsing on a phone in the public
  • Show sensitive images with one click
    • Possible use case: A user might want to first check if a sensitive posts is viewable in public in a small preview before opening in full size
  • Preload images
    • Possible use case: Data conservation on phones

My personal preferences possibly better suited for "sync exclusions":

  • Themes/palettes
  • Show (you)s/highlight mentions of your account
    • More of an issue with my font choice, where on desktop the difference between bold and normal is barely noticeable, on a phone the highlights are better for space saving and generally more visible than (you)s
Another considerations for local-only: - Timeline filtering options for muting bots/sensitive posts; hiding image previews - Possible use case: A user might want to hide images for data conservation when browsing on a phone, but not on desktop. A user might want to mute sensitive posts completely when browsing on a phone in the public - Show sensitive images with one click - Possible use case: A user might want to first check if a sensitive posts is viewable in public in a small preview before opening in full size - Preload images - Possible use case: Data conservation on phones My personal preferences possibly better suited for "sync exclusions": - Themes/palettes - Show (you)s/highlight mentions of your account - More of an issue with my font choice, where on desktop the difference between bold and normal is barely noticeable, on a phone the highlights are better for space saving and generally more visible than (you)s
Author
Owner

hiding image previews

already implemented lol as it is my usecase as well

>hiding image previews already implemented lol as it is my usecase as well
Author
Owner

More of an issue with my font choice, where on desktop the difference between bold and normal is barely noticeable, on a phone the highlights are better for space saving and generally more visible than (you)s

font overrides exist and are not synced

>More of an issue with my font choice, where on desktop the difference between bold and normal is barely noticeable, on a phone the highlights are better for space saving and generally more visible than (you)s font overrides exist and are not synced
Author
Owner

Themes/palettes

i think better to have them synced and if enough people complain about it we'll exclude them

>Themes/palettes i think better to have them synced and if enough people complain about it we'll exclude them
hj added 8 commits 2026-03-16 13:41:14 +00:00
hj force-pushed setttingssync from 882d5079b6 to d881b92f86 2026-03-16 14:58:44 +00:00 Compare
Author
Owner

More settiongs made local-only, better fallback to defaults, import/export now works

More settiongs made local-only, better fallback to defaults, import/export now works
Owner

@hj wrote in #3473 (comment):

More of an issue with my font choice, where on desktop the difference between bold and normal is barely noticeable, on a phone the highlights are better for space saving and generally more visible than (you)s

font overrides exist and are not synced

I can't use overrides, because qtwebengine (meme browsers issue) probably doesn't implement the "installed fonts" permission.

It's more of an issue where I prefer the bold highlight, but I can't use it on the desktop so I have the yous turned on, but I don't need them on my phone and prefer the highlight instead. That's why it's in the personal preferences section, since I imagine barely anyone would have that problem.

EDIT:

I can't use overrides

Same with Cromite on Android btw, but that's unrelated to this PR

@hj wrote in https://git.pleroma.social/pleroma/pleroma-fe/pulls/3473#issuecomment-114758: > > More of an issue with my font choice, where on desktop the difference between bold and normal is barely noticeable, on a phone the highlights are better for space saving and generally more visible than (you)s > > font overrides exist and are not synced I can't use overrides, because qtwebengine (meme browsers issue) probably doesn't implement the "installed fonts" permission. It's more of an issue where I prefer the bold highlight, but I can't use it on the desktop so I have the yous turned on, but I don't need them on my phone and prefer the highlight instead. That's why it's in the personal preferences section, since I imagine barely anyone would have that problem. EDIT: >I can't use overrides Same with Cromite on Android btw, but that's unrelated to this PR
Owner

Also "show advanced settings" does not work on the current commit for this PR:

Devtools console output when clicking show advanced on local instance
sw.js:135 No serviceworker found!
updateFocus	@	sw.js:135
await in updateFocus		
(anonymous)	@	after_store.js:535
------------------
mention_link.js:104 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'lain')
    at Proxy.highlight (mention_link.js:104:54)
    at Proxy.classnames (mention_link.js:127:32)
highlight	@	mention_link.js:104
classnames	@	mention_link.js:127
(anonymous)	@	mention_link.vue:22
(anonymous)	@	user_popover.vue:10
_sfc_render	@	popover.vue:15
Promise.then		
setPreference	@	sync_config.js:489
setSimplePrefAndSave	@	sync_config.js:461
set	@	settings_modal.js:231
_createVNode.onUpdate:modelValue._cache.._cache.	@	settings_modal.vue:114
_createElementVNode.onChange._cache.._cache.	@	checkbox.vue:19
------------------
sync_config.js:149 Both sources have valid data, figuring things out...
sync_config.js:154 Same version/timestamp on both sources, source of truth irrelevant
sync_config.js:625 Migrating from old config
sync_config.js:630 Already migrated Values: 
sync_config.js:665 Checking if data needs merging...
sync_config.js:675 Data doesn't need merging
------------------
mention_link.js:104 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'lain')
    at Proxy.highlight (mention_link.js:104:54)
    at Proxy.classnames (mention_link.js:127:32)
highlight	@	mention_link.js:104
classnames	@	mention_link.js:127
(anonymous)	@	mention_link.vue:22
(anonymous)	@	user_popover.vue:10
_sfc_render	@	popover.vue:15
Promise.then		
initSyncConfig	@	sync_config.js:700
await in initSyncConfig		
(anonymous)	@	sync_config.js:717
Promise.then		
pushSyncConfig	@	sync_config.js:716
setSimplePrefAndSave	@	sync_config.js:462
set	@	settings_modal.js:231
_createVNode.onUpdate:modelValue._cache.._cache.	@	settings_modal.vue:114
_createElementVNode.onChange._cache.._cache.	@	checkbox.vue:19
Also "show advanced settings" does not work on the current commit for this PR: <details> <summary>Devtools console output when clicking show advanced on local instance</summary> <pre> sw.js:135 No serviceworker found! updateFocus @ sw.js:135 await in updateFocus (anonymous) @ after_store.js:535 ------------------ mention_link.js:104 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'lain') at Proxy.highlight (mention_link.js:104:54) at Proxy.classnames (mention_link.js:127:32) highlight @ mention_link.js:104 classnames @ mention_link.js:127 (anonymous) @ mention_link.vue:22 (anonymous) @ user_popover.vue:10 _sfc_render @ popover.vue:15 Promise.then setPreference @ sync_config.js:489 setSimplePrefAndSave @ sync_config.js:461 set @ settings_modal.js:231 _createVNode.onUpdate:modelValue._cache.<computed>._cache.<computed> @ settings_modal.vue:114 _createElementVNode.onChange._cache.<computed>._cache.<computed> @ checkbox.vue:19 ------------------ sync_config.js:149 Both sources have valid data, figuring things out... sync_config.js:154 Same version/timestamp on both sources, source of truth irrelevant sync_config.js:625 Migrating from old config sync_config.js:630 Already migrated Values: sync_config.js:665 Checking if data needs merging... sync_config.js:675 Data doesn't need merging ------------------ mention_link.js:104 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'lain') at Proxy.highlight (mention_link.js:104:54) at Proxy.classnames (mention_link.js:127:32) highlight @ mention_link.js:104 classnames @ mention_link.js:127 (anonymous) @ mention_link.vue:22 (anonymous) @ user_popover.vue:10 _sfc_render @ popover.vue:15 Promise.then initSyncConfig @ sync_config.js:700 await in initSyncConfig (anonymous) @ sync_config.js:717 Promise.then pushSyncConfig @ sync_config.js:716 setSimplePrefAndSave @ sync_config.js:462 set @ settings_modal.js:231 _createVNode.onUpdate:modelValue._cache.<computed>._cache.<computed> @ settings_modal.vue:114 _createElementVNode.onChange._cache.<computed>._cache.<computed> @ checkbox.vue:19 </pre> </details>
Author
Owner

current commit is very broken, i'm working on it

current commit is very broken, i'm working on it
Author
Owner

I can't use overrides, because qtwebengine (meme browsers issue) probably doesn't implement the "installed fonts" permission.

you should be able to manually enter font-family, there should be a keyboard button on font selector

>I can't use overrides, because qtwebengine (meme browsers issue) probably doesn't implement the "installed fonts" permission. you should be able to manually enter font-family, there should be a keyboard button on font selector
hj added 4 commits 2026-03-16 18:22:51 +00:00
hj added 4 commits 2026-03-18 14:52:30 +00:00
Owner

Creating new word filters and saving existing ones is broken:

Creation
sw.js:135 No serviceworker found!
updateFocus	@	sw.js:135
await in updateFocus		
(anonymous)	@	after_store.js:535
----------------
chunk-LG6AQRJS.js?v=3545ee10:2365 Uncaught TypeError: Cannot read properties of undefined (reading 'length')
    at Proxy.createFilter (filtering_tab.js:199:39)
    at _createElementVNode.onClick._cache.._cache. (filtering_tab.vue:141:23)
createFilter	@	filtering_tab.js:199
_createElementVNode.onClick._cache.._cache.	@	filtering_tab.vue:141
Saving
sw.js:135 No serviceworker found!
updateFocus	@	sw.js:135
await in updateFocus		
(anonymous)	@	after_store.js:535
------------------------
chunk-LG6AQRJS.js?v=3545ee10:2365 Uncaught TypeError: this.setPrefAndSave is not a function
    at Proxy.saveFilter (filtering_tab.js:249:12)
    at onClick (filtering_tab.vue:320:27)
saveFilter	@	filtering_tab.js:249
onClick	@	filtering_tab.vue:320
Creating new word filters and saving existing ones is broken: <details> <summary>Creation</summary> <pre> sw.js:135 No serviceworker found! updateFocus @ sw.js:135 await in updateFocus (anonymous) @ after_store.js:535 ---------------- chunk-LG6AQRJS.js?v=3545ee10:2365 Uncaught TypeError: Cannot read properties of undefined (reading 'length') at Proxy.createFilter (filtering_tab.js:199:39) at _createElementVNode.onClick._cache.<computed>._cache.<computed> (filtering_tab.vue:141:23) createFilter @ filtering_tab.js:199 _createElementVNode.onClick._cache.<computed>._cache.<computed> @ filtering_tab.vue:141 </pre> </details> <details> <summary>Saving</summary> <pre> sw.js:135 No serviceworker found! updateFocus @ sw.js:135 await in updateFocus (anonymous) @ after_store.js:535 ------------------------ chunk-LG6AQRJS.js?v=3545ee10:2365 Uncaught TypeError: this.setPrefAndSave is not a function at Proxy.saveFilter (filtering_tab.js:249:12) at onClick (filtering_tab.vue:320:27) saveFilter @ filtering_tab.js:249 onClick @ filtering_tab.vue:320 </pre> </details>
Author
Owner

nice catch

nice catch
Owner

Also opening the mute menu from the 3-dot post extra actions button only closes the popup on mobile. And the attached mute options in settings don't seem to do anything except "Completely hide all muted posts". If they are local-only, they also don't have the monitor icon (no console output).

image

EDIT: Instance name in the top bar also stopped working.

Also opening the mute menu from the 3-dot post extra actions button only closes the popup on mobile. And the attached mute options in settings don't seem to do anything except "Completely hide all muted posts". If they are local-only, they also don't have the monitor icon (no console output). ![image](/attachments/fea5e1f6-7cfd-4d29-af60-8380f66bec86) EDIT: Instance name in the top bar also stopped working.
Author
Owner

Also opening the mute menu from the 3-dot post extra actions button only closes the popup on mobile

yeah I know, i guess i'll fix it in this MR as well

And the attached mute options in settings don't seem to do anything except "Completely hide all muted posts". If they are local-only, they also don't have the monitor icon (no console output).

EDIT: Instance name in the top bar also stopped working.

nice catches, i really appreciate it since config permeates entirety of UI it's difficult to test everything.

>Also opening the mute menu from the 3-dot post extra actions button only closes the popup on mobile yeah I know, i guess i'll fix it in this MR as well >And the attached mute options in settings don't seem to do anything except "Completely hide all muted posts". If they are local-only, they also don't have the monitor icon (no console output). >EDIT: Instance name in the top bar also stopped working. nice catches, i really appreciate it since config permeates entirety of UI it's difficult to test everything.
Owner

@hj wrote in #3473 (comment):

Also opening the mute menu from the 3-dot post extra actions button only closes the popup on mobile

yeah I know, i guess i'll fix it in this MR as well

If it is also broken in develop, which I didn't test, maybe fix that there in a different MR, if it is small enough. SPW is apparently running recent-ish develop, so moon might want to also merge that fix like the shoutbox one.

@hj wrote in https://git.pleroma.social/pleroma/pleroma-fe/pulls/3473#issuecomment-114786: > > Also opening the mute menu from the 3-dot post extra actions button only closes the popup on mobile > > yeah I know, i guess i'll fix it in this MR as well If it is also broken in develop, which I didn't test, maybe fix that there in a different MR, if it is small enough. SPW is apparently running recent-ish develop, so moon might want to also merge that fix like the shoutbox one.
Author
Owner

And the attached mute options in settings don't seem to do anything

I tested "mute bot posts" and it worked, but I'll double-check the rest

>And the attached mute options in settings don't seem to do anything I tested "mute bot posts" and it worked, but I'll double-check the rest
Owner

From the timeline view, only the "Hide muted posts"/"Completely hide muted posts" button does anything. In the timeline view they don't do anything at all. And in the settings, they get (un)ticked but that's it and the wrench icon never shows.

They do all work on mobile though, except hiding previews.

Note: I didn't show it in the attached screen capture, but unticking "Completely hide all muted posts" doesn't fix any of the settings.

EDIT: It appears it's an issue with settings generally. Not all, but a lot of them do nothing and don't get saved. (you)s and avatars next to handles are another examples.

From the timeline view, only the "Hide muted posts"/"Completely hide muted posts" button does anything. In the timeline view they don't do anything at all. And in the settings, they get (un)ticked but that's it and the wrench icon never shows. They do all work on mobile though, except hiding previews. Note: I didn't show it in the attached screen capture, but unticking "Completely hide all muted posts" doesn't fix any of the settings. EDIT: It appears it's an issue with settings generally. Not all, but a lot of them do nothing and don't get saved. (you)s and avatars next to handles are another examples.
hj added 2 commits 2026-03-20 11:46:56 +00:00
Author
Owner

fixed "hide media" option, fixed custom filters also. Please, I'll need you to debug the issue you have with settings not saving.

Also fixed sw.js errors

fixed "hide media" option, fixed custom filters also. Please, I'll need you to debug the issue you have with settings not saving. Also fixed sw.js errors
Author
Owner

fixed mute dropdown here #3486

fixed mute dropdown here https://git.pleroma.social/pleroma/pleroma-fe/pulls/3486
Author
Owner

EDIT: Instance name in the top bar also stopped working.

can't reproduce

>EDIT: Instance name in the top bar also stopped working. can't reproduce
Owner

@hj wrote in #3473 (comment):

Please, I'll need you to debug the issue you have with settings not saving.

I suspect some corrupted state in local storage since they work fine in other session. Do you want me to back it up before I nuke it for possible future reference?

I'm also running a PR from BE that adds cache-control: immutable header to static files include FE files, but I don't think that's the issue since disabling browser cache and force reloading does not fix the issue. Besides that, the built FE files are also versioned with hashes.

@hj wrote in https://git.pleroma.social/pleroma/pleroma-fe/pulls/3473#issuecomment-114791: > Please, I'll need you to debug the issue you have with settings not saving. I suspect some corrupted state in local storage since they work fine in other session. Do you want me to back it up before I nuke it for possible future reference? I'm also running a PR from BE that adds `cache-control: immutable` header to static files include FE files, but I don't think that's the issue since disabling browser cache and force reloading does not fix the issue. Besides that, the built FE files are also versioned with hashes.
Author
Owner

yeah backup would be good. I really need to write code to account for more broken states, it's a bit too fragile.

yeah backup would be good. I really need to write code to account for more broken states, it's a bit too fragile.
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin setttingssync:setttingssync
git switch setttingssync

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch develop
git merge --no-ff setttingssync
git switch setttingssync
git rebase develop
git switch develop
git merge --ff-only setttingssync
git switch setttingssync
git rebase develop
git switch develop
git merge --no-ff setttingssync
git switch develop
git merge --squash setttingssync
git switch develop
git merge --ff-only setttingssync
git switch develop
git merge setttingssync
git push origin develop
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pleroma/pleroma-fe!3473
No description provided.