Configuration
HTTP host and port
Set via environment variables, read at startup:
Config file
On startup, Shipplane Lite looks for a config file in:
If XDG_CONFIG_HOME is unset, it falls back to ~/.config/shipplane/. The first matching file (checked in the order .ts, .mjs, .js, .cjs) is loaded and merged over the defaults; the rest are ignored.
The file's default export is an object shaped like:
registry merges one TaskRegistry (built with @shipplane/core's createTaskRegistry()) on top of the built-in 3 task types — see Custom task types.
TypeScript example
workflows entries are plain WorkflowDefinition JSON, so building them with @shipplane/core's workflow() builder gives you type checking and autocomplete. Install core in the config directory:
~/.config/shipplane/lite.config.ts:
The config loader runs your .ts file directly through Node's built-in TypeScript support — there's no bundler resolving imports. If you split your config across files, relative imports need an explicit extension (import { deploy } from "./workflows/deploy.ts", not "./workflows/deploy") or Node will fail to resolve them.
Workflow seeding
Workflows listed under workflows in the config file are upserted into the local database on every startup (matched and updated by workflow id). This is how you check a workflow definition into a config file and have it available without using the editor UI.
Seeding runs unless disabled — see --no-sync below.
Shipplane Lite caps workflows at 10 total, and seeding isn't exempt: a seed entry with a new id counts as a new workflow and is blocked past the cap same as one created through the UI or HTTP API. Only re-seeding an id that already exists updates it in place and doesn't count against the cap.