Manifest Lifecycle

5-minute read

In Plain English

A manifest is like a recipe for your AI app. Just as a recipe lists ingredients, quantities, and cooking steps, a manifest tells Thumper-Run what to install, which models to download, and how to launch the app.

You write the recipe once. Thumper-Run follows it on every device — handling GPU differences, model downloads, and platform quirks automatically.

How It Works

A manifest flows through five stages from authoring to running.

1. Authoring

A developer writes a YAML manifest describing the app, its models, and GPU patches. This can be done by hand or generated by the Thumper AI assistant.

2. Validation

When the manifest is submitted to the catalog (or loaded locally), Thumper-Run validates all required fields, checks that model references resolve, and verifies the schema version.

3. Resolution

At install time, the resolver expands pack_refs into concrete model lists, selects VRAM-appropriate model variants, and builds a download plan.

4. Installation

The install pipeline clones the app repo, creates a venv (or pulls a Docker image), downloads models with resume support, and applies GPU-conditional patches.

5. Launch

At launch, the manifest drives process spawning: entry point, port, environment variables, health-check polling, and WebView or browser opening.

Minimal Manifest

yaml
thumper: 1
id: hello-world
name: Hello World
version: 1.0.0
description: A minimal demo app
author: you
type: app
runtime:
type: python
entry: app.py
port: 8080

Three Manifest Types

Beta

Thumper-Run uses three kinds of manifests, each with a distinct purpose.

TypeFilePurposeWho Writes It
App.thumper.yamlDescribes how to install, configure, and launch an applicationApp developers
Model.model.yamlDescribes a single model weight file (identity, format, source)Model developers
Pack.pack.yamlBundles multiple models into an installable unitModel or app developers
Most users never write a manifest. They install apps from the catalog with one click. Manifests are primarily for developers who want to add new apps or model packs.

Why It Matters

  • Reproducible Installs — Same manifest, same result on every device. No “works on my machine” problems.
  • Cross-Platform — One manifest handles Linux, macOS, and Windows with GPU-conditional patches.
  • Composable — App manifests reference pack manifests, which reference model manifests. Mix and match.
  • Version Controlled — Manifests are plain YAML files that live in Git. Review, diff, and roll back changes.
  • AI Assistable — The Thumper AI agent can generate and validate manifests from natural-language descriptions.

Manifest Validation Errors

When a manifest fails validation, Thumper-Run reports a specific error. Here are the most common ones:

ErrorCauseFix
MissingField("id")Required field missing from YAMLAdd the missing field to the manifest
ParseErrorInvalid YAML syntaxCheck indentation and quoting; use a YAML linter
BrokenRef("pack_id")pack_refs references a pack that doesn’t existCheck the pack ID matches an existing .pack.yaml
UnsupportedSchemaSchema version not recognized (e.g., v1 after v2 migration)Update schema field to thumper-model/v2 or thumper-pack/v2
InvalidKindModel kind not in the 20 recognized variantsUse a valid kind: checkpoint, lora, vae, text-encoder, etc.
DuplicateIdTwo models/packs share the same IDEnsure each manifest has a unique id field
HashMismatchDownloaded file SHA-256 doesn’t match manifestRe-download the file or update the sha256 field
MissingRuntimeApp manifest has no runtime sectionAdd runtime.type (python, node, native, docker)

Lifecycle State Machine

A manifest moves through five states from creation to publication:

Draft --> Validated --> Submitted --> Reviewed --> Published
| | | |
v v v v
(edit) (auto-check) (queue for (approve/
pass/fail review) reject)

State Descriptions

  • Draft — Author is editing. Can be modified freely.
  • Validated — Automated checks passed (schema, references, model URLs). Ready for submission.
  • Submitted — Entered the review queue. Author cannot edit until review is complete.
  • Reviewed — A maintainer has approved or requested changes. If rejected, returns to Draft.
  • Published — Visible in the catalog. Users can install it.
Local manifests (not submitted to the catalog) skip the Submitted/Reviewed states. They go directly from Validated to usable.

Best Practices

  • Pin model versions — Always specify an exact model version or SHA-256 hash. "latest" tags can break installs when upstream models change.
  • Document GPU patches — Add comments in the YAML explaining why each GPU-conditional patch exists. Future maintainers (including you) will thank you.
  • Test on multiple platforms — GPU patches, path separators, and permissions differ across Linux/macOS/Windows. Test at least two.
  • Use pack_refs for shared models — If multiple apps use the same model (e.g., SDXL base), reference a shared pack instead of duplicating the model definition.
  • Keep manifests in version control — Manifests are plain YAML. Store them in Git alongside the app code for full traceability.
  • Validate before submitting — Run the validation agent tool locally to catch errors before the review queue.

Deep Dive

For the complete field-by-field reference, see the Manifest Field Reference page. For hands-on tutorials, try building an app manifest or creating a model pack.

The manifest system is implemented in Rust with strict validation at every stage. Invalid manifests fail loudly with specific error messages rather than silently misbehaving.

Key Takeaways

  • A manifest is a YAML recipe that tells Thumper-Run how to install and run an app
  • Three types: app (.thumper.yaml), model (.model.yaml), pack (.pack.yaml)
  • Manifests flow through 5 stages: authoring → validation → resolution → installation → launch
  • GPU-conditional patches let one manifest work across all hardware
  • Most users never write manifests — they install from the catalog
  • Manifests are plain YAML files that can be version-controlled in Git