Scaffolding with podspawn init
Auto-detect your project type and generate a starter Podfile.
podspawn init scans your project directory, detects the language and framework, and generates a podfile.yaml with sensible defaults.
Basic usage
Run init in your project
cd your-project
podspawn initAnswer the prompts
Podspawn detects your project type and asks a few questions:
Detected: Go project (go.mod found)
Base image? [ubuntu:24.04]
Packages? [go@1.24, make]
Add services? (postgres/redis/none) [none]
Expose ports? [8080]How detection works
Podspawn looks for marker files in the current directory:
| Marker files | Template | Priority | Match |
|---|---|---|---|
go.mod, go.sum | go | 10 | any |
package.json | node | 10 | any |
pyproject.toml, setup.py, requirements.txt | python | 10 | any |
Cargo.toml | rust | 10 | any |
go.mod + package.json | fullstack | 20 | all |
| (none) | minimal | 0 | — |
Higher priority wins. Templates marked "any" trigger when any listed file exists. The fullstack template requires all markers present.
Skipping the wizard
Accept all defaults without prompting:
podspawn init -yForcing a template
Skip detection entirely:
podspawn init --template pythonTemplate previews
extends: ubuntu-dev
packages: [go@1.24, make]
on_create: go mod downloadextends: ubuntu-dev
packages: [nodejs@22]
ports:
expose: [3000]
on_create: npm installextends: ubuntu-dev
packages: [python@3.13]
on_create: |
pip install uv
uv syncextends: ubuntu-dev
packages: [rust]
on_create: cargo fetchextends: ubuntu-dev
packages: [go@1.24, nodejs@22, make]
ports:
expose: [3000, 8080]
on_create: |
go mod download
npm installbase: ubuntu:24.04
packages: [git, curl]Fetching latest templates
Templates ship embedded in the podspawn binary, but you can fetch the latest from the community registry:
podspawn init --updateThis downloads the latest registry.yaml and all templates, caching them at ~/.podspawn/cache/podfiles/. Cached templates take precedence over the embedded ones.
What gets generated
The output is a standard podfile.yaml at the project root. It's fully editable -- the generated file is a starting point, not a black box.
Templates that use extends: inherit common packages from a base. You can remove the extends line and inline everything if you prefer a self-contained file.
How is this guide?