Skip to content

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's manifest.json file. To remove all members from an app, set members to an empty array [].

PropertyTypeDescription
namestringApp name. Required by the API on update.
descriptionstring | nullApp description.
urlstringApp URL.
iconGenerator{ gradientId; symbolId }Icon recipe — the server renders the icon from a gradient + a symbol (see below).
membersHailerMember[] / id listUsers/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 (_id absent) calls v3.app.create with name, description, url, iconGenerator, then applies members.
  • Update calls v3.app.update with name, description, url, iconGenerator, and reconciles members via v3.app.member.add / .remove.

Command

ws-config apps push — creates, updates, and deletes apps (deletions snapshot-guarded, prompt unless --force).

Hailer Developer Documentation