tucan studio

Docs / User guides

Browse topics
On this page

Extensions

An extension adds something to the studio: menu entries, an editor for a file type, workspace templates, a bundled tool, or an AI provider.

Managing them

Extensions -> Manage extensions... opens the browser. The list on the left is what the registry at tucan.amlang.net offers, plus anything already installed. Click an entry to see its details on the right.

The detail pane shows the description, the id, which platforms it supports, the permissions it asks for, and -- for registry extensions -- a version picker. The button underneath says what it will do:

  • Install -- not installed yet
  • Update to <version> -- a different version is selected
  • Installed (greyed) -- the selected version is the one you have

Uninstall appears only for something actually installed.

Picking an older version in the dropdown and installing gives you that version; the studio fetches that release's file list rather than the latest one.

What ships where

Extensions install into extensions/<id>/ next to the studio binary. A released package deliberately ships no extensions -- you install what you want -- so a fresh install starts with an empty list and fills it from the registry.

Archives are .lha on AmigaOS and MorphOS and .zip elsewhere, which is why installing needs no extra archiver on any platform.

Permissions

An extension declares what it needs -- running commands, reading or writing the workspace, network access -- and the studio shows that in the detail pane before you install. A script that calls something it did not declare is refused at the point of the call, not silently allowed.

Writing one

Everything for building an extension lives in the Extension DevTools extension, under Extensions once it is installed:

  • Create new extension -- scaffolds a folder with a manifest and an example script, and opens it as your workspace
  • Manage extension -- edits the manifest of the extension open in the workspace
  • Build -- assembles dist/, described below
  • My extensions -- what you have published to the registry

The full reference is docs/EXTENSIONS.md, which is copied into every scaffolded extension so it sits next to what you are editing.

The short version: extension.json is the identity (id, name, description) and declares what the extension contributes; version.json is one release (files, permissions, path entries). Scripts are JavaScript with a studio.* bridge for the filesystem, the CLI, HTTP, forms, and AI provider registration.

The folder layout

What an extension ships is decided by where its files sit, not by a list kept somewhere:

my-extension/
  extension.json        the manifest
  shared/               everything platform-independent
  platforms/
    amigaos/            files only AmigaOS gets
    morphos-ppc/
    macos-arm/
  dist/                 produced by Build -- what actually runs

shared/ is for scripts, forms, icons, data: anything that is the same everywhere. platforms/<id>/ is for what is not, which in practice means executables.

What Build does

Build copies the contents of shared/ into dist/, then the contents of platforms/<platform>/ on top, then the manifest. The contents, not the folders themselves: shared/js/app.js becomes dist/js/app.js, and platforms/amigaos/bin/tool becomes dist/bin/tool. Both trees therefore merge into one drawer, which is the drawer a user ends up with.

Platform files are copied second, so where both define the same path the platform's file wins. That is how a shared default gets replaced by a real binary on the platforms that have one.

Which platform it builds for comes from the platforms list on the Platforms tab:

  • none listed -- shared/ is all there is, and Build just uses it
  • one listed -- that one, no questions
  • several -- a window asks which

Once dist/ exists the studio runs your workspace extension from there rather than from the folder you are editing. Menu items then exercise exactly what a user would get, binaries included. The flip side is that an edit does not take effect until you build again.

Build overwrites and never deletes. A file you removed from shared/ stays in dist/ until you clear it out yourself.

A freshly scaffolded extension starts flat, with its manifest and script at the root, and the studio runs it from there. Move the files into shared/ before your first build -- Build looks nowhere else, and on a flat folder it reports that there is nothing to build.

The Manage extension tabs

Info carries what the registry is told -- name, description -- and the permissions, one checkbox each. It is also where you register the extension with the registry. Once it is registered the button becomes Publish new version, which at this stage prints the steps it would take rather than uploading anything.

Platforms is the list above. + adds an id and creates platforms/<id>/ for you. - removes the entry from the manifest and leaves the folder and its files untouched, so nothing you built is ever thrown away by a list edit.

Paths takes one folder per line, relative to the extension root. Those go on the shell path when the extension is installed, which is how a bundled tool becomes runnable by name in the CLI. bin is the usual entry.

From the Tucan Studio documentation: assets/_default/help/extensions.md