Synchronized Settings #3473

Open
hj wants to merge 159 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.
hj force-pushed setttingssync from 475103f221 to 8ee71cdfff 2026-03-23 13:23:45 +00:00 Compare
Owner

I don't have the time to dig deeper with the local issue I had, but deleting IndexedDB->localforage->keyvalueparis->pinia-local-local_config seems to have fixed it. I do have a full IndexedDB backup for later.

I don't have the time to dig deeper with the local issue I had, but deleting `IndexedDB->localforage->keyvalueparis->pinia-local-local_config` seems to have fixed it. I do have a full IndexedDB backup for later.
hj added 5 commits 2026-03-24 13:45:57 +00:00
hj added 5 commits 2026-03-24 19:48:37 +00:00
hj added 2 commits 2026-03-25 09:43:34 +00:00
hj added 2 commits 2026-03-25 13:39:27 +00:00
Author
Owner

@phnt i've added a framework to validate config, maybe it will help debugging and cleaning up invalid states

I think I just need to add it to log replay and persistence, right now it's only in setPreference.

@phnt i've added a framework to validate config, maybe it will help debugging and cleaning up invalid states I think I just need to add it to log replay and persistence, right now it's only in setPreference.
Owner

@hj wrote in #3473 (comment):

@phnt i've added a framework to validate config, maybe it will help debugging and cleaning up invalid states

I think I just need to add it to log replay and persistence, right now it's only in setPreference.

Thanks, I'll see if something pops up in console after restoring indexedb.

Also syncing the FE language stopped working and I think it always ends up the browsers default language. The error gets thrown both when logged in and logged out.

Invalid type for setting interfaceLanguage: expected type string, got object, value de; defaulting
validateSetting	@	default_config_state.js:774
setPreference	@	sync_config.js:508
setSimplePrefAndSave	@	sync_config.js:475
set	@	general_tab.js:44
_createVNode.onUpdate:modelValue._cache.<computed>._cache.<computed>	@	general_tab.vue:8
set	@	interface_language_switcher.js:38
setLanguageAt	@	interface_language_switcher.js:53
onUpdate:modelValue	@	interface_language_switcher.vue:20
_mergeProps.onChange._cache.<computed>._cache.<computed>	@	select.vue:10
handleMouseUp_
@hj wrote in https://git.pleroma.social/pleroma/pleroma-fe/pulls/3473#issuecomment-114832: > @phnt i've added a framework to validate config, maybe it will help debugging and cleaning up invalid states > > I think I just need to add it to log replay and persistence, right now it's only in setPreference. Thanks, I'll see if something pops up in console after restoring indexedb. Also syncing the FE language stopped working and I think it always ends up the browsers default language. The error gets thrown both when logged in and logged out. ``` Invalid type for setting interfaceLanguage: expected type string, got object, value de; defaulting validateSetting @ default_config_state.js:774 setPreference @ sync_config.js:508 setSimplePrefAndSave @ sync_config.js:475 set @ general_tab.js:44 _createVNode.onUpdate:modelValue._cache.<computed>._cache.<computed> @ general_tab.vue:8 set @ interface_language_switcher.js:38 setLanguageAt @ interface_language_switcher.js:53 onUpdate:modelValue @ interface_language_switcher.vue:20 _mergeProps.onChange._cache.<computed>._cache.<computed> @ select.vue:10 handleMouseUp_ ```
Author
Owner

Can you also send the backup to me directly?

Can you also send the backup to me directly?
Author
Owner

I also realized that i need to migrate persistence data for SyncConfig because old persistence is still stored under ServerSideStorage

I also realized that i need to migrate persistence data for SyncConfig because old persistence is still stored under ServerSideStorage
Author
Owner

nevermind about persistence, it just wasn't working at all in when it was SSS lol

nevermind about persistence, it just wasn't working at all in when it was SSS lol
hj added 3 commits 2026-03-31 12:52:48 +00:00
Author
Owner

fixed language setting

fixed language setting
hj added 2 commits 2026-04-01 15:53:56 +00:00
Owner

Config validation errors from pinia-local-local_config (long stacktraces):

after the deleted `pinia-local-local_config` on fluffytail.org running current commit of this PR:
Unknown option muteFilters, value: [object Object]
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option pinnedNavItems, value: interactions
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option muteFilters, value: [object Object]
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option pinnedStatusActions, value: delete
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:774 Invalid type for setting forcedRoundness: expected type number, got string, value -1; defaulting
fd @ default_config_state.js:774
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option muteWords, value: politic,apod,...
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option highlight, value: [object Object]
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option theme3hacks, value: [object Object]
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option _pleroma_settings_version, value: 1,0
fd @ default_config_state.js:746
(anonymous) @ sync_config.js:302
XL @ sync_config.js:294
initSyncConfig @ sync_config.js:742
await in initSyncConfig
D @ pinia.mjs:1394
(anonymous) @ users.js:707
Promise.then
(anonymous) @ users.js:696
loginUser @ users.js:690
(anonymous) @ vuex.esm-bundler.js:322
qs.dispatch @ vuex.esm-bundler.js:1055
dispatch @ vuex.esm-bundler.js:937
c5e @ after_store.js:461
u5e @ after_store.js:564
await in u5e
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
default_config_state.js:746 Unknown option muteFilters, value: [object Object]
from IndexedDB backup made when mute settings weren't saving
default_config_state.js:746 Unknown option theme3hacks, value: [object Object]
validateSetting @ default_config_state.js:746
(anonymous) @ sync_config.js:782
afterLoad @ sync_config.js:776
getMaybeAugmentedState @ persisted_state.js:212
await in getMaybeAugmentedState
(anonymous) @ persisted_state.js:234
(anonymous) @ pinia.js?v=3545ee10:5690
run @ chunk-LG6AQRJS.js?v=3545ee10:383
(anonymous) @ pinia.js?v=3545ee10:5690
createSetupStore @ pinia.js?v=3545ee10:5688
createOptionsStore @ pinia.js?v=3545ee10:5396
useStore @ pinia.js?v=3545ee10:5740
(anonymous) @ after_store.js:498
waitForAllStoresToLoad @ after_store.js:487
afterStoreSetup @ after_store.js:515
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option highlight, value: [object Object]
validateSetting @ default_config_state.js:746
(anonymous) @ sync_config.js:782
afterLoad @ sync_config.js:776
getMaybeAugmentedState @ persisted_state.js:212
await in getMaybeAugmentedState
(anonymous) @ persisted_state.js:234
(anonymous) @ pinia.js?v=3545ee10:5690
run @ chunk-LG6AQRJS.js?v=3545ee10:383
(anonymous) @ pinia.js?v=3545ee10:5690
createSetupStore @ pinia.js?v=3545ee10:5688
createOptionsStore @ pinia.js?v=3545ee10:5396
useStore @ pinia.js?v=3545ee10:5740
(anonymous) @ after_store.js:498
waitForAllStoresToLoad @ after_store.js:487
afterStoreSetup @ after_store.js:515
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
---
default_config_state.js:746 Unknown option muteWords, value: politic,apod,...
validateSetting @ default_config_state.js:746
(anonymous) @ sync_config.js:782
afterLoad @ sync_config.js:776
getMaybeAugmentedState @ persisted_state.js:212
await in getMaybeAugmentedState
(anonymous) @ persisted_state.js:234
(anonymous) @ pinia.js?v=3545ee10:5690
run @ chunk-LG6AQRJS.js?v=3545ee10:383
(anonymous) @ pinia.js?v=3545ee10:5690
createSetupStore @ pinia.js?v=3545ee10:5688
createOptionsStore @ pinia.js?v=3545ee10:5396
useStore @ pinia.js?v=3545ee10:5740
(anonymous) @ after_store.js:498
waitForAllStoresToLoad @ after_store.js:487
afterStoreSetup @ after_store.js:515
(anonymous) @ main.js:110
await in (anonymous)
(anonymous) @ main.js:114
default_config_state.js:746 Unknown option _pleroma_settings_version, value: 1,0

Also instance panel and TOS stopped working resulting in no instance name shown in the top panel:

after_store.js:217 Can't load instance panel
 Error: Unknown option instanceIdentity.instanceSpecificPanelContent, value: <div style="margin-left:12px; margin-right:12px">
<p>Welcome to <a href="https://pleroma.social" target="_blank">Pleroma!</a></p>
<p><a href="/main/all">Pleroma FE</a></p>
</div>


    at validateSetting (default_config_state.js:744:13)
    at Proxy.set (instance.js:198:26)
    at getInstancePanel (after_store.js:209:26)
    at async Promise.all (index 1)
    at async afterStoreSetup (after_store.js:563:3)
    at async main.js:110:12
---
after_store.js:200 Can't load TOS
 Error: Unknown option instanceIdentity.tos, value: <h4>Terms of Service</h4>

<p>This is the default placeholder ToS.  You should copy it over to your static folder and edit it to fit the needs of your instance.</p>

<p>To do so, place a file at <code>"/instance/static/static/terms-of-service.html"</code> in your
   Pleroma install containing the real ToS for your instance.</p>
<p>See the <a href='https://docs.pleroma.social/backend/configuration/static_dir/'>Pleroma documentation</a> for more information.</p>
<br>
<img src="/static/logo.svg" style="display: block; margin: auto; max-width: 100%; height: 50px; object-fit: contain;" />

    at validateSetting (default_config_state.js:744:13)
    at Proxy.set (instance.js:198:26)
    at getTOS (after_store.js:195:26)

EDIT: Due to the muteFilters and muteWords errors, word filtering also stopped working.

Config validation errors from `pinia-local-local_config` (long stacktraces): <details> <summary>after the deleted `pinia-local-local_config` on fluffytail.org running current commit of this PR:</summary> <pre> Unknown option muteFilters, value: [object Object] fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option pinnedNavItems, value: interactions fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option muteFilters, value: [object Object] fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option pinnedStatusActions, value: delete fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:774 Invalid type for setting forcedRoundness: expected type number, got string, value -1; defaulting fd @ default_config_state.js:774 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option muteWords, value: politic,apod,... fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option highlight, value: [object Object] fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option theme3hacks, value: [object Object] fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option _pleroma_settings_version, value: 1,0 fd @ default_config_state.js:746 (anonymous) @ sync_config.js:302 XL @ sync_config.js:294 initSyncConfig @ sync_config.js:742 await in initSyncConfig D @ pinia.mjs:1394 (anonymous) @ users.js:707 Promise.then (anonymous) @ users.js:696 loginUser @ users.js:690 (anonymous) @ vuex.esm-bundler.js:322 qs.dispatch @ vuex.esm-bundler.js:1055 dispatch @ vuex.esm-bundler.js:937 c5e @ after_store.js:461 u5e @ after_store.js:564 await in u5e (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 default_config_state.js:746 Unknown option muteFilters, value: [object Object] </pre> </details> <details> <summary>from IndexedDB backup made when mute settings weren't saving</summary> <pre> default_config_state.js:746 Unknown option theme3hacks, value: [object Object] validateSetting @ default_config_state.js:746 (anonymous) @ sync_config.js:782 afterLoad @ sync_config.js:776 getMaybeAugmentedState @ persisted_state.js:212 await in getMaybeAugmentedState (anonymous) @ persisted_state.js:234 (anonymous) @ pinia.js?v=3545ee10:5690 run @ chunk-LG6AQRJS.js?v=3545ee10:383 (anonymous) @ pinia.js?v=3545ee10:5690 createSetupStore @ pinia.js?v=3545ee10:5688 createOptionsStore @ pinia.js?v=3545ee10:5396 useStore @ pinia.js?v=3545ee10:5740 (anonymous) @ after_store.js:498 waitForAllStoresToLoad @ after_store.js:487 afterStoreSetup @ after_store.js:515 (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option highlight, value: [object Object] validateSetting @ default_config_state.js:746 (anonymous) @ sync_config.js:782 afterLoad @ sync_config.js:776 getMaybeAugmentedState @ persisted_state.js:212 await in getMaybeAugmentedState (anonymous) @ persisted_state.js:234 (anonymous) @ pinia.js?v=3545ee10:5690 run @ chunk-LG6AQRJS.js?v=3545ee10:383 (anonymous) @ pinia.js?v=3545ee10:5690 createSetupStore @ pinia.js?v=3545ee10:5688 createOptionsStore @ pinia.js?v=3545ee10:5396 useStore @ pinia.js?v=3545ee10:5740 (anonymous) @ after_store.js:498 waitForAllStoresToLoad @ after_store.js:487 afterStoreSetup @ after_store.js:515 (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 --- default_config_state.js:746 Unknown option muteWords, value: politic,apod,... validateSetting @ default_config_state.js:746 (anonymous) @ sync_config.js:782 afterLoad @ sync_config.js:776 getMaybeAugmentedState @ persisted_state.js:212 await in getMaybeAugmentedState (anonymous) @ persisted_state.js:234 (anonymous) @ pinia.js?v=3545ee10:5690 run @ chunk-LG6AQRJS.js?v=3545ee10:383 (anonymous) @ pinia.js?v=3545ee10:5690 createSetupStore @ pinia.js?v=3545ee10:5688 createOptionsStore @ pinia.js?v=3545ee10:5396 useStore @ pinia.js?v=3545ee10:5740 (anonymous) @ after_store.js:498 waitForAllStoresToLoad @ after_store.js:487 afterStoreSetup @ after_store.js:515 (anonymous) @ main.js:110 await in (anonymous) (anonymous) @ main.js:114 default_config_state.js:746 Unknown option _pleroma_settings_version, value: 1,0 </pre> </details> Also instance panel and TOS stopped working resulting in no instance name shown in the top panel: ``` after_store.js:217 Can't load instance panel Error: Unknown option instanceIdentity.instanceSpecificPanelContent, value: <div style="margin-left:12px; margin-right:12px"> <p>Welcome to <a href="https://pleroma.social" target="_blank">Pleroma!</a></p> <p><a href="/main/all">Pleroma FE</a></p> </div> at validateSetting (default_config_state.js:744:13) at Proxy.set (instance.js:198:26) at getInstancePanel (after_store.js:209:26) at async Promise.all (index 1) at async afterStoreSetup (after_store.js:563:3) at async main.js:110:12 --- after_store.js:200 Can't load TOS Error: Unknown option instanceIdentity.tos, value: <h4>Terms of Service</h4> <p>This is the default placeholder ToS. You should copy it over to your static folder and edit it to fit the needs of your instance.</p> <p>To do so, place a file at <code>"/instance/static/static/terms-of-service.html"</code> in your Pleroma install containing the real ToS for your instance.</p> <p>See the <a href='https://docs.pleroma.social/backend/configuration/static_dir/'>Pleroma documentation</a> for more information.</p> <br> <img src="/static/logo.svg" style="display: block; margin: auto; max-width: 100%; height: 50px; object-fit: contain;" /> at validateSetting (default_config_state.js:744:13) at Proxy.set (instance.js:198:26) at getTOS (after_store.js:195:26) ``` EDIT: Due to the muteFilters and muteWords errors, word filtering also stopped working.
hj added 2 commits 2026-04-09 21:03:17 +00:00
Author
Owner

fixed instance identity (name, tos, isp) stuff

fixed instance identity (name, tos, isp) stuff
Author
Owner

fixed objects (theme3hacks, muteFilters etc)
...i think

fixed objects (theme3hacks, muteFilters etc) ...i think
hj added 2 commits 2026-04-10 12:20:46 +00:00
hj added 6 commits 2026-04-10 13:55:37 +00:00
Author
Owner

fixed old config disappearing, split theme3hacks into separate fields (fontInterface, underlay etc)

fixed old config disappearing, split theme3hacks into separate fields (fontInterface, underlay etc)
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.