Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.altnautica.com/llms.txt

Use this file to discover all available pages before exploring further.

This page takes you from an empty folder to a working plugin installed in Mission Control. No prior ADOS experience required.

What you need

  • Node.js 20+ and pnpm 9+.
  • Python 3.11+ (used by pack.sh).
  • A working Mission Control install (>=0.6.0).
  • A working ADOS Drone Agent if you plan to ship the agent half (>=0.10.0); the rest of this page only needs the GCS half.

1. Get the SDK and templates

The plugin SDK and create-ados-plugin scaffolder live in the altnautica/ADOSExtensions monorepo. The standalone @altnautica/plugin-sdk npm publish lands with the hosted registry; until then the supported workflow is to clone the monorepo and develop your plugin alongside it as a pnpm workspace member.
git clone https://github.com/altnautica/ADOSExtensions.git
cd ADOSExtensions
pnpm install

2. Scaffold

Run the scaffolder against a new folder under extensions/:
node packages/create-ados-plugin/bin/cli.mjs \
  --target extensions/my-first-plugin \
  --id com.example.my-first-plugin \
  --half gcs-only \
  --author "Your Name"
The CLI lays out a minimal plugin:
extensions/my-first-plugin/
├── package.json
├── manifest.yaml
├── README.md
├── locales/en.json
└── gcs/
    ├── package.json
    ├── tsconfig.json
    └── src/plugin.ts
The new gcs/package.json declares @altnautica/plugin-sdk as a workspace:^ dependency so pnpm wires it directly to the in-tree package.
pnpm install

3. Edit the plugin

Open extensions/my-first-plugin/gcs/src/plugin.ts. The starter calls definePlugin from the SDK and shows a one-line greeting:
import { definePlugin } from "@altnautica/plugin-sdk";

definePlugin({
  id: "com.example.my-first-plugin",
  version: "0.1.0",
  async mount(ctx) {
    document.body.textContent = "Hello from a plugin";
  },
});
Change the text. Save.

4. Build

From the plugin folder:
cd extensions/my-first-plugin
pnpm build
This produces gcs/plugin.bundle.js. The build is plain esbuild; no React or Vite required.

5. Pack

From the monorepo root:
./scripts/pack.sh my-first-plugin
pack.sh computes the SHA-256 of every asset, rewrites the placeholders in manifest.yaml, and zips into extensions/my-first-plugin/dist/com.example.my-first-plugin-0.1.0.adosplug.

6. Install

Open Mission Control. Go to Settings -> Plugins and click Install plugin. Drag the .adosplug into the dialog, review the manifest preview, approve the requested permissions, and click Install. The plugin mounts in the FC tab.

What just happened

The host:
  1. Parsed your archive and showed a non-committing manifest preview.
  2. After your consent, unpacked the bundle to a per-user blob URL.
  3. Mounted an <iframe sandbox="allow-scripts"> and loaded your bundle inside it.
  4. Wired the postMessage bridge so your plugin can call back into the host.
  5. Held your plugin’s capabilities in the operator’s Convex profile so they survive reload.
For the deep tour, head to your first plugin.