Summary
The Retreivr Jellyfin plugin dashboard page renders, but plugin settings do not persist after reload.
Current behavior:
- config page loads inside Jellyfin
- entering values appears to update the inputs locally
- clicking
Save Settings does not show a useful error
- after page reload, values revert to defaults
- in several builds,
Open Retreivr UI / Refresh Status also appeared non-functional
- server-side config GET/POST logs were not observed during testing
This has been tested repeatedly across multiple plugin releases and different implementation approaches.
Environment
- Jellyfin server: 10.9.x / 10.11.x family during testing
- Plugin repo:
sudoStacks/retreivr-jellyfin-plugin
- Tested plugin versions:
v0.1.6
v0.1.7
v0.1.8
v0.1.9
v0.1.10
v0.1.11
Symptoms Seen
Persistence
- Saving config does not survive reload
- Values remain visible in inputs until page reload
- Reload returns to defaults
UI behavior
- Earlier builds showed:
- save causing refresh / clear behavior
- action buttons not responding
- Later builds showed:
- no visible refresh
- values remain in the DOM temporarily
- still no persistence after reload
Logging
- Temporary controller logs were added for:
GET /Plugins/Retreivr/config
POST /Plugins/Retreivr/config
- In testing, those logs did not appear, suggesting the embedded page may not actually be hitting the plugin controller from the Jellyfin dashboard page surface.
Implementation Approaches Already Tried
1. Jellyfin native plugin config flow
Tried:
ApiClient.getPluginConfiguration(...)
ApiClient.updatePluginConfiguration(...)
Result:
- did not solve persistence
2. Plugin-owned JSON persistence
Implemented plugin-owned config storage under plugin data folder and used:
GET /Plugins/Retreivr/config
POST /Plugins/Retreivr/config
Result:
- still did not persist from dashboard page
3. Raw fetch-based page requests
Tried fetch("/Plugins/Retreivr/...")
Result:
- suspected missing Jellyfin auth/session handling
- did not solve persistence
4. Jellyfin-native request path
Switched page requests to:
ApiClient.getUrl(...)
ApiClient.ajax(...)
pageshow lifecycle
Result:
- still no working persistence observed in live Jellyfin testing
5. Event binding / page lifecycle hardening
Tried:
DOMContentLoaded
load
pageshow
- delayed retries
- direct
onclick fallbacks on buttons
- explicit global page object methods
Result:
- page actions still did not reliably produce saved config state
6. Authorized controller and logging
Controller was updated with:
[Authorize(Policy = "RequiresElevation")]
- explicit GET/POST logging
Result:
- logs still not observed during testing
7. Embedded page cache busting
Renamed the embedded config page resource to force Jellyfin to load a new page instead of cached HTML/JS.
Result:
- still no observed behavior change in live testing
Likely Remaining Root Cause
At this point the issue appears to be one of:
- Jellyfin dashboard/plugin embedded page execution is not working the way expected on this page surface
- The plugin menu/dashboard page surface is not the right integration point for persistent config and richer UI
- The page script is not actually running as expected even when the HTML/CSS render
- The request path to the plugin controller is not being executed from the embedded page despite multiple request strategies
Suggested Next Step
Instead of continuing to iterate on the full Retreivr page, the next debugging step should be:
- Create a minimal official-template-style Jellyfin plugin config page
- Prove the smallest possible save/load round-trip works
- Only then reintroduce the richer Retreivr UI
A minimal reproduction would help determine whether the problem is:
- this specific page implementation
- or the broader Jellyfin plugin page integration model
Repo / Branch Context
Latest attempted release in this series:
The project is being paused for now until a smaller, proven Jellyfin config-page baseline can be established.
Summary
The Retreivr Jellyfin plugin dashboard page renders, but plugin settings do not persist after reload.
Current behavior:
Save Settingsdoes not show a useful errorOpen Retreivr UI/Refresh Statusalso appeared non-functionalThis has been tested repeatedly across multiple plugin releases and different implementation approaches.
Environment
sudoStacks/retreivr-jellyfin-pluginv0.1.6v0.1.7v0.1.8v0.1.9v0.1.10v0.1.11Symptoms Seen
Persistence
UI behavior
Logging
GET /Plugins/Retreivr/configPOST /Plugins/Retreivr/configImplementation Approaches Already Tried
1. Jellyfin native plugin config flow
Tried:
ApiClient.getPluginConfiguration(...)ApiClient.updatePluginConfiguration(...)Result:
2. Plugin-owned JSON persistence
Implemented plugin-owned config storage under plugin data folder and used:
GET /Plugins/Retreivr/configPOST /Plugins/Retreivr/configResult:
3. Raw fetch-based page requests
Tried
fetch("/Plugins/Retreivr/...")Result:
4. Jellyfin-native request path
Switched page requests to:
ApiClient.getUrl(...)ApiClient.ajax(...)pageshowlifecycleResult:
5. Event binding / page lifecycle hardening
Tried:
DOMContentLoadedloadpageshowonclickfallbacks on buttonsResult:
6. Authorized controller and logging
Controller was updated with:
[Authorize(Policy = "RequiresElevation")]Result:
7. Embedded page cache busting
Renamed the embedded config page resource to force Jellyfin to load a new page instead of cached HTML/JS.
Result:
Likely Remaining Root Cause
At this point the issue appears to be one of:
Suggested Next Step
Instead of continuing to iterate on the full Retreivr page, the next debugging step should be:
A minimal reproduction would help determine whether the problem is:
Repo / Branch Context
Latest attempted release in this series:
v0.1.11The project is being paused for now until a smaller, proven Jellyfin config-page baseline can be established.