Developer CLI
packages/cli (@shellaro/cli): no dependencies, Node.js 22.13 or later.
node packages/cli/bin/shellaro.mjs ext <command> # from a Shellaro checkout
cd packages/cli && npm link # then just: shellaro ext <command>
shellaro build works like shellaro ext build (the ext is optional).
create
shellaro ext create my-extension [--template hello-world|command|sidebar|command-pack] [--publisher acme] [--dir path]
| Template | What you get |
|---|---|
hello-world | One palette command that shows a message (ui.commands) |
command | Pick a diagnostic and run it in the active terminal (ui.commands, context.read, terminal.execute) |
sidebar | A sidebar view of sessions by environment, with refresh (ui.sidebar, ui.commands, sessions.read) |
command-pack | pack.json with a command and a runbook with a variable |
lab | A Kubernetes lab: lab.json, scripts/setup.sh that breaks a deployment, a task with a check (labs) |
The id is <publisher>.<name> (publisher defaults to your Windows user name). Code templates include types/shellaro.d.ts and a tsconfig.json, so tsc type-checks the project without installing anything.
dev
Builds, then watches the folder (except dist/, node_modules, .git) and rebuilds on every change; problems are printed, the watcher keeps running. Load the folder once in Shellaro (Settings > Developer) and it reloads after every build.
build
Bundles src/extension.ts (or .js, or src/index.*) into main as one CommonJS file, validates everything, and writes <id>-<version>.shellaro-ext (or --out <file>).
- With Rolldown available (in the project, next to the CLI, or in the working folder) the whole
src/tree and its npm dependencies are bundled;@shellaro/extension-sdkstays external.--minifyminifies. - Without it, a single-file extension that imports only
@shellaro/extension-sdkis converted by stripping its TypeScript types. Anything else asks you to install Rolldown. - Command and Lab Packs have no build step;
buildvalidates and packages them. --sign key.pem --key-id <id>adds an Ed25519 signature (packaging).
Exit code 1 when validation fails.
validate
shellaro ext validate [folder | file.shellaro-ext]: the same checks as Shellaro (manifest, permissions, pack or lab content, ES module output, file integrity for packages). Warnings do not fail.
install
Builds the folder (or takes a package file) and copies it into Shellaro's inbox (%APPDATA%\com.shellaro.app\extensions\inbox, or $SHELLARO_CONFIG_DIR). Shellaro shows the review dialog within a few seconds; nothing is installed until you approve it there. The CLI cannot grant permissions.
publish
shellaro ext publish --index <folder>validates the package, copies it to<folder>/packages/and adds or updates its entry in<folder>/index.json. Serve the folder over https (or share it) and add it in Shellaro as an Index source (sources).--status working|prototype|samplesets the label.- Without
--indexit validates and then reports that remote publishing is not available (exit code 2): there is no public Shellaro Marketplace yet.
keygen
shellaro ext keygen acme-2026 writes acme-2026.pem (keep it secret) and prints the trusted-keys.json entry that makes Shellaro show "Signed by Acme" for packages signed with it.