Arcane Templates
Arcane Docker Compose templates maintained by Heretek AI. Add the registry in Arcane's template settings:
https://raw.githubusercontent.com/Heretek-AI/arcane-repo/main/registry.json
Templates
| Template | Description |
|---|---|
| codeg | Multi-agent coding workspace (Claude Code, Codex, Gemini CLI) |
| crawl4ai | Open-source LLM-friendly web crawler & scraper |
| firecrawl | Self-hosted web scraping API for AI agents |
| memos | Self-evolving memory OS for LLMs & AI agents |
Adding a template
Each template lives in templates/<id>/ (<id> = lowercase letters, digits,
hyphens):
templates/my-app/
├── compose.yaml # the Compose project (this exact name, images only)
├── .env.example # every variable compose.yaml uses without a default
├── template.json # name, description, author, icon_url, tags
└── README.md # deployment notes with a "## Deployment" section
template.json:
{
"name": "My App",
"description": "What it does, in one line.",
"author": "Your name or GitHub handle",
"icon_url": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/my-app.svg",
"tags": ["tools"]
}
Rules (checked by CI on every pull request):
- The compose file is named
compose.yamland uses prebuiltimage:references (nobuild:contexts — Arcane deploys without the upstream source tree). - Every service sets
restart:and carries acom.getarcaneapp.arcane.iconlabel;x-arcane.iconmatchestemplate.json'sicon_url. - Images track
:latest, except stateful services (databases, queues, caches), which keep a major-version tag. - Every
${VAR}without a default is documented in.env.example; secrets and passwords stay empty or use obvious placeholders. - Tags come from
tags.json. docker compose configmust accept the template with.env.exampleas its env file.
Check locally before pushing (needs Python 3 with pyyaml and jsonschema,
plus Docker for the compose check):
pip install pyyaml jsonschema
python3 scripts/build_registry.py validate
How the registry is built
python3 scripts/build_registry.py generate scans templates/ and writes
registry.json in the same format as
https://registry.getarcane.app/registry.json (validated against
schema.json, copied from the official registry).
Do not edit registry.json by hand: CI regenerates and commits it on every
merge to main (.github/workflows/publish.yml). Each entry carries a
content_hash over its source files; the registry version bumps minor on new
templates and patch on changed ones. A version set in template.json
always wins, otherwise the generator assigns 1.0.0 / patch bumps.
URL bases default to this repo's raw content URLs and can be overridden with
PUBLIC_BASE, DOCS_BASE, REGISTRY_URL, and SCHEMA_URL.
Layout
templates/<id>/ one directory per template
tags.json allowed template tags (mirrors the official registry)
scripts/ registry generator + template linter (stdlib + pyyaml)
schema.json registry JSON schema (mirrors the official registry)
registry.json generated by CI, do not edit by hand
review/ local-only upstream sources, never committed