Skip to main content
A widget is a card that renders in a named slot on one of Tappify’s own pages. It must be readable at 320 pixels, because that is the narrowest slot.
Leave the flags off and the command asks in this order: name, host page, slot, size, expandable.

The manifest entry

The command writes this entry. You can hand-edit tappify.extension.json instead — the $schema line gives your editor completion and validation, and tappify extension doctor checks the result.

The component

The component is the file’s default export and receives TapWidgetProps.
A series query needs analytics:read; every query kind names its own scope. The command adds ui:render, which every UI contribution requires, and the data scope is one you declare. See Scopes.

What the host renders

The host mounts your component in a shadow root inside the slot and draws the frame around it: your vendor tile — 16 pixels, your initials — in the card’s header, and one of four states. Report to vendor sends the error, the stack, the page and your release checksum to your Runtime page. With expandable: true, owners can open the same component in a 640-pixel panel. It re-mounts with tap.ui.size set to panel and tap.context carrying what the surface was showing. The panel’s footer is host-drawn: Ask Tappify about this, Pin as widget, and Open in your product, which is the only exit.

Follow the page's filters

Why filters.range is all the code the number needs to follow the date picker.

Style with host tokens

The variables that make the card match the page around it.

The dev server

See the widget while you edit it.