manifest.json reference

Every widget has a manifest.json at the root of its .nepget bundle. It tells NepTunes how to load and present the widget.

Required fields

FieldTypeDescription
manifestVersionIntManifest format version. Always 1.
idStringUnique identifier in reverse-domain notation, e.g. com.example.my-widget.
nameStringDisplay name shown in the widget picker.
versionStringSemantic version, e.g. 1.0.0.
entryStringEntry HTML file, typically index.html.
defaultSizeObjectDefault window size: { "width": Int, "height": Int } in pixels.

Optional fields

FieldTypeDescription
authorStringAuthor name.
descriptionStringShort description of the widget.
licenseStringLicense identifier, e.g. MIT.
homepageStringHomepage URL.
minSizeObjectMinimum window size { width, height }.
maxSizeObjectMaximum window size { width, height }.
resizableBoolWhether the user can resize the widget. Defaults to false.
previewStringPreview image filename inside the bundle.
iconStringIcon filename inside the bundle.
permissionsArrayThe permissions the widget needs.
settingsObjectA { "schema": [ … ] } object describing user settings.

Complete example

This is the manifest from the “Now Playing” widget in the gallery:

{
  "manifestVersion": 1,
  "id": "pl.micropixels.neptunes.widget.now-playing",
  "name": "Now Playing",
  "version": "1.9.0",
  "author": "NepTunes",
  "description": "Displays the currently playing track with playback controls",
  "license": "MIT",
  "homepage": "https://neptunesmac.app",
  "entry": "index.html",
  "defaultSize": { "width": 368, "height": 220 },
  "minSize": { "width": 328, "height": 200 },
  "resizable": false,
  "preview": "preview.jpg",
  "permissions": ["artwork", "playbackControl"],
  "settings": {
    "schema": [
      {
        "id": "showArtwork",
        "type": "checkbox",
        "label": "Show Album Artwork",
        "default": true
      },
      {
        "id": "theme",
        "type": "radio",
        "label": "Theme",
        "options": [
          { "value": "dark", "label": "Dark" },
          { "value": "light", "label": "Light" }
        ],
        "default": "dark"
      }
    ]
  }
}

← Quick startJavaScript API →