Validate & build
Every app gets the same safety check before you share it: does every page render, are all the assets declared, do the inputs work. You can run that check right in Studio, or from the command line.
In Glance Dev Studio
Open your app in Glance Dev Studio and click Validate at the top. It renders every page and runs the exact check publishing does, then shows the result in a pill at the top of the window, with any details in the message console under the panel.

When it passes, click Validate & Submit to open a pull request (see Check it and publish). When it fails, the console names the page and the reason, the same messages decoded below.
From the command line
Prefer the terminal? The same safety check runs with:
gdn validate apps/my-app
# prints PASS my-app (1 page)
# or check every app at once:
gdn validate --all
Validation renders every page: if a page errors, references an undeclared asset, or times out, you'll hear about it here rather than on the panel.
Common failures, decoded
| The message says… | It means… |
|---|---|
manifest lists page 'x' but app.star has no function for it. Add: def x(c, ctx): | Your pages: list and your function names don't match, add the function (or fix the spelling). |
font '4x6' not found. Available: … | Typo in the font name; the message lists every valid one. Or run gdn fonts. |
asset 'x.png' not declared in manifest assets | You drew an image without listing it under assets: in the manifest. |
asset not found (looked in app folder and assets/) | It's declared, but the file isn't next to app.star (or in assets/). |
unknown color 'lime' | Not a named color, the message lists them all; hex like "#88ff00" always works. |
Fix, save, and run again; validation is fast.
Build
To produce the final artifacts (a PNG per page plus the panel's compressed .bin):
gdn build apps/my-app --input zip=10001
Output lands in apps/my-app/build/. You rarely need this by hand (the render
service does it), but it's handy for checking exact output.
Render one page
gdn render apps/my-app --page 1 --input zip=90210 --out page1.png
Great for grabbing a screenshot of a single page with specific inputs; it's how every render in these docs was made.
Next
Once your app validates, it's ready to share: