Skip to main content

manifest.yaml reference

The manifest describes your app: its identity, its canvas, its pages, and the inputs a user fills in. Every field is listed below.

gdn: 1
id: local-aqi
version: 0.1.0
name: Local AQI
author: your-name
description: Air quality for a US zip code.
entry: app.star
width: 128
height: 32
refresh: 300
pages: [now, health]
inputs:
- key: zip
type: string
app_input_type: free-text
label: Zip code
default: "90210"
help: A US zip code.
assets:
- leaf.png

Top-level fields

FieldWhat it is
idFolder name under apps/ (lowercase, hyphens, no spaces).
nameThe title people see when adding your app.
authorYour name or handle.
descriptionOne line about what it shows.
categoryThe kind of app, used to group it in the catalog (e.g. Sports, Finance, Weather, Lifestyle, Time, News, Entertainment, Science, Fun).
entryThe code file, usually app.star.
width / heightPanel size in pixels. Height is always 32. A single panel is 64 wide and panels daisy-chain, up to 384 wide; for best performance keep to 192 or smaller and split content across pages.
refreshSeconds between refreshes (3600 = hourly).
pagesOrdered list of screens, e.g. [now, health]. See Pages.
assetsPNG files your app draws with c.image(). Every drawn image must be listed.
inputsThe user's setup form, see below. Omit if your app needs none.

Inputs

Each input becomes one control on the user's setup form.

FieldWhat it is
keyThe name your code reads, ctx.inputs["zip"]. No spaces.
labelWhat the user sees next to the control.
app_input_typeWhich control to show, see Input types.
typeThe data type: string, number, or choice.
defaultPre-filled value when the user leaves it blank.
choicesThe option list, only for dropdown / selection.
helpA short hint shown under the control.
tip

app_input_type is optional, leave it off and the form infers the control from type. But setting it explicitly gives users the right widget (a date picker, a color wheel, a toggle) instead of a plain text box.