Skip to content

Development

Judah Paul edited this page Jul 15, 2026 · 5 revisions

Development

Local loop

The development compose profile runs the SvelteKit dev server with hot reload against an ArduPilot SITL container:

docker compose --profile development up -d

The app is served at http://localhost:5173. The SITL container exposes MAVLink on TCP 5760, and src/lib/server/mavlink.ts connects to it at sitl:5760 in development.

The published host ports are overridable for a machine that already uses a default. Set APP_DEV_PORT, SITL_PORT, or APP_PORT in a root .env (see .env.example); for example APP_DEV_PORT=5174 serves the dev app on 5174.

SITL vehicles

The development SITL image builds the ArduPilot copter, rover, plane, and sub binaries, so SITL_VEHICLE and SITL_MODEL select which one the same profile flies. PX4, Betaflight, and INAV each have their own profile. The dashboard controls adapt to the connected vehicle: a submarine gets a depth control, a rover and boat drop the vertical control, and air vehicles keep altitude.

Vehicle class Firmware Command
Multirotor ArduCopter docker compose --profile development up -d
Ground rover ArduRover SITL_VEHICLE=Rover SITL_MODEL=rover docker compose --profile development up -d
Surface boat ArduRover SITL_VEHICLE=Rover SITL_MODEL=motorboat docker compose --profile development up -d
Fixed wing ArduPlane SITL_VEHICLE=ArduPlane SITL_MODEL=plane docker compose --profile development up -d
Submarine ArduSub SITL_VEHICLE=ArduSub SITL_MODEL=vectored docker compose --profile development up -d
Multirotor PX4 docker compose --profile development-px4 up -d
Multirotor Betaflight docker compose --profile development-betaflight up -d
Multirotor INAV docker compose --profile development-inav up -d

The ArduPilot and PX4 profiles serve MAVLink on TCP 5760; the Betaflight and INAV profiles serve MSP on TCP 5761. All dev profiles share the one canarygc_app container, so stop one profile before starting another (docker compose --profile <name> down).

To exercise the built production server locally:

docker compose --profile production up -d app webrtc

The app is served at http://localhost:3000.

Gates

Run these from compose/svelte-kit before committing. They mirror the CI check job (see Deployment):

npm run lint      # eslint
npm run check     # svelte-check
npm run build     # production build
npm audit --audit-level=moderate

Front end

The app is Svelte 5 with runes ($state, $derived, $effect, $props, $bindable) and {@render children()}. Shared client logic lives in src/lib and shared state in src/stores. Modals and notifications are created through src/lib/overlays.ts (showModal, notify), which mounts and unmounts the component, rather than instantiating modal components by hand.

Versioning

The version is the latest v[0-9]* git tag. The release job bumps it from commit subject markers, so tag commits accordingly:

  • No marker: patch bump. Docs, fixes, polish.
  • [minor update]: minor bump. New features or surface area.
  • [major update]: major bump. Breaking changes.

The /version page reports the running build's tag, commit, and build time.

Clone this wiki locally