To standardize the version numbering of all the major Puppet components (Puppet Agent, PuppetDB, Puppet Server) to 5, as a first step towards delivering these components as a unified platform.

To include Hiera 5 with eyaml as a built-in capability.

To provide clean UTF-8 support.

To move network communications to fast, interoperable JSON.

Our current Ruby versions have reached their end of life, so we're moving to MRI Ruby 2.4 on the agent and (opt-in) jruby9k on the server. The Puppet Server metrics service that was exclusive to Puppet Enterprise is now available in open source Puppet.

In addition to the new features, there are some substantial performance boosts waiting for you. According to our performance testing (thanks Doug Rosser!):

Puppet 5 agent run times were 30 percent lower at equivalent loads. (We went from an average of 8 seconds to 5.5 seconds.)

Puppet 5 was able to scale to 40 percent more agents with no deterioration in runtime performance. For comparison, Puppet 4 agent run times became dangerously long when scaled to the same number of agents.

This is a semver major version, which includes some backwards incompatible changes and removals of deprecated capabilities, but we have worked hard to retain Puppet 5's compatibility with Puppet 4.x modules. With a few careful (and hopefully rarely used) exceptions, module code that works under Puppet 4 should not need any revision to work under Puppet 5.

I'd like to send out huge thanks to everyone who worked on this release, and to community members who provided feedback on both the design discussions and early preview releases. Extra special thanks to Josh Cooper, the Puppet software engineer who shepherded this release to completion. It has a special significance for me since it's version 5, and (by total coincidence!) yesterday was my five-year anniversary at Puppet :) I think it's going to be a great release series.