Skip to article
Public docs

Shiplet documentation

Publish on managed hosting, review safely, revise portable packages, and understand exactly where code runs and who owns it.

Browse documentation
Core concepts

Packages and revisions

Understand Shiplet's portable package, immutable revision, deployment, and state model.

A Shiplet is a portable application with a stable collaborative identity. Code and configuration travel in a kernel-authority-free package; the trusted kernel keeps its credentials, grants, and runtime data outside it. Authored files are not automatically secret-scanned.

Safe change lifecycle

Fork → edit → validate → preview → promote → deploy.

Validation never changes the active revision. Rollback activates an earlier known-good package through a new audited operation; it does not rewind runtime state. Export copies code and schema, never Shiplet credentials, grants, state, feedback, or audit history.

Use this lifecycle whether the final target stays on Shiplet-managed hosting or moves to customer-owned infrastructure.

The domain model

ObjectMeaning
ShipletLogical collaborative object with the stable ID, URL, access, feedback, and revision history.
PackagePortable application definition containing code, schemas, instructions, validation, and provenance.
DraftMutable isolated working copy with a base revision and optimistic version.
RevisionImmutable validated package snapshot with digest and parent lineage.
Deployment targetDestination and ownership boundary: managed, customer Cloudflare, temporary claim, or detached.
DeploymentOne revision installed on one target.
State namespaceRuntime data scoped to a Shiplet and deployment or active MCP revision; never package content.

Package v1 layout

shiplet.json
artifact/**
widget/**
workflow/schema.json
mcp/manifest.json
mcp/handlers/**
AGENTS.md
validation/manifest.json
provenance.json

The transport media type is application/vnd.shiplet.package+json;version=1. The manifest uses shiplet.package/v1 and shiplet.runtime/v1:

{
  "schemaVersion": "shiplet.package/v1",
  "runtimeCompatibility": "shiplet.runtime/v1",
  "entrypoints": {
    "artifact": "artifact/index.html",
    "widget": "widget/index.html",
    "workflow": "workflow/schema.json",
    "mcp": "mcp/manifest.json",
    "agentInstructions": "AGENTS.md",
    "validation": "validation/manifest.json",
    "provenance": "provenance.json"
  },
  "requestedCapabilities": [],
  "limits": { "fileCount": 32, "fileBytes": 16384, "packageBytes": 65536 },
  "staticFirst": true
}

Every file record includes its POSIX-relative path, media type, utf8 or base64 encoding, content, decoded-byte digest, and size. The deterministic envelope has exactly mediaType, manifest, and files at its root. Absolute paths, dot segments, backslashes, control characters, reserved names, and normalization collisions are rejected.

The source-checkout CLI accepts at most 1,024 files, 4 MiB per file, and a 32 MiB package envelope. Declaring higher manifest limits does not raise these ceilings. The package digest changes when any artifact, widget, workflow, MCP handler, instruction, validation, or provenance byte changes.

Code is not authority

Requested capabilities are declarations, never grants. Shiplet never adds kernel-owned credentials, access grants, sessions, OAuth connections, claims, deployments, customer state, private runtime state, or audit history to a portable package.

The validator rejects forbidden authority fields and roots, but it does not secret-scan arbitrary package file contents. Authors must remove secrets placed inside code or content before sharing it. A fork copies code and schema, not state or access.

Immutable change flow

active revision
  -> fork isolated draft
  -> pull, change, diff, and push
  -> validate exact draft version
  -> preview the sealed revision while the active tenant stays unchanged
  -> promote with expected active revision
  -> optionally deploy to explicit targets

Validation does not activate. Failed validation, deployment, or stale promotion leaves the prior active revision unchanged. Rollback activates a prior package through a new audited operation; it does not rewind state.

Next: follow the CLI lifecycle, add package extensions, or review security and isolation.