This catalog covers all 101 JSON example files in docs/examples/. Each entry lists the top-level type, item types, structural properties, plugins, inline-expression families, and multi-action syntax used — so an LLM can quickly find a suitable template for a given JSON-building task. Descriptions are derived from file content and folder annotations; entries that have a deeper walk-through in the Cookbook carry a Cookbook cross-link with the key mechanism folded into the description.
typedisambiguation: The Item types field lists only values of a content item’stypeproperty (default,teaser,button,separate,space,control) or a menu item’stype(default,separator,settings). Values that belong to alivesub-object (schedule,lifetime,airtime,playback,setup) are listed separately under Live object type — they are not valid content-itemtypevalues. See Live Object and Content Item Object.
Version annotations:
The Version field states the functional minimum — the lowest MSX version on which the file’s core structure and actions work correctly. A file may additionally use a handful of properties or inline expressions from higher versions purely for visual polish (e.g. {chr:...} character entities, captionUnderlay, navigationSpan); on an MSX version below those, the expression is shown literally or the property is simply ignored — the layout does not break, it just looks a little less polished here and there. Such purely cosmetic extras are not reflected in the Version field below.
guide/ — available since 0.1.0.github/base/ — available since 0.1.0, except github/base/youtube.json which requires 0.1.40 (its core action is video:plugin:{URL}).github/extended/ — require 0.1.112 or higher for correct operation, except list3_section0.json–list3_section3.json which require 0.1.144 (their tab-switching relies on the replace:content: action, which is unrecognized and a no-op — with a warning shown — before 0.1.144).github/ (root) — available since 0.1.0.xp/ — experimental tests; minimum version varies per file; use the Experts API documentation to determine version requirements for specific features used.type field)separator0.1.0type field — content root)default{ico:...}, {txt:...}, {chr:...}, {br}default items enriched with icon, color-text, character-entity, and line-break inline expressions.0.1.0All four base examples use type: "pages" with a template property and are the public baseline examples from https://github.com/benzac-de/msx.
pagesseparatetemplatetemplate + items, each "action": "audio:{URL}". Audio plays with no video screen; use a background property for a backdrop.0.1.0pagesdefaulttemplatedefault items with a template; each item uses "action": "image:context", which shows the item’s own image property full-screen.0.1.0pagesseparatetemplateseparate items and a template; each item "action": "video:{URL}" plus a playerLabel shown in the player.0.1.0pagesseparatetemplateseparate items and a template; each item "action": "video:plugin:{URL}" (since 0.1.40) routes playback through the youtube.html plugin, with parameters (?id=…) riding in the URL.0.1.40 (core action is video:plugin:{URL}, since 0.1.40)These extended examples require MSX 0.1.112 or higher. They demonstrate advanced list layouts with grouping, enumeration, preloading, selection, image overlays, and multi-action syntax.
listbutton, default, space, teaserenumerate, group, imageOverlay, important, preload, selection[a|b]{chr:...}, {col:...}, {txt:...}space-item page headers with group: "id:{PAGE_ID}" (invisible, only resets each page’s enumerate counter), enumerate, imageOverlay, teaser/default/space/button items, preload, important, selection, and multi-action actions.0.1.112listbutton, control, separate, spaceenumerate, group, imageOverlay, important, preload, selection[a|b]{chr:...}, {col:...}, {txt:...}control and separate items; same advanced structural features as list0 (group, enumerate, imageOverlay, preload, selection).0.1.112listbutton, control, default, spaceenumerate, group, imageOverlay, important, preload, selection[a|b]{chr:...}, {col:...}, {txt:...}control and default items alongside the full set of advanced structural properties (group, enumerate, imageOverlay, preload, selection).0.1.112listdefault, spaceenumerate, imageOverlay, important, preload[a|b]{col:...}, {txt:...}flag: "tabs" + [invalidate:content|replace:content:tabs:{URL}] — no history entry per tab. Demonstrates partial list data split across multiple JSON files, loaded via preload.0.1.144 (tab-switching relies on replace:content:, since 0.1.144)listdefault, spaceenumerate, imageOverlay, important, preload[a|b]{col:...}, {txt:...}flag: "tabs" + [invalidate:content|replace:content:tabs:{URL}]).0.1.144 (tab-switching relies on replace:content:, since 0.1.144)listdefault, spaceenumerate, imageOverlay, important, preload[a|b]{col:...}, {txt:...}flag: "tabs" + [invalidate:content|replace:content:tabs:{URL}]).0.1.144 (tab-switching relies on replace:content:, since 0.1.144)listdefault, spaceenumerate, imageOverlay, important, preload[a|b]{col:...}, {txt:...}flag: "tabs" + [invalidate:content|replace:content:tabs:{URL}]).0.1.144 (tab-switching relies on replace:content:, since 0.1.144)listdefault, spaceimportant, preload, selection, template[a|b]{br}, {col:...}, {txt:...}template + items with an underlay decoration page, a footer, and captionUnderlay (since 0.1.153); uses {br} for multi-line text alongside color/text expressions.0.1.112listdefault, spaceimportant, preload, selection, template[a|b]{br}, {col:...}, {txt:...}overlay decoration, a footer, and navigationSpan to narrow the list scroll indicators under the scrollable list column (the overlay preview panel occupies the other half of the screen); another template+selection example.0.1.112pagesdefault, spaceenumerate, imageOverlay, important, preload, selection, template[a|b]{txt:...}template + underlay + selection with enumeration, image overlays, preloading, and multi-action actions.0.1.112pagesdefault, teaserimportant, preload[a|b]{txt:...}teaser items across pages, importance marking, preloading, and multi-action actions; simpler variant without template.0.1.112listdefaultpreload, template{col:...}template + items and color expressions.0.1.112listseparatepreload, template{col:...}separate items in a sub-navigable list (rows within rows) for catalog-style browsing.0.1.112listdefaultpreload, template{col:...}template and preload.0.1.112All guide examples are available since 0.1.0.
type field — start or menu root)action strings — it only links via data to the content files that actually demonstrate action usage.0.1.0pagesseparatetemplateseparate items with a template for each audio entry.0.1.0pagesdefaulttemplate{context:...}{context:label} to display its own icon name.0.1.0pagesbuttonbutton items.0.1.0pagesdefaulttemplate, action (panel:data), data (embedded Content Root Object){context:...}template-defined action/data opens a detail panel showing the icon enlarged with its name, substituted via {context:icon} in the panel’s nested data. Written once in template.data rather than repeated per item.0.1.0pagesdefault{br}{br} for multi-line text alongside images.0.1.0pagesbutton, default{txt:...}0.1.0pagesbutton, default{txt:...}0.1.0pagesdefaulttemplatedefault items with a template.0.1.0pagesseparatetemplateseparate items with a template for each link entry.0.1.0listbutton{txt:...}button items with colored text expressions.0.1.0type field)separatordefault (unset type) and separator menu items. The “Panel” entry’s data is an embedded Content Root Object (type: "pages") containing one button content item — that pages/button pairing belongs to the embedded content, not to the menu items themselves.0.1.0pagesbuttonbutton items.0.1.0pagesdefault, separateenumeratedefault and separate items, demonstrating the enumerate property.0.1.0pagesbutton{txt:...}button items and colored text expressions.0.1.0type field — panel/start context)button{txt:...}button items and colored text; demonstrates panel-style content presentation.0.1.0pagesbutton{txt:...}pages root; demonstrates panel layout within a standard pages structure.0.1.0pagesbuttonenumerate, template0.1.0pagesbutton, default, spacebutton, default, and space item types.0.1.0listbuttonbutton items.0.1.0pagesbuttonbutton items.0.1.0pagesseparateseparate items to demonstrate per-item template application.0.1.0listseparatetemplatelist type with separate items; shows template reuse in list layout.0.1.0pagesseparatetemplatepages layout with separate items.0.1.0pagesbutton, separatetemplatebutton and separate items.0.1.0pagesdefault{ico:...}, {txt:...}, {br}, {sp}, {tb}default items.0.1.0pagesbutton, default, separate, space, teasercontrol, which was originally reserved for internal use and only later saw general adoption).0.1.0pagesbutton, default, separate, space, teasercontrol, which was originally reserved for internal use and only later saw general adoption).0.1.0pagesseparatetemplateseparate items with a template for each video entry.0.1.0Experimental tests. Minimum version requirements depend on the specific features used; consult the Experts API documentation for each feature.
type field)pagesseparatetemplate{ico:...}, {txt:...}pagesdefaultplaybacklive{ico:...}, {txt:...}default item whose embedded live object (type: "playback") tracks the running plugin video for performance measurement. Note: playback is the type of the live sub-object, not of the content item.pagesseparatetemplateseparate items.type field)type field — menu root)separator, settingssettings items and separators.pagesseparateexecute, templateexecute auto-executing the item on load (requires focus: true).pagesbuttonbutton items.pagesdefaulttemplatedefault items in a template layout where image display is controlled.pagesseparatetemplate{num:...}, {txt:...}{num:...} expressions for numeric formatting.type field){br}, {col:...}, {ico:...}, {txt:...}{col:...} color expressions.type field)button, space{ico:...}, {txt:...}key property on items for keyboard shortcut binding.listseparate, spaceimageOverlayseparate and space items using imageOverlay.pagestype field){br}, {col:...}, {dic:...}, {dix:...}, {ico:...}, {txt:...}{dic:...} and {dix:...} expressions for value lookup.listbutton, control, spacecompress, templatecompress: true to expand the layout grid from 12×6 to 16×8, demonstrating the extended grid capacity. Requires 0.1.123 or higher.0.1.123listseparatetemplate0.1.107): asks a server for the actual media URL at playback time — used to serve a platform-specific codec or to mint temporary/token-protected links. Resolves video:/audio: URLs via a server (video:resolve:{URL}) and via the Interaction Plugin (video:resolve:request:interaction:...@resolve.html). No video:plugin:/audio:plugin: action is used, so this does not demonstrate the Video/Audio Plugin itself.listcontrol, separateenumerate, options, template[a|b]{context:...}, {ico:...}, {tb}, {txt:...}options panel get a key property so a single remote key triggers them directly (very common in practice for quick actions) — here control items with options and multi-action, selected via {context:...} expressions.listdefault, spaceimageOverlay, preload, template{col:...}listdefault, spaceimageOverlay, preload, template{col:...}listdefault, spaceimageOverlay, preload, template{col:...}listdefault, spaceimageOverlay, preload, template{col:...}pagesdefaulttemplateproperties ("image:options": true, "image:icon", "image:action"), letting the user rotate/adjust the shown image; applied via template.pagescontrol, default, separateimageOverlay{br}, {col:...}, {ico:...}control, default, and separate items with image overlays and formatted text.pagescontrol, default, spaceimportant, options, selection, template[a|b]{col:...}, {context:...}, {ico:...}keep-ratio in image configuration.listbutton, default, spacegroup, selection, template{context:...}{context:...} for advanced template-driven content.pagesbuttonlifetimeexecute, live, template{br}lifetime live object (relative delay → duration) walks through coming → running → over, each state firing its own execute.action. Here lifetime is the type of the live sub-object; the content item is a button.pagesbutton, separateplaybackenumerate, live, templateplayback live object bound to the running video shows live progress, combined with resume:clear / a resume:key so positions persist across sessions. playback is the live sub-object type; the items are button/separate.pagesbutton, separate, spaceplaybackenumerate, live, selection, template{context:...}, {ico:...}selection object and an overlay page on top of the playback+resume pattern from test 2. playback is the live sub-object type.type field — menu root)separator{ico:...}, {tb}extension property shows a live clock (live + icon + tab expressions), and whose menu items’ data point to server services (live.php, guide.php) that build the actual channel/EPG content with schedule/setup live objects. The file itself is only the shell; the reusable server pattern (self-sustaining EPG via setup → execute:service: → update + schedule with an over action that fetches the next program) is detailed in the Cookbook deep dives.listseparatetemplateseparate items loaded via the NetCast-specific setup.listseparate, spaceplaybackenumerate, imageOverlay, live, template[a|b]{col:...}, {txt:...}playback live object plus a player:goto action and a ready action (fires on every fresh display, not just startup — see Glossary: Ready) move focus/playback to the next item automatically — a good template for “play all” / autoplay-next behavior. playback is the live sub-object type; the items are separate/space.listseparatetemplate{txt:...}youtube.html, vimeo.html, twitch.html, dailymotion.html, facebook.html, soundcloud.html, wistia.html, html5.html, template.html). The go-to reference for “which plugin URL do I use for source X”. Basic list with separate items and text expressions.listbutton, separateenumerate, templateinteraction:load/reload/unload and content:request:interaction:... to a headless background handler page (Template, Search, Settings, Observer). The JS handler contract (handleRequest/handleData → reload:content round-trip for stateless, server-less UIs) is walked through in the Cookbook deep dive. Enumerated list of separate and button items.pagesseparatetemplatevideo:{URL}, audio:{URL}, and the image.html plugin (video:plugin:) so images, audio and video sit together in one playlist. Pages layout with separate items.pagesseparatetemplate{context:...}video:plugin:...html5x.html with audio/subtitle tracks configured via html5x:* item properties (multi-language html5x:subtitle:{lang}:{Label} tracks) and a content button opening a panel:request:player:options menu. A great reference for writing your own video plugin — the JS player contract (setupPlayer, media-event → TVXVideoPlugin mapping, player:commit:message: round-trip) is in the Cookbook deep dive. Pages with template and {context:...}.pagesdefaultgroup, template{br}, {col:...}, {ico:...}, {txt:...}video:plugin:...panorama.html displays a wide (>16:9, e.g. 2:1) panorama image as a sliding pan (not a video, despite the video:plugin: mechanism); template with default items and rich inline expressions.type field — content root, defaults to pages)menu: action loads plugin_test_6_menu.json. Not a Start Object despite being the entry point of the demo.type field — content root, defaults to pages)defaulttemplate{col:...}, {context:...}, {ico:...}video:auto:plugin:...background.html with template and {context:...} expressions (including a {context:controlTransparent}-fed control:transparent), loaded via a menu item’s data from plugin_test_6_menu.json.type field — menu root)menu: from plugin_test_6.json; each menu item’s data loads plugin_test_6_content.json. The ready action calls execute:service:video:data:...background.php to auto-execute a server-driven background video on load.type field)reference property (interaction/mrss.html), combined with the Ad Plugin (ad.html) for ad insertion, using a pipe-separated compound request:interaction: reference.listdefault, spaceimportant, preload, selection, template[a|b]{br}, {col:...}, {context:...}interaction:load:.../backdrop.html on item selection (underlay, selection, delay:backdrop). List with selection, preload, importance, template, multi-action, and context expressions.listseparateplaybacklive, templatevideo:plugin: loading android.html — with a playback live object driving live-updating playback progress. playback is the live sub-object type; the items are separate.listseparateplaybacklive, templatevideo:resolve:request:interaction:{URL}@.../interaction/play.html. Each item also carries a playback live object for live progress and a properties.resume:key so the position resumes. playback is the live sub-object type; the items are separate.listcontrolcompress, templatevideo:plugin:...ima.html to insert Google IMA advertising into your content (most of the ad setup is done server-side). Uses compress: true for the extended 16×8 grid with control items. Requires 0.1.123 or higher.0.1.123type field — menu root)request:interaction:...?offset={OFFSET}&limit={LIMIT}|{LIMIT}@.../interaction/paging.html (needs a matching server endpoint that returns items for offsets > 0).pagesbuttonenumerate, template{br}, {col:...}, {ico:...}, {txt:...}content:request:interaction:...@.../interaction/input.html, execute:fetch:...) for text entry — logins, search boxes, codes (requires a matching server counterpart). Enumerated pages of button items with template and rich inline expressions.listseparatetemplate[a|b]{br}, {ico:...}, {txt:...}separate items with template, multi-action, and text/icon expressions.pagesseparate, spaceimportant, selection, template{col:...}, {ico:...}selection object (since 0.1.110) runs an action when an item receives focus (auto-preview, load a backdrop, update another item) with a configurable delay — here pages with selection, template, important flag, and color/icon expressions.pagesseparate, spaceenumerate, important, selection, template[a|b]{col:...}, {context:...}, {ico:...}underlay, a background, and a delay:selection; demonstrates combined selection + multi-action patterns.listseparatetemplate{ico:...}tizen:* extended properties (tizen:buffer:size, tizen:load/ready/start) and adds a button that loads the Tizen interaction plugin (content:request:interaction:init@.../tizen.html). Samsung Tizen 2016+ models, min MSX 0.1.128. List with separate items and icon expressions.type field)controlenumerate, template{col:...}, {context:...}, {ico:...}control items with context expressions. Samsung Tizen 2016+ models, min MSX 0.1.128.