marketplace/README.md
This directory contains draft templates and CI/CD workflows for listing ZeroClaw on self-hosted PaaS platforms.
coolify/zeroclaw.yaml -> goes to templates/compose/zeroclaw.yaml in their repozeroclaw.svg in their svgs/ directorynext (CRITICAL — they close PRs to other branches)dokploy/blueprints/zeroclaw/ -> goes to blueprints/zeroclaw/ in their repodokploy/meta-entry.json -> merge into root meta.jsonzeroclaw.svg in the blueprint foldermainlatest tag)easypanel/ -> goes to templates/zeroclaw/ in their repometa.yaml (metadata + schema), index.ts (generator logic), assets/logo.svgmainlatest) and TypeScript generatornpm run build and npm run prettier before submittingapps/tauri/icons/icon.svg to .github/assets/zeroclaw.svg:
bash cp apps/tauri/icons/icon.svg .github/assets/zeroclaw.svg git add .github/assets/zeroclaw.svg && git commit -m "chore: add SVG logo for marketplace templates" zeroclaw-labs org:
- Fork coollabsio/coolify -> zeroclaw-labs/coolify
- Fork Dokploy/templates -> zeroclaw-labs/templates
- Fork easypanel-io/templates -> zeroclaw-labs/easypanel-templatesMARKETPLACE_PAT) with repo + workflow scopes
that can push to the forks and create PRs on the upstream reposMARKETPLACE_PAT to the zeroclaw-labs/zeroclaw repo secretsCopy sync-marketplace-templates.yml to .github/workflows/ in the zeroclaw repo.
Add this job to release-stable-manual.yml (after the docker job):
marketplace:
name: Sync Marketplace Templates
needs: [validate, docker]
if: ${{ !cancelled() && needs.docker.result == 'success' }}
uses: ./.github/workflows/sync-marketplace-templates.yml
with:
release_tag: ${{ needs.validate.outputs.tag }}
secrets: inherit
And this to release-beta-on-push.yml (optional — only if you want beta syncs):
marketplace:
name: Sync Marketplace Templates
needs: [version, docker]
if: ${{ !cancelled() && needs.docker.result == 'success' }}
uses: ./.github/workflows/sync-marketplace-templates.yml
with:
release_tag: ${{ needs.version.outputs.tag }}
secrets: inherit
For the first listing, submit PRs manually:
Coolify:
next)templates/compose/zeroclaw.yaml and svgs/zeroclaw.svgcoollabsio/coolify targeting nextDokploy:
main)blueprints/zeroclaw/ with all 3 filesmeta.jsonnode dedupe-and-sort-meta.jsDokploy/templates targeting mainEasyPanel:
main)templates/zeroclaw/ with meta.yaml, index.ts, and assets/logo.svgnpm ci && npm run build && npm run prettiernpm run dev (opens a templates playground)easypanel-io/templates targeting mainOnce the initial PRs are merged:
sync-marketplace-templates.yml firesCoolify uses :latest tag so users get updates automatically on redeploy.
Dokploy requires pinned versions — workflow updates the image tag + meta.json each release.
EasyPanel requires pinned versions — workflow updates meta.yaml default image + changelog each release.
marketplace/
├── README.md # This file
├── sync-marketplace-templates.yml # CI/CD workflow -> .github/workflows/
├── coolify/
│ └── zeroclaw.yaml # -> coollabsio/coolify templates/compose/
├── dokploy/
│ ├── meta-entry.json # -> merge into Dokploy/templates meta.json
│ └── blueprints/zeroclaw/
│ ├── docker-compose.yml # -> Dokploy/templates blueprints/zeroclaw/
│ └── template.toml # -> Dokploy/templates blueprints/zeroclaw/
└── easypanel/
├── meta.yaml # -> easypanel-io/templates templates/zeroclaw/
├── index.ts # -> easypanel-io/templates templates/zeroclaw/
└── assets/ # -> easypanel-io/templates templates/zeroclaw/assets/
└── (logo.svg goes here)