Tabs & Spaces Developers

Start here

Quickstart

Make a small app, see it in the local harness in a minute, then install it in a real workspace. You need Node 22 or later, and the Tabs & Spaces repository: the developer tools are in it, as yarn tands.

1. Make an app

From the repository's root:

sh
yarn tands new ../team-notes

It makes a folder with a working app and no dependencies:

FileWhat it is
public/tands.jsonThe manifest: a tab, a collection, an action and an event
public/tab.htmlThe tab: it greets whoever opens it and keeps notes for its space
server.jsServes both, and answers the add_note action after checking its token
public/tands-sdk.js, lib/tands-sdk-server.jsThe SDK, built and copied in (it isn't on npm yet)

2. Run it in the harness

Start your app, then the harness, in two terminals:

sh
cd ../team-notes && npm start                        # your app, on http://localhost:5480
yarn tands dev http://localhost:5480/tands.json      # the harness, on http://localhost:5470

Open http://localhost:5470. The harness stands in for a workspace: it shows your tab as someone you choose (their name, the space, the language), signs real tokens, keeps your data in memory, lists the events your app reports, and runs your actions on your server. Change who's looking and choose Open the tab; switch to dark and your tab follows. See Developer tools.

3. Install it in a workspace

When it works in the harness, try it in a real workspace on your machine.

  1. Follow the repository's README to start the development servers. The web app runs at http://localhost:5400.

  2. Installing an app makes the workspace's server fetch its manifest, and a workspace normally refuses addresses on private networks. In apps/api/.env, set APPS_PRIVATE_NETWORKS=true, then restart the API.

  3. Restart your app so it checks tokens with the workspace's keys:

    sh
    WORKSPACE_URL=http://localhost:5400 npm start
  4. As an owner or admin, open Settings → Apps, paste http://localhost:5480/tands.json, choose Check, then Install.

  5. In any space, choose + (Add tab) → Custom tab → Notes.

Ask an agent to add a note ("@Tabby add a note: lunch on Friday?"), and it uses your action, asking you first. Make a trigger in a Tasks tab on your note_added event, and a note starts a task.

4. Read the code

The Hello example, at examples/hello-app, does the same things without the SDK: its page speaks the frame protocol directly.