• English
  • Shipplane Lite

    Turn the shell scripts you run by hand into workflows you can watch, re-run, and read the logs from. One binary, your own machine, no database to set up.

    A workflow

    Provisioning a fresh VPS, in your config file:

    import { workflow } from "@shipplane/core";
    
    const ssh = {
      ssh_host: "203.0.113.10",
      ssh_port: 22,
      ssh_user: "root",
      ssh_private_key: "/home/me/.ssh/id_ed25519",
    };
    
    export const provision = workflow("provision-web-01")
      .task("docker", {
        type: "@shipplane/remote_cmd",
        params: {
          ...ssh,
          cmd: `
            curl -fsSL https://get.docker.com -o get-docker.sh
            sh get-docker.sh
            docker --version
          `,
        },
      })
      .task("dokploy", {
        type: "@shipplane/remote_cmd",
        dependsOn: ["docker"],
        params: {
          ...ssh,
          cmd: `
            curl -sSL https://dokploy.com/install.sh -o install-dokploy.sh
            sh install-dokploy.sh
          `,
        },
      });

    cmd is passed to the remote shell as-is, so a template literal keeps a multi-step command readable. Leading indentation is ignored by the shell.

    Start shipplane-lite serve and that workflow is a graph in the UI. Run it, and each box turns green as it finishes, with the remote output streaming underneath. A step that exits non-zero stops the run and shows you which one — no scrolling back through terminal history to find where it broke.

    One workflow per host, committed to git, and every box you own has a setup you can read and re-run.

    Who it's for

    One person running their own machines. Deploying a side project, provisioning a VPS, or any multistep process where "did that actually work?" is a question you have asked out loud.

    Not built for teams operating a fleet — there are no users, roles, or audit logs.

    What Lite does not do

    • Schedule runs. You start a run from the UI, the CLI, or the HTTP API. For a schedule, call the CLI from cron or a systemd timer.
    • Send notifications. Check results in the UI, or use the CLI's exit code to trigger your own alert.
    • Track desired state. Lite runs the commands you give it. Re-running does whatever your script does, so write idempotent steps.

    What's inside

    Shipplane Lite (@shipplane/liteapp) wires together the Shipplane workflow packages into one deployable app:

    • @shipplane/core runs the workflow graph, deciding task order from dependsOn and handling retries, timeouts, cancellation, and logs.
    • @shipplane/orchestrator dispatches each task to an in-memory worker.
    • @shipplane/visualizer-react renders the workflow graph and editor in the built-in UI.
    • An HTTP server exposes a JSON API and serves the UI.
    • A CLI runs workflows and streams logs from the terminal using the same binary.
    • SQLite (better-sqlite3) stores workflow definitions, runs, and events.
    • A task registry provides two built-in task types and supports custom types through the config file.
    • Lite sends no telemetry. Workflow definitions, runs, and logs remain in your local SQLite file.

    Next steps

    • Installation — install the binary and start the server.
    • Configuration — HTTP host and port, config file, and workflow seeding.
    • CLI — run workflows and follow logs from the terminal.
    • HTTP API — the JSON API behind the UI.
    • Registry — the two built-in task types and how to add your own.