host.json

host.json, at the top of the folder you publish. A field Tinylib doesn't know, a value of the wrong type, or a value over its limit is an error, and npx tinylib-sdk check tells you which.

Example

{
  "slug": "block-game",
  "name": "Block Game",
  "tagline": "Fit three pieces at a time into a 9×9 grid.",
  "category": "games",
  "tags": ["puzzle", "offline"],
  "icon": "icon.svg"
}

Properties

PropertyTypeDescription
slugstringThe app's address, as in /app/trip-log: lowercase letters, numbers and single hyphens. Once you've published under it, it's yours.
namestring-
tagline?stringOne line, shown under the name.
description?stringShown on the app's page. Blank lines separate paragraphs.
category?| "developer" | "productivity" | "utilities" | "reference" | "health" | "finance" | "games" | "creative" | "other"Defaults to other.
tags?string[]Lowercased, and searchable.
entry?stringThe HTML file the build starts from. Defaults to index.html.
icon?stringA square image in the folder. SVG works best. Without one, the app is shown as the first letter of its name.
private?booleantrue encrypts everything the app stores, in the browser, and asks for a passkey before the app opens. See Store. The first publish decides this, and a later publish that changes it is refused. A private app needs a signed-in user, and can't use host.friends, host.public or a server.js.
shows?objectA sentence for each audience the app writes to, shown as written under the title of Tinylib's sharing sheet and under the audience's switch on the app's page. Without one, the sheet shows its title alone. Changing a sentence asks nobody again. A private app can't give shows a sentence. Example { "shows": { "friends": "Friends can see your best and daily scores." } }
shows.friends?string-
shows.public?string-