Appearance
Apps
Workspace apps live in workspace/apps.ts, exported as an array of HailerAppUpdatePayload. Push them with ws-config apps push.
typescript
import { WorkspaceMembers, WorkspaceTeams } from "./enums";
export const apps: HailerAppUpdatePayload[] = [
{
_id: "b0a1...",
name: "Sales Dashboard",
description: "Custom dashboard for the sales team",
url: "https://dashboard.example.com",
iconGenerator: { gradientId: "blue-purple", symbolId: "chart-column" },
members: [WorkspaceTeams.Sales_abc, WorkspaceMembers.John_Doe_c19],
},
{ name: "Ops Tool", url: "https://ops.example.com" }, // new — no _id → created
];Properties
Only five properties round-trip. The SDK's header comment in apps.ts spells out the rules:
When creating a new app, don't set
_id— it will be assigned by Hailer. Configuration fields can be added and edited only via the app'smanifest.jsonfile. To remove all members from an app, setmembersto an empty array[].
| Property | Type | Description |
|---|---|---|
name | string | App name. Required by the API on update. |
description | string | null | App description. |
url | string | App URL. |
iconGenerator | { gradientId; symbolId } | Icon recipe — the server renders the icon from a gradient + a symbol (see below). |
members | HailerMember[] / id list | Users/teams/groups with access. Set [] to remove everyone. |
Read-only / never sent (stripped before push): _id (matching only), cid, uid, created, updated, packageHash, config, enabled, allowedUrls, isProductVersionAvailable, type, the server-rendered icon / iconBadge, and the deprecated image. In particular, config is managed through the app's manifest.json, not here, and enabled is not controlled from the SDK.
App icons (iconGenerator)
Icons are generated server-side from a recipe: a background gradientId plus a glyph symbolId. The rendered icon/iconBadge files are read-only and stripped on pull — you only set the recipe. If you omit iconGenerator when creating an app, the server picks a random recipe.
gradientId — one of: blue-purple, purple-pink, pink-orange, orange-amber, teal-blue, indigo-purple, red-pink, sky-indigo, cyan-green, amber-red, lime-teal, slate-blue.
symbolId — a Lucide glyph id, one of: chart-column, chart-spline, chart-pie, database, square-function, file, folder, notebook, book-open-text, list-checks, calendar-clock, wrench, cable, microscope, telescope, zap, globe, key-round, key-square, mail, info, music-4, shopping-cart, home, factory, briefcase, rocket, truck, ship, sailboat, ship-wheel, traffic-cone, ghost, panda, rat, leaf, sprout, flame, droplet, rainbow, umbrella, beer, utensils, carrot, chef-hat, heart, sparkles, wand-sparkles, crown, gem, target, puzzle, spade, shield, life-buoy.
The AppIconGradientId / AppIconSymbolId union types in hailer.d.ts enforce these at author time, so your editor autocompletes and type-checks them. They mirror the live v3.app.icon.options endpoint.
How create & update work
- Create (
_idabsent) callsv3.app.createwithname,description,url,iconGenerator, then appliesmembers. - Update calls
v3.app.updatewithname,description,url,iconGenerator, and reconcilesmembersviav3.app.member.add/.remove.
Command
ws-config apps push — creates, updates, and deletes apps (deletions snapshot-guarded, prompt unless --force).