Skip to main content

margot

margot is a developer CLI for building and publishing Margo application packages as OCI artifacts. It handles packaging, tagging, and pushing/pulling to any OCI-compliant registry.

Documentation · PyPI

Install

From PyPI

pip install margo-tooling

Or with uv:

uv tool install margo-tooling

Or with pipx:

pipx install margo-tooling

With a container

Every release publishes a container image to GHCR. Mount your project directory into /workspace:

podman run --rm -v "$PWD":/workspace ghcr.io/karnarokepoch/margot:latest --help

Pin to a specific version instead of latest for reproducible builds, e.g. ghcr.io/karnarokepoch/margot:1.0.0.

From source

git clone https://github.com/karnarokEpoch/margot.git
cd margot
uv sync

Usage

$ margot --help

 Usage: margot [OPTIONS] COMMAND [ARGS]...

 Margo application package developer CLI.

╭─ Options ────────────────────────────────────────────────────────────────────╮
│ --version             -V        Print version and exit.                     │
│ --verbose             -v        Enable verbose output (step-level info).     │
│ --debug               -d        Enable debug output (infra-level detail,     │
│                                  implies --verbose).                         │
│ --install-completion            Install completion for the current shell.    │
│ --show-completion                Show completion for the current shell, to  │
│                                  copy it or customize the installation.      │
│ --help                -h        Show this message and exit.                 │
╰────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ─────────────────────────────────────────────────────────────────────╮
│ fetch     Fetch and display the manifest of an OCI artifact.                  │
│ build     Build Margo application package types locally.                     │
│ push      Push built Margo application artifacts to an OCI registry.         │
│ pull      Pull OCI artifact layers to a local directory.                     │
│ verify    Validate the Margo application description against the Margo spec │
│           schema.                                                            │
│ describe  Describe a Margo application description in rich, structured      │
│           output.                                                           │
│ auth      Manage OCI registry credentials.                                  │
╰────────────────────────────────────────────────────────────────────────────────╯

A minimal project

A Margo project is described by a margo.yaml file at the project root:

nginx-helm/
├── margo.yaml
└── margo/
    └── app.yaml.jinja
# margo.yaml
apiVersion: v1
id: com-example-nginx
name: nginx
version: "1.0.0"
appVersion: "1.27.0"
description: "NGINX web server deployed via Helm chart"
repository: public.ecr.aws/g2n4p2m7/margo

Validate the application description

margot verify

Validates app.yaml (or app.yaml.jinja, rendered on the fly) against the upstream Margo spec schema — no network access, no prior build required.

Inspect it visually

margot describe

Renders the descriptor as structured panels and trees: identity, deployment profiles, configuration (settings, schemas, parameters), and extensions.

Build and push

margot build
margot push

build renders the descriptor and stages it under build_dir. push publishes the artifact via ORAS to the registry declared in margo.yaml, tagged with version:

public.ecr.aws/g2n4p2m7/margo:1.0.0

Log in first if the registry requires auth:

margot auth login

Pull and inspect a published artifact

margot pull public.ecr.aws/g2n4p2m7/margo:1.0.0 --output ./out
margot fetch public.ecr.aws/g2n4p2m7/margo:1.0.0

pull writes the artifact's layers to disk as-is (no extraction). fetch prints the raw manifest JSON for a quick remote inspection, without pulling anything.

Shell completion

Enable shell tab completion for margot commands and flags:

# Quick setup — appends to your shell's rc file directly
margot --install-completion

# Manual setup — prints the script; redirect it wherever you source completions from
margot --show-completion bash > ~/.local/share/bash-completion/completions/margot

Both methods require a shell restart or re-sourcing the rc file to take effect. --show-completion takes a shell argument (bash, zsh, fish, powershell, or pwsh) and prints the completion script to stdout.

--install-completion has no --path option — it always appends to the shell's default rc file (e.g. ~/.bashrc). If you curate your own rc includes rather than a raw rc append, use --show-completion instead and redirect the output to your preferred location.

Learn more

  • Documentation — full command reference, margo.yaml reference, and worked examples (Helm, Compose, Quadlet, multi-component).
  • FEATURES.md — authoritative spec: architecture, commands, OCI media types, config, error handling.
  • CONTRIBUTING.md — development setup, testing, release process.
  • CODE_OF_CONDUCT.md — community standards.

License

Apache License 2.0

Metadata

Release files for margo-tooling 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for margo-tooling 0.8.0
File Size Uploaded
margo_tooling-0.8.0.tar.gz 314.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for margo-tooling 0.8.0
File Interpreter ABI Platform
margo_tooling-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 403.0 kB

Release files / margo_tooling-0.8.0.tar.gz

Download URL margo_tooling-0.8.0.tar.gz
Size 314.5 kB
Tags Source
SHA-256 checksum
How to use checksums
275db05f500bcbab2150e62fcd52768f9a547194cd3a17084fe04fde3a0fa6cb
BLAKE2b-256 checksum
How to use checksums
a5b3b9967c8ef399fbd6924c91c0adf4e3ca6e51a602166cb5113eb5f2722b5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Release files / margo_tooling-0.8.0-py3-none-any.whl

Download URL margo_tooling-0.8.0-py3-none-any.whl
Size 88.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
016a80fecff64e1c053bb2549cce8450afddbc82f3c03163a4b916242a6ea4c7
BLAKE2b-256 checksum
How to use checksums
fe78325d853b2764659f661c36ffe1fd73c2021130598f31dde5a46249bdb8f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.0

2 release files

This release

0.8.0 This release

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page