A Go-based reimplementation of the Puppet Development Kit (PDK), built to be fast, self-contained, and free of Ruby runtime dependencies.
PDK has been an essential tool for Puppet module authors for years. When Perforce moved PDK to a closed-source model, it created a real problem for teams and individuals who depend on open tooling for their workflows. On top of that, PDK carries a heavy Ruby runtime footprint, which adds friction to CI environments and developer machines alike.
jig aims to replace the parts of PDK that matter most: scaffolding new modules, building module packages, and cutting releases. It ships as a single static binary with no external runtime required.
- Scaffolding:
jig newgenerates modules, classes, defined types, facts, functions, providers, tasks, tests, and transports. Use--skip-interviewto scaffold non-interactively. - Templates: override the built-in templates locally, pull templates from
remote repositories, and inspect them with
jig templates dumpandjig templates resolve. - Module lifecycle:
jig renewrefreshes a module against its templates, andjig convertbrings existing modules under jig management. - Build & release:
jig buildpackages a module andjig releasepublishes it to the Puppet Forge. - Quality checks:
jig validateruns static checks andjig test unitruns unit tests. - Fleet management:
jig msynckeeps many modules in sync.
Requires Go 1.21 or later.
git clone https://github.com/voxpupuli/jig.git
cd jig
go build -o jig .Move the resulting binary somewhere in your $PATH:
mv jig /usr/local/bin/No other dependencies or runtimes needed.
# Scaffold a new module (interactive interview)
jig new module mymodule
cd mymodule
# Generate a class inside it
jig new class myclass
# Run checks and tests
jig validate
jig test unit
# Build and publish to the Puppet Forge
jig build
jig release --version 1.0.0Full documentation lives in docs/:
- Commands — every subcommand:
new,renew,convert,templates,build,release,validate,test,msync - User configuration (
config.toml) — Forge credentials, interview defaults, environment variables - Per-module configuration (
jig.toml) — template source, renew allowlist, build packaging rules - Custom templates — overriding the embedded templates from a directory or a remote git repository
- Running through voxbox — running the Ruby-backed commands in a container instead of a host Ruby toolchain
- Upgrading to 2.0 — what changed from jig 1.x and how to migrate modules and custom template directories
- Gotchas and migration notes — surprising behaviors, and notes for users coming from jig 1.x or PDK
Contributions are welcome. The project is in early stages, so the best place to start is by opening an issue to discuss what you want to work on before sending a PR. See the contributing guide for project layout, testing conventions, git hooks, and design notes.
Some default template files included in this project are derived from the pdk-templates project, copyright Puppet Labs, and are used under the terms of the Apache License, Version 2.0.
See LICENSE.