Skip to main content
A settings panel is the one form owners see for your extension, on the install’s page in their dashboard. Its values persist as a reserved storage document and reach your server as documents.settings on every call.

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 command also writes schemas/settings.json with a single enabled boolean in it, there to be replaced by what owners set. The examples on this page are written against two properties:
Run tappify extension types after every edit to the schema, so the generated TapSettings follows it.

The component

TapSettingsProps gives you the current values and one callback. Render the schema with TapForm rather than writing inputs by hand — it maps the same schema the manifest points at, so the form and the generated TapSettings type cannot disagree.

Where the values go

Saving writes the install-scoped settings singleton, which is why storage may not declare a collection of that name. Three things happen at once:
  • The document is validated against your schema before it is stored.
  • Every mount of your extension in that browser is told, so a widget reflects a saved preference without a reload.
  • A settings.changed event fires, which your UI can subscribe to and your server can receive.
Your server sees the current values as documents.settings on every call it receives, so it never asks Tappify for them.

Build forms from schemas

What TapForm renders for each schema construct.

Store data with hosted storage

Collections of your own, scoped per teammate, install or workspace.

Preview in the portal

Render the panel against fixture data before anything is installed.