podspawnpodspawn

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 init

Answer 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]

Start developing

podspawn dev

The generated podfile.yaml is ready to use immediately.

How detection works

Podspawn looks for marker files in the current directory:

Marker filesTemplatePriorityMatch
go.mod, go.sumgo10any
package.jsonnode10any
pyproject.toml, setup.py, requirements.txtpython10any
Cargo.tomlrust10any
go.mod + package.jsonfullstack20all
(none)minimal0

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 -y

Forcing a template

Skip detection entirely:

podspawn init --template python

Template previews

extends: ubuntu-dev
packages: [go@1.24, make]
on_create: go mod download
extends: ubuntu-dev
packages: [nodejs@22]
ports:
  expose: [3000]
on_create: npm install
extends: ubuntu-dev
packages: [python@3.13]
on_create: |
  pip install uv
  uv sync
extends: ubuntu-dev
packages: [rust]
on_create: cargo fetch
extends: ubuntu-dev
packages: [go@1.24, nodejs@22, make]
ports:
  expose: [3000, 8080]
on_create: |
  go mod download
  npm install
base: 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 --update

This 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?

On this page