Packer is a tool for creating identical machine images for multiple platforms from a single source configuration.
Go CSS HTML Shell JavaScript Ruby Other
Latest commit 64b4edc Mar 24, 2017 @mwhooker mwhooker committed on GitHub Merge pull request #4712 from mitchellh/doctypo
website/docs: fix typo
Failed to load latest commit information.
.github Clearified how to specify version when reporting issues Aug 25, 2016
builder builder/amazon-chroot: nullable copy_files Mar 24, 2017
command display version correctly Mar 16, 2017
common builder/virtualbox: retry removing floppy controller Mar 24, 2017
communicator communicator/ssh: fix nil ptr error Mar 20, 2017
contrib Changed Service Principal Creation sequence to comply with newer CLI … Nov 8, 2016
examples/azure azure: Use a more long term image sku Feb 24, 2017
fix builder/amazon: Change shutdown_behaviour to shutdown_behavior Dec 14, 2016
helper Revert "Use SSH agent when enabled for bastion step" Feb 27, 2017
packer Use bufio.Scanner in BasicUi.Ask so we can read whole lines Jan 29, 2017
plugin/example Try to match style of other builders Dec 12, 2016
post-processor Merge pull request #4539 from mitchellh/ovftoolhidepassword Feb 27, 2017
provisioner More verbose error message when ansible-playbook fails Mar 22, 2017
scripts update changelog and add prepare script Jan 20, 2017
template update changelog Feb 4, 2017
test add ansible tests for docker builder Dec 9, 2016
vendor update Mar 16, 2017
version next version is 1.1.0 Mar 16, 2017
website website/docs: fix typo Mar 25, 2017
.gitattributes On windows a lot of git clients will convert LF to CRLF. This would b… Dec 12, 2016
.gitignore Add IntelliJ project files to .gitignore Oct 23, 2016
.travis.yml travis build 1.8 Feb 21, 2017 update changelog Mar 24, 2017 some tips on working on forks. Feb 10, 2017
Makefile fail test target if we have gofmt problems Nov 1, 2016 update readme with supported providers Mar 22, 2017
Vagrantfile Update go 1.5 references to 1.6 Feb 18, 2016
appveyor.yml Use the default version of Go. (#3498) May 4, 2016 Added merge script to automatically pull in and fix the upstream repo Mar 15, 2016
checkpoint.go Move version to its own package. (#3460) Apr 21, 2016
commands.go Fix copy/paste Terraform references Jan 29, 2017
config.go Change to explicit comparison with MagicCookieValue Oct 14, 2016
log.go Fix debug logging Oct 7, 2016
main.go Added -force truncation behavior for manifest, and added docs Jun 10, 2016
main_test.go Fatal -> Fatalf since we have a format string Oct 21, 2015
panic.go Rename some files, style Oct 28, 2014
signal.go add interrupt handling for SIGTERM [GH-1858] Jun 9, 2015
stdin.go ctrl-c closes stdin for plugins so that they are unblocked Jul 26, 2013


Build Status Windows Build Status GoDoc GoReportCard

Packer is a tool for building identical machine images for multiple platforms from a single source configuration.

Packer is lightweight, runs on every major operating system, and is highly performant, creating machine images for multiple platforms in parallel. Packer comes out of the box with support for the following platforms:

  • Amazon EC2 (AMI). Both EBS-backed and instance-store AMIs
  • Azure
  • CloudStack
  • DigitalOcean
  • Docker
  • Google Compute Engine
  • Hyper-V
  • 1&1
  • OpenStack
  • Parallels
  • ProfitBricks
  • QEMU. Both KVM and Xen images.
  • Triton (Joyent Public Cloud)
  • VMware
  • VirtualBox

Support for other platforms can be added via plugins.

The images that Packer creates can easily be turned into Vagrant boxes.

Quick Start

Download and install packages and dependencies

go get

Note: There is a great introduction and getting started guide for those with a bit more patience. Otherwise, the quick start below will get you up and running quickly, at the sacrifice of not explaining some key points.

First, download a pre-built Packer binary for your operating system or compile Packer yourself.

After Packer is installed, create your first template, which tells Packer what platforms to build images for and how you want to build them. In our case, we'll create a simple AMI that has Redis pre-installed. Save this file as quick-start.json. Export your AWS credentials as the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.

  "variables": {
    "access_key": "{{env `AWS_ACCESS_KEY_ID`}}",
    "secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}"
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "{{user `access_key`}}",
    "secret_key": "{{user `secret_key`}}",
    "region": "us-east-1",
    "source_ami": "ami-af22d9b9",
    "instance_type": "t2.micro",
    "ssh_username": "ubuntu",
    "ami_name": "packer-example {{timestamp}}"

Next, tell Packer to build the image:

$ packer build quick-start.json

Packer will build an AMI according to the "quick-start" template. The AMI will be available in your AWS account. To delete the AMI, you must manually delete it using the AWS console. Packer builds your images, it does not manage their lifecycle. Where they go, how they're run, etc. is up to you.


Comprehensive documentation is viewable on the Packer website:

Developing Packer

See for best practices and instructions on setting up your development environment to work on Packer.