Skip to content

plugin.json's nav.screen/nav.icon fields are dead config #21

Description

@carochacs

Problem

plugin.json's documented nav object includes a screen field (CLAUDE.md example: "nav": { "label": "My Plugin", "screen": "plugin-my_plugin" }), but the frontend never reads it. The nav dropdown builder in static/app.js hardcodes:

screenId = "plugin-" + plugin.id

regardless of whatever nav.screen a plugin declares. Similarly, at least one plugin (multiplayer in slopsmith-stems) sets an undocumented nav.icon field that also has no consumer anywhere in app.js.

Evidence of confusion this causes

Across the plugin ecosystem, authors keep populating nav.screen inconsistently despite it doing nothing:

  • slopsmith-plugin-editor sets "screen": "editor"
  • slopsmith-plugin-tabimport sets "screen": "tab-import", which doesn't even match its own plugin id (tab_import)
  • slopsmith-plugin-rooms omits screen entirely

Since the field is silently ignored, none of this affects runtime behavior today — but it's actively misleading documentation, and plugin authors are cargo-culting a value that does nothing.

Ask

Either:

  1. Wire nav.screen (and drop or formally support nav.icon) into the dropdown builder so plugin authors can actually control their nav entry's screen id, or
  2. Remove nav.screen from the documented manifest schema in CLAUDE.md and note it's derived automatically from plugin.id, so authors stop setting a value with no effect.

Option 2 is probably the safer/simpler fix given no plugin currently depends on nav.screen being anything other than "plugin-" + id.


Migrated from Maestro-Ltd/slopsmith#33.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions