HarborHarbor
DocumentationGuidesPlugins
Get Started

Your first App (Beta)

Publish a small Harbor App with deployApp and open it through inspect.

Beta

Apps are in beta. Use the deployApp authoring global with hrbr inspect or hrbr exec; do not add legacy Orbit package imports to new examples.

A Harbor App is a small HTTP surface backed by Harbor execution. Start with one route, publish it, then inspect the opened URL.

Declare the app

hello.app.ts
deployApp({
  id: "helloApp",
  title: "Hello App",
  access: "workspace_member",
  routes: {
    "GET /": {
      async run() {
        return {
          status: 200,
          headers: { "content-type": "text/html; charset=utf-8" },
          body: "<h1>Hello from Harbor</h1>",
        }
      },
    },
  },
})

Publish

hrbr inspect -f ./hello.app.ts

Use hrbr exec -f ./hello.app.ts when you want the publish action wrapped in a normal execution run.

Open and inspect

hrbr inspect 'return await hrbr.apps.open({ name: "hello-app" })'
hrbr inspect 'return await hrbr.apps.inspect({ name: "hello-app" })'

The hosted dashboard shows app activity and invocation records.

Public routes

Use access: "public" only for routes that are collect-only or read-only. Keep workspace-writing actions behind workspace-member access or a separate private Function.