Files
LEDMatrix/docs/PLUGIN_CONFIG_QUICK_START.md
Chuck b374bfa8c6 docs: fix plugin config + store + dependency docs
PLUGIN_STORE_GUIDE.md
- 19 occurrences of port 5050 -> 5000
- All API paths missing /v3 (e.g. /api/plugins/install ->
  /api/v3/plugins/install). Bulk fix.

PLUGIN_REGISTRY_SETUP_GUIDE.md
- Same port + /api/v3 fixes (3 occurrences each)
- "Go to Plugin Store tab" -> "Open the Plugin Manager tab and scroll
  to the Install from GitHub section" (the real flow for registry
  setup is the GitHub install section, not the Plugin Store search)

PLUGIN_CONFIG_QUICK_START.md
- Port 5001 -> 5000 (5001 is the dev_server.py default, not the web UI)
- "Plugin Store tab" install flow -> real Plugin Manager + Plugin Store
  section + per-plugin tab in second nav row
- Removed reference to PLUGIN_CONFIG_TABS_SUMMARY.md (archived doc)

PLUGIN_CONFIGURATION_TABS.md
- "Plugin Management vs Configuration" section confusingly described
  a "Plugins Tab" that doesn't exist as a single thing. Rewrote to
  describe the real two-piece structure: Plugin Manager tab (browse,
  install, toggle) vs per-plugin tabs (configure individual plugins).

PLUGIN_DEPENDENCY_GUIDE.md
- Port 5001 -> 5000

PLUGIN_DEPENDENCY_TROUBLESHOOTING.md
- Wrong port (8080) and wrong UI nav ("Plugin Store or Plugin
  Management"). Fixed to the real flow.

PLUGIN_QUICK_REFERENCE.md
- "Plugin Location: ./plugins/ directory" -> default is plugin-repos/
  (verified in config/config.template.json:130 and
  display_controller.py:132). plugins/ is a fallback.
- File structure diagram showed plugins/ -> plugin-repos/.
- Web UI install flow: "Plugin Store tab" -> "Plugin Manager tab ->
  Plugin Store section". Also fixed Configure ⚙️ button (doesn't
  exist) and "Drag and drop reorder" (not implemented).
- API examples: replaced ad-hoc Python pseudocode with real curl
  examples against /api/v3/plugins/* endpoints. Pointed at
  REST_API_REFERENCE.md for the full list.
- "Migration Path Phase 1-5" was a roadmap written before the plugin
  system shipped. The plugin system is now stable and live. Removed
  the migration phases as they're history, not a roadmap.
- "Quick Migration" section called scripts/migrate_to_plugins.py
  which doesn't exist anywhere in the repo. Removed.
- "Plugin Registry Structure" referenced
  ChuckBuilds/ledmatrix-plugin-registry which doesn't exist. The
  real registry is ChuckBuilds/ledmatrix-plugins. Fixed.
- "Next Steps" / "Questions to Resolve" sections were
  pre-implementation planning notes. Replaced with a "Known
  Limitations" section that documents the actually-real gaps
  (sandboxing, resource limits, ratings, auto-updates).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 22:10:05 -04:00

5.4 KiB

Plugin Configuration Tabs - Quick Start Guide

🚀 Quick Start (1 Minute)

For Users

  1. Open the web interface: http://your-pi-ip:5000
  2. Open the Plugin Manager tab
  3. Find a plugin in the Plugin Store section (e.g., "Hello World") and click Install
  4. Notice a new tab appears in the second nav row with the plugin's name
  5. Click that tab to configure the plugin
  6. Modify settings and click Save
  7. From Overview, click Restart Display Service to see changes

That's it! Each installed plugin automatically gets its own configuration tab.

🎯 What You Get

Before This Feature

  • All plugin settings mixed together in the Plugins tab
  • Generic key-value inputs for configuration
  • Hard to know what each setting does
  • No validation or type safety

After This Feature

  • Each plugin has its own dedicated tab
  • Configuration forms auto-generated from schema
  • Proper input types (toggles, numbers, dropdowns)
  • Help text explaining each setting
  • Input validation (min/max, length, etc.)
  • One-click reset to defaults

📋 Example Walkthrough

Let's configure the "Hello World" plugin:

Step 1: Navigate to Configuration Tab

After installing the plugin, you'll see a new tab:

[Overview] [General] [...] [Plugins] [Hello World] ← New tab!

Step 2: Configure Settings

The tab shows a form like this:

Hello World Configuration
A simple test plugin that displays a customizable message

✓ Enable or disable this plugin
  [Toggle Switch: ON]

Message
The greeting message to display
  [Hello, World!        ]

Show Time
Show the current time below the message
  [Toggle Switch: ON]

Color
RGB color for the message text [R, G, B]
  [255, 255, 255        ]

Display Duration
How long to display in seconds
  [10                   ]

[Save Configuration] [Back] [Reset to Defaults]

Step 3: Save and Apply

  1. Modify any settings
  2. Click Save Configuration
  3. See confirmation: "Configuration saved for hello-world. Restart display to apply changes."
  4. Restart the display service

🛠️ For Plugin Developers

Minimal Setup

Create config_schema.json in your plugin directory:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean",
      "default": true,
      "description": "Enable this plugin"
    },
    "message": {
      "type": "string",
      "default": "Hello!",
      "description": "Message to display"
    }
  }
}

Reference it in manifest.json:

{
  "id": "my-plugin",
  "icon": "fas fa-star",              // Optional: add a custom icon!
  "config_schema": "config_schema.json"
}

Done! Your plugin now has a configuration tab.

Bonus: Add an icon field for a custom tab icon! Use Font Awesome icons (fas fa-star), emoji (), or custom images. See PLUGIN_CUSTOM_ICONS.md for the full guide.

🎨 Supported Input Types

Boolean → Toggle Switch

{
  "type": "boolean",
  "default": true
}

Number → Number Input

{
  "type": "integer",
  "default": 60,
  "minimum": 1,
  "maximum": 300
}

String → Text Input

{
  "type": "string",
  "default": "Hello",
  "maxLength": 50
}

Array → Comma-Separated Input

{
  "type": "array",
  "items": {"type": "integer"},
  "default": [255, 0, 0]
}

User enters: 255, 0, 0

Enum → Dropdown

{
  "type": "string",
  "enum": ["small", "medium", "large"],
  "default": "medium"
}

💡 Pro Tips

For Users

  1. Reset Anytime: Use "Reset to Defaults" to restore original settings
  2. Navigate Back: Switch to the Plugin Manager tab to see the full list of installed plugins
  3. Check Help Text: Each field has a description explaining what it does
  4. Restart Required: Remember to restart the display service from Overview after saving

For Developers

  1. Add Descriptions: Users see these as help text - be descriptive!
  2. Use Constraints: Set min/max to guide users to valid values
  3. Sensible Defaults: Make sure defaults work without configuration
  4. Test Your Schema: Use a JSON Schema validator before deploying
  5. Order Matters: Properties appear in the order you define them

🔧 Troubleshooting

Tab Not Showing

  • Check that config_schema.json exists
  • Verify config_schema is in manifest.json
  • Refresh the page
  • Check browser console for errors

Settings Not Saving

  • Ensure plugin is properly installed
  • Restart the display service after saving
  • Check that all required fields are filled
  • Look for validation errors in browser console

Form Looks Wrong

  • Validate your JSON Schema
  • Check that types match your defaults
  • Ensure descriptions are strings
  • Look for JavaScript errors

📚 Next Steps

🎉 That's It!

You now have dynamic, type-safe configuration tabs for each plugin. No more manual JSON editing or cluttered interfaces - just clean, organized plugin configuration.

Enjoy! 🚀