From 3fb34c5ac791465923c9e16cbdefc3a7f8afb357 Mon Sep 17 00:00:00 2001 From: Matthew Daubney Date: Sun, 27 Sep 2026 23:46:55 +0100 Subject: [PATCH] Fix plugin config UI: use JSONForms uiSchema format, not RJSF Navidrome's plugin config editor renders manifest.json's config.uiSchema directly through @jsonforms/react (JsonForms component), not react-jsonschema-form. The previous uiSchema ({"field": {"ui:widget": "password"}}) is RJSF syntax, which JsonForms can't map to any renderer, producing "No applicable renderer found" and blocking plugin configuration/enabling entirely. Replace it with a proper JSONForms UI schema (VerticalLayout of Control elements referencing each property by JSON pointer), using options.format: "password" on the two secret fields, matching how Navidrome's own OutlinedTextRenderer picks the password input type. Bump to 0.1.1. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_018n5ffHCn5QUjpDtuWTk3fh --- manifest.json | 21 ++++++++++++++++++--- pyproject.toml | 2 +- uv.lock | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/manifest.json b/manifest.json index d379fb1..bd23cba 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "Scrobbled", "author": "Matt Daubney", - "version": "0.1.0", + "version": "0.1.1", "description": "Scrobbles Navidrome playback to a self-hosted Scrobbled (Last.fm-compatible) server.", "website": "https://scrobbled.uk", "permissions": { @@ -44,8 +44,23 @@ } }, "uiSchema": { - "scrobbled_password": { "ui:widget": "password" }, - "shared_secret": { "ui:widget": "password" } + "type": "VerticalLayout", + "elements": [ + { "type": "Control", "scope": "#/properties/server_url" }, + { "type": "Control", "scope": "#/properties/api_key" }, + { + "type": "Control", + "scope": "#/properties/shared_secret", + "options": { "format": "password" } + }, + { "type": "Control", "scope": "#/properties/scrobbled_username" }, + { + "type": "Control", + "scope": "#/properties/scrobbled_password", + "options": { "format": "password" } + }, + { "type": "Control", "scope": "#/properties/navidrome_username" } + ] } } } diff --git a/pyproject.toml b/pyproject.toml index 10a7794..15d03d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "navidromescrobbledplugin" -version = "0.1.0" +version = "0.1.1" requires-python = ">=3.13" license = "BSD-3-Clause" license-files = ["LICENSE"] diff --git a/uv.lock b/uv.lock index 837f1e4..93aad2f 100644 --- a/uv.lock +++ b/uv.lock @@ -4,7 +4,7 @@ requires-python = ">=3.13" [[package]] name = "navidromescrobbledplugin" -version = "0.1.0" +version = "0.1.1" source = { virtual = "." } [package.dev-dependencies]