Skip to main content
Keep manifest.yaml beside your app’s single top-level .star file. These are YAML keys, which do not always have the same names as CLI flags.

Required fields

The name and summary limits include spaces. Exactly 32 bytes is allowed. ASCII characters each use one byte; accented characters and emoji may use more. Older CLI error messages say “less than 32 characters”; the actual validation is a maximum of 32 UTF-8 bytes.

Optional fields

An App ID identifies a project. A revision ID identifies one immutable upload. A device ID identifies a display. An installation ID identifies one copy in its rotation. See CLI commands for discovering and using them.

Credentials

Each id must match a secret text field in the app’s configuration schema. owner is publisher or user; provider is a nonempty provider identifier. required defaults to false. IDs must be unique within the declaration list. Store publisher values with niblet apps secrets set api_key. Users supply user-owned values through their installation settings. Never put secret values in manifest.yaml or source code.

URLs supplied through settings

This manifest field is available with CLI v0.54.10 and the current hosted service.
Declare feed_url as a non-secret text field in get_schema(). Its configured value must be an HTTPS URL on port 443 with a DNS hostname and no username or password. IP literals are rejected. Private and reserved addresses, including addresses reached through DNS or redirects, remain blocked by the egress proxy. Declare static redirect destinations separately in network_hosts. Static hosts and URL fields share a limit of 64 declarations. Network permission is frozen per uploaded revision. Private apps do not need human review to use these permissions. Never put credentials in an ordinary URL setting; use the credential fields instead.
Last modified on September 25, 2026