Kinds
kind tells Timon what a plugin is; slots tell it where that plugin inserts components. These must agree.
| Kind | Surface |
|---|---|
widget | At least one slot ending in .widget |
page | page, with a declared route |
overlay | Exact overlay slot, inside the app window |
theme | Single theme slot |
composer | Single chat.composer slot |
layout | Single root slot |
behavior | Effects or settings without a required visual kind |
bundle | Installs contains; no browser half |
A string is shorthand for a one-element list. A plugin can declare ['widget', 'overlay'] and register both surfaces in the same apply. They remain one identity. plugin-hello likewise registers navigation and a widget without becoming a bundle.
A bundle is exclusive: it cannot combine bundle with another kind or include a browser half. Only bundles may declare nonempty contains. Each child keeps its own identity and independent toggle.
A missing kind is inferred from recognised slots. A plugin with no recognised visual kind becomes behavior; there is no separate settings kind. Declare settings fields or exact settings slots instead.