Manifest Lifecycle

Universal container management with manifest-driven operations

Manifest Lifecycle

The manifest (.onelift.json) is the identity card, health record, and migration guide for every deployment on the platform. Every lifecycle operation -- deploy, scale, clone, backup, restore, rollback -- consults the manifest as its primary reference.

What the Manifest Provides

The manifest has four sections:

  • Identity -- What is this app? Services, databases, images, ports, routing.
  • State -- Compose/env hashes for drift detection, image digests, current scale, full operation history.
  • Capabilities -- Which services are scalable, cloneable, what backup targets and commands exist.
  • Migration Guide -- Routing mode (domain or port), volume priorities, database dump/restore commands, dependency order.

All 7 deployment sources (cli_push, marketplace, provision, custom_compose, migration, cli_sync, scan) generate a manifest automatically after deployment.

Key Commands

lift scan

Discover all Docker deployments on a server and generate manifests for each.

lift scan

Scans for both Docker Compose projects and standalone containers. Standalone containers are reverse-engineered into compose files for unified management.

Flags:

  • --force -- Regenerate manifests even if .onelift.json already exists
  • --adopt -- Sync discovered tools to the platform (requires auth)
  • --json -- Output scan results as JSON

lift manifest check

Detect drift between the manifest and the actual Docker state.

lift manifest check <tool>

Checks for:

  • Compose file changes since last deploy
  • Environment variable additions/removals
  • Scale mismatches (manifest vs actual replicas)
  • Missing or extra running services

Backup & Restore

Backup archives are self-contained -- they include the manifest, compose file, env, database dumps, and volume data. Restore can rebuild a deployment from the archive alone.

lift backup <tool> --to r2://bucket/path
lift restore <tool> --from r2://bucket/path

Clone (Port-Based Fallback)

Clone automatically detects whether the target server has Traefik. If not, it falls back to port-based routing instead of failing.

lift clone <tool> --target <server>

Full Specification

For the complete technical specification including schema details, test scenarios, and architecture decisions, see the Manifest Lifecycle Spec in the repository.