NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #556 most downloaded on Packagist
Provides generic and vendor-specific normalizers for normalizing JSON documents.
Last release 13 days ago
24 Sep 2026
Release timing varies
gaps range from 2 weeks to 13 months
Nearly every release is documented
notes for 43 of 43 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
43 releases · first in 2018
github-actions(deps): bump ergebnis/.github from 1.9.3 to 1.10.0 by @dependabot [bot] in #1230
zizmor by @localheinz in #1254renew.yaml into configuration by @localheinz in #1261ubuntu-24.04 instead of ubuntu-latest by @localheinz in #1302https instead of http for monthly downloads badge by @localheinz in #1303phpstan/phpstan and rector/rector by @localheinz in #1306iconv extension by @localheinz in #1317ergebnis/composer-normalize by @localheinz in #1320ergebnis/composer-normalize with phive by @localheinz in #1323rector/rector by @localheinz in #1331Full Changelog: 4.10.1...4.11.0
One column per quarter.
For a full diff see [4.10.1...4.11.0][4.10.1...4.11.0].
github-actions(deps): bump codecov/codecov-action from 5.4.3 to 5.5.0 by @dependabot [bot] in #1226
Full Changelog: 4.10.0...4.10.1
For a full diff see [4.10.0...4.10.1][4.10.0...4.10.1].
github-actions(deps): bump codecov/codecov-action from 5.4.0 to 5.4.2 by @dependabot [bot] in #1213
schema.json by @ergebnis-bot in #1212schema.json by @ergebnis-bot in #1216Full Changelog: 4.9.0...4.10.0
For a full diff see [4.9.0...4.10.0][4.9.0...4.10.0].
Enhancement: Update schema.json by @ergebnis-bot in #1202
schema.json by @ergebnis-bot in #1202composer.json by @fredden in #1053Full Changelog: 4.8.0...4.9.0
For a full diff see [4.8.0...4.9.0][4.8.0...4.9.0].
SchemaNormalizer to allow pruning empty sections when the schema declares them as not required ([#1053]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to correctly use dev- prefixes and -dev suffixes ([#1055]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to normalize and (if necessary) combine version constraints refering to extensions ([#1185]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to normalize version constraints that are combined with * to * ([#1186]), by [@fredden]Enhancement: Update schema.json by @ergebnis-bot in #1196
schema.json by @ergebnis-bot in #1196Full Changelog: 4.7.0...4.8.0
For a full diff see [4.7.0...4.8.0][4.7.0...4.8.0].
justinrainbow/json-schema:^6.0.0 ([#1198]), by [@tacman]Enhancement: Synchronize with ergebnis/php-package-template by @localheinz in #1194
ergebnis/php-package-template by @localheinz in #1194Full Changelog: 4.6.0...4.7.0
For a full diff see [4.6.0...4.7.0][4.6.0...4.7.0].
Replace x and X wildcards with * by @fredden in #1052
x and X wildcards with * by @fredden in #1052schema.json by @ergebnis-bot in #1111schema.json by @ergebnis-bot in #1158Full Changelog: 4.5.0...4.6.0
For a full diff see [4.5.0...4.6.0][4.5.0...4.6.0].
Vendor\Composer\VersionConstraintNormalizer to replace x and X wildcards with * ([#1052]), by [@fredden]Enhancement: Synchronize with ergebnis/php-package-template by @localheinz in #1058
ergebnis/php-package-template by @localheinz in #1058ergebnis/json:^1.2.0 by @localheinz in #1073ergebnis/json-printer:^3.5.0 by @localheinz in #1074ergebnis/json-pointer:^3.4.0 by @localheinz in #1075ergebnis/json-schema-validator:^4.2.0 by @localheinz in #1076Full Changelog: 4.4.1...4.5.0
For a full diff see [4.4.1...4.5.0][4.4.1...4.5.0].
ergebnis/json:^1.2.0 ([#1073]), by [@localheinz]ergebnis/json-printer:^3.5.0 ([#1074]), by [@localheinz]ergebnis/json-pointer:^3.4.0 ([#1075]), by [@localheinz]ergebnis/json-schema-validator:^4.2.0 ([#1076]), by [@localheinz]Enhancement: Update schema.json by @ergebnis-bot in #1038
schema.json by @ergebnis-bot in #1038Full Changelog: 4.4.0...4.4.1
For a full diff see [4.4.0...4.4.1][4.4.0...4.4.1].
repositories when it disables packagist ([#1039]), by [@localheinz]Released: 31 Oct 2005
Announcement: English
ChangeLog
Download:
Source (tar.gz)
Source (tar.bz2)
Windows binary
Windows installer
Fix: Do not configure platform by @localheinz in #1019
platform by @localheinz in #1019ergebnis/php-package-template by @localheinz in #1020ergebnis/php-package-template by @localheinz in #1033ergebnis/php-package-template by @localheinz in #1036v prefixes from version strings by @fredden in #1027Full Changelog: 4.3.0...4.4.0
For a full diff see [4.3.0...4.4.0][4.3.0...4.4.0].
v prefixes from version constraints ([#1027]), by [@fredden]exclude and only properties of items listed in the repositories section ([#1001]), by [@fredden]Released: 11 Jul 2005
Announcement: English
ChangeLog
Download:
Source (tar.gz)
Source (tar.bz2)
Windows binary
Windows installer
Enhancement: Synchronize with ergebnis/php-package-template by @localheinz in #963
ergebnis/php-package-template by @localheinz in #963allow-plugins and preferred-install when feasible by @fredden in #980Full Changelog: 4.2.0...4.3.0
For a full diff see [4.2.0...4.3.0][4.2.0...4.3.0].
allow-plugins and preferred-install as sensibly as is feasible ([#980]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to remove overlapping individual versions too ([#982]), by [@fredden]ergebnis/json-printer:^3.4.0 ([#989]), by [@dependabot]ergebnis/json:^1.1.0 ([#991]), by [@dependabot]ergebnis/json-schema-validator:^4.1.0 ([#992]), by [@dependabot]Released: 27 December 2002
Announcement: English French
ChangeLog
Download:
Source (tar.gz)
Windows binary
Windows installer
For a full diff see [4.1.0...4.2.0][4.1.0...4.2.0].
For a full diff see [4.1.0...4.2.0][4.1.0...4.2.0].
Vendor\Composer\VersionConstraintNormalizer to prefer tilde operators (~) over wildcard operators (*), and caret operators (^) over tilde operators (~) ([#756]), by [@fredden]Released: 22 April 2002
Announcement: English French
ChangeLog
Download:
Source (tar.gz)
Windows binary
Windows installer
For a full diff see [4.0.2...4.1.0][4.0.2...4.1.0].
For a full diff see [4.0.2...4.1.0][4.0.2...4.1.0].
Vendor\Composer\VersionConstraintNormalizer to remove extra spaces in inline aliases ([#889]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to remove useless inline aliases ([#889]), by [@fredden]SchemaNormalizer to account for objects with string and integer-like properties ([#868]), by [@alexis-saransig-lullabot] and [@fredden]SchemaNormalizer to account for objects where schema describes additional properties ([#873]), by [@fredden] and [@localheinz]Released: 10 Dec 2001
Announcement: English French
ChangeLog
Download:
Source (tar.gz)
Windows binary
For a full diff see [4.0.1...4.0.2][4.0.1...4.0.2].
For a full diff see [4.0.1...4.0.2][4.0.1...4.0.2].
Vendor\Composer\VersionConstraintNormalizer to sort versions naturally ([#863]), by [@localheinz]Released: 29 August 2000
Announcement: English
ChangeLog
Download:
Source (tar.gz)
Windows binary
For a full diff see [4.0.0...4.0.1][4.0.0...4.0.1].
For a full diff see [4.0.0...4.0.1][4.0.0...4.0.1].
Vendor\Composer\ComposerJsonNormalizer to stop sorting repositories ([#858]), by [@localheinz]Vendor\Composer\BinNormalizer ([#860]), by [@localheinz]Vendor\Composer\ConfigHashNormalizer to ensure config is sorted by ket ([#861]), by [@localheinz]Released: 28 June 2000
Announcement: English
ChangeLog
Download:
Source (tar.gz)
4.0.1pl2 Source (tar.gz)
Windows binary
4.0.1pl1 Windows binary
For a full diff see [3.0.0...4.0.0][3.0.0...4.0.0].
For a full diff see [3.0.0...4.0.0][3.0.0...4.0.0].
FormatNormalizer ([#781]), by [@localheinz]ergebnis/json-schema-validator:^4.0.0 ([#771]), by [@localheinz]Normalizer\SchemaNormalizer to exclude properties from being sorted ([#774]), by [@localheinz]Vendor\Composer\BinNormalizer, Vendor\Composer\PackageHashNormalizer, Vendor\Composer\VersionConstraintNormalizer, and SchemaNormalizer to encode JSON with JSON_PRETTY_PRINT flag ([#795]), by [@localheinz]Vendor\Composer\BinNormalizer, Vendor\Composer\PackageHashNormalizer, Vendor\Composer\VersionConstraintNormalizer, and SchemaNormalizer to encode JSON with JSON_UNESCAPED_SLASHES flag ([#801]), by [@localheinz]Vendor\Composer\BinNormalizer, Vendor\Composer\PackageHashNormalizer, Vendor\Composer\VersionConstraintNormalizer, and SchemaNormalizer to encode JSON with JSON_UNESCAPED_UNICODE flag ([#802]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to reject JSON when it is not an object ([#804]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to compose WithFinalNewLineNormalizer ([#806]), by [@localheinz]Vendor\Composer\VersionConstraintNormalizer to skip normalization of version constraints when they can not be parsed by Composer\Semver\VersionParser ([#813]), by [@fredden] and [@localheinz]Vendor\Composer\VersionConstraintNormalizer to sort versions in ascending order ([#816]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to normalize version constraints separators in and constraints from space ( ) or comma (,) to space ( ) ([#819]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to remove overlapping version constraints in or version constraints ([#850]), by [@fredden]Vendor\Composer\VersionConstraintNormalizer to remove duplicate version constraints ([#856]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to stop sorting scripts.auto-scripts ([#776]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to stop sorting extra.installer-paths ([#777]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to stop sorting config.allow-plugins ([#778]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to stop sorting config.preferred-install ([#779]), by [@localheinz]Vendor\Composer\ComposerJsonNormalizer to stop sorting children of extra.patches ([#780]), by [@localheinz]ergebnis/json and removed Json and Exception\InvalidJsonEncoded ([#772]), by [@localheinz]Vendor\Composer\ConfigHashNormalizer ([#775]), by [@localheinz]AutoFormatNormalizer ([#793]), by [@localheinz]FixedFormatNormalizer ([#794]), by [@localheinz]Vendor\Composer\BinNormalizer ([#805]), by [@localheinz]Released: 22 May 2000
Announcement: English
ChangeLog
Download:
Source (tar.gz)
Windows binary
Support for PHP 3 has been discontinued since 20 Oct 2000 . Please consider upgrading to 8.
For a full diff see [2.2.0...3.0.0][2.2.0...3.0.0].
For a full diff see [2.2.0...3.0.0][2.2.0...3.0.0].
ergebnis/json-schema-validator:^3.0.0 ([#666]), by [@dependabot]Exception\ExceptionInterface to Exception\Exception ([#667]), by [@localheinz]Exception suffix from all exceptions ([#668]), by [@localheinz]NormalizerInterface to Normalizer ([#669]), by [@localheinz]Format\Formatter to Format\DefaultFormatter ([#672]), by [@localheinz]Format\FormatterInterface to Format\Formatter ([#673]), by [@localheinz]ergebnis/json-pointer:^3.0.0 and ergebnis/json-schema-validator:^3.1.0 ([#697]), by [@localheinz]ergebnis/json-pointer:^3.1.0 ([#698]), by [@dependabot]justinrainbow/json-schema:^5.2.12 ([#705]), by [@dependabot]ConfigHashNormalizer to sort keys correctly ([#723]), by [@fredden]For a full diff see [2.1.0...2.2.0][2.1.0...2.2.0].
For a full diff see [2.1.0...2.2.0][2.1.0...2.2.0].
type property in schema is set to array or object ([#632]), by [@localheinz]SchemaNormalizer to normalize additional object properties ([#639]), by [@localheinz]SchemaNormalizer to normalize array values for which schema does not declare item schema ([#641]), by [@localheinz]For a full diff see [2.0.0...2.1.0][2.0.0...2.1.0].
For a full diff see [2.0.0...2.1.0][2.0.0...2.1.0].
SchemaNormalizer to support anyOf ([#623]), by [@localheinz]For a full diff see [1.0.3...2.0.0][1.0.3...2.0.0].
For a full diff see [1.0.3...2.0.0][1.0.3...2.0.0].
Format::__toString(), Indent::__toString(), and Json::__toString() to Format::toString(), Indent::toString(), and Json::toString(), requiring consumers to explicitly invoke methods instead of allowing to cast to string ([#589]), by [@localheinz]SchemaValidator provided by ergebnis/json-schema-validator ([#595]), by [@localheinz]Format\JsonEncodeOptions::value() to Format\JsonEncodeOptions::toInt() ([#603]), by [@localheinz]Format\Format::create() as named constructor and reduced visibility of __construct to private ([#608]), by [@localheinz]Format\Format into Json ([#616]), by [@localheinz]FinalNewLineNormalizer to WithFinalNewLineNormalizer ([#618]), by [@localheinz]NoFinalNewLineNormalizer to WithoutFinalNewLineNormalizer ([#619]), by [@localheinz]justinrainbow/json-schema ([#517]), by [@dependabot]allow-plugins configuration ([#590]), by [@dependabot]Validator\Result, Valdiator\SchemaValidator, and Validator\SchemaValidatorInterface ([#597]), by [@dependabot]For a full diff see [1.0.2...1.0.3][1.0.2...1.0.3].
For a full diff see [1.0.2...1.0.3][1.0.2...1.0.3].
Vendor\Composer\PackageHashNormalizer to take into account the newly addded composer-plugin-api as platform requirement ([#463]), by [@localheinz]For a full diff see [1.0.1...1.0.2][1.0.1...1.0.2].
For a full diff see [1.0.1...1.0.2][1.0.1...1.0.2].
Vendor\Composer\ConfigHashNormalizer to take into account the full property path, not only the property name ([#429]), by [@localheinz]For a full diff see [1.0.0...1.0.1][1.0.0...1.0.1].
For a full diff see [1.0.0...1.0.1][1.0.0...1.0.1].
Vendor\Composer\ConfigHashNormalizer to ignore the preferred-install hash ([#425]), by [@localheinz]For a full diff see [0.14.1...1.0.0][0.14.1...1.0.0].
For a full diff see [0.14.1...1.0.0][0.14.1...1.0.0].
Vendor\Composer\ConfigHashNormalizer to recursively sort hashes by key ([#424]), by [@localheinz]For a full diff see [0.14.0...0.14.1][0.14.0...0.14.1].
For a full diff see [0.14.0...0.14.1][0.14.0...0.14.1].
Vendor\Composer\ConfigHashNormalizer to continue normalizing properties when a property has an empty value ([#423]), by [@localheinz]For a full diff see [0.13.1...0.14.0][0.13.1...0.14.0].
For a full diff see [0.13.1...0.14.0][0.13.1...0.14.0].
Indent::CHARACTERS constant that exposes a map of indent styles to indent characters ([#384]), by [@localheinz]For a full diff see [0.13.0...0.13.1][0.13.0...0.13.1].
For a full diff see [0.13.0...0.13.1][0.13.0...0.13.1].
For a full diff see [0.12.0...0.13.0][0.12.0...0.13.0].
For a full diff see [0.12.0...0.13.0][0.12.0...0.13.0].
Deprecated SchemaValidator::isValid() ([#269]), by [@localheinz]
For a full diff see [0.11.0...0.12.0][0.11.0...0.12.0].
SchemaValidator::validate(), which returns a Result composing validation error messages ([#268]), by [@localheinz]SchemaValidator::isValid() ([#269]), by [@localheinz]For a full diff see [0.10.1...0.11.0][0.10.1...0.11.0].
For a full diff see [0.10.1...0.11.0][0.10.1...0.11.0].
ergebnis/composer-json-normalizer ([#203]), by [@localheinz]ChainUriRetriever ([#202]), by [@localheinz]For a full diff see [0.10.0...0.10.1][0.10.0...0.10.1].
For a full diff see [0.10.0...0.10.1][0.10.0...0.10.1].
For a full diff see [0.9.0...0.10.0][0.9.0...0.10.0].
For a full diff see [0.9.0...0.10.0][0.9.0...0.10.0].
ChainUriRetriever which allows specifying multiple URI retrievers ([#102]), by [@localheinz]Allowing injection of a UriRetriever into the SchemaNormalizer, and defaulting to a ChainUriRetriever which composes FileGetContents and Curl URI retrievers ([#104]), by [@localheinz]
Dropped null default values of constructor arguments of AutoFormatNormalizer, FixedFormatNormalizer, Formatter, IndentNormalizer to expose hard dependencies ([#109]), by [@localheinz]
Dropped nullable return type declaration from ChainUriRetriever::getContentType(), defaulting to an empty string when ChainUriRetriever::retrieve() wasn't invoked yet ([#132]), by [@localheinz]
Started using ergebnis/json-printer instead of localheinz/json-printer ([#176]), by [@localheinz]
Renamed vendor namespace Localheinz to Ergebnis after move to [@ergebnis] ([#181]), by [@localheinz]
Run
$ composer remove localheinz/json-normalizer
and
$ composer require ergebnis/json-normalizer
to update.
Run
$ find . -type f -exec sed -i '.bak' 's/Localheinz\\Json\\Normalizer/Ergebnis\\Json\\Normalizer/g' {} \;
to replace occurrences of Localheinz\Json\Normalizer with Ergebnis\Json\Normalizer.
Run
$ find -type f -name '*.bak' -delete
to delete backup files created in the previous step.
For a full diff see [0.8.0...0.9.0][0.8.0...0.9.0].
For a full diff see [0.8.0...0.9.0][0.8.0...0.9.0].
JsonEncodeOptions value object ([#93]), by [@localheinz]Format into named constructor on Indent value object ([#94]), by [@localheinz]Format into named constructor on JsonEncodeOptions value object([#95]), by [@localheinz]Format into named constructor on NewLine value object ([#96]), by [@localheinz]Json value object from decoded data ([#88]), by [@localheinz]IndentInterface ([#89]), by [@localheinz]NewLineInterface ([#90]), by [@localheinz]FormatInterface ([#91]), by [@localheinz]JsonInterface ([#92]), by [@localheinz]For a full diff see [0.7.0...0.8.0][0.7.0...0.8.0].
For a full diff see [0.7.0...0.8.0][0.7.0...0.8.0].
Json value object to allow creation from data ([#86]), by [@localheinz]InvalidJsonException to InvalidJsonEncodedException ([#85]), by [@localheinz]ExceptionInterface now extends Throwable ([#82]), by [@BackEndTea]ext/json is now explicitly required ([#84]), by [@localheinz]For a full diff see [0.6.0...0.7.0][0.6.0...0.7.0].
For a full diff see [0.6.0...0.7.0][0.6.0...0.7.0].
Indent value object ([#73]), by [@localheinz]NewLine value object ([#76]), by [@localheinz]Json value object ([#64]), by [@localheinz]Sniffer in favour of a named constructor on Format value object ([#77]), by [@localheinz]Format value object now rejects mixed tabs and spaces as indent ([#69]), by [@localheinz]For a full diff see [0.5.2...0.6.0][0.5.2...0.6.0].
For a full diff see [0.5.2...0.6.0][0.5.2...0.6.0].
For a full diff see [0.5.1...0.5.2][0.5.1...0.5.2].
For a full diff see [0.5.1...0.5.2][0.5.1...0.5.2].
For a full diff see [0.5.0...0.5.1][0.5.0...0.5.1].
For a full diff see [0.5.0...0.5.1][0.5.0...0.5.1].
oneOf combination ([#47]), by [@localheinz]For a full diff see [0.4.0...0.5.0][0.4.0...0.5.0].
For a full diff see [0.4.0...0.5.0][0.4.0...0.5.0].
oneOf ([#45]), by [@localheinz]For a full diff see [0.3.0...0.4.0][0.3.0...0.4.0].
For a full diff see [0.3.0...0.4.0][0.3.0...0.4.0].
Formatter ([#31]), by [@localheinz]FormatSniffer to Sniffer ([#30]), by [@localheinz]For a full diff see [0.2.0...0.3.0][0.2.0...0.3.0].
For a full diff see [0.2.0...0.3.0][0.2.0...0.3.0].
Format value object ([#29]), by [@localheinz]For a full diff see [0.1.0...0.2.0][0.1.0...0.2.0].
For a full diff see [0.1.0...0.2.0][0.1.0...0.2.0].
FixedFormatNormalizer ([#17]), by [@localheinz]For a full diff see [5d8b3e2...0.1.0][5d8b3e2...0.1.0].
For a full diff see 5d8b3e2...0.1.0.
IndentNormalizer (#1), by @localheinzFinalNewLineNormalizer (#2), by @localheinzNoFinalNewLineNormalizer (#3), by @localheinzJsonEncodeNormalizer (#7), by @localheinzCallableNormalizer (#8), by @localheinzChainNormalizer (#9), by @localheinzFormat value object (#10), by @localheinzFormatSniffer (#12), by @localheinzAutoFormatNormalizer (#13), by @localheinzSchemaNormalizer (#15), by @localheinzYour coding agent can read these notes before it upgrades. Set up the MCP server →