GitHub
10/23/2025, 12:40 AMpact. All commands will route to this binary, unless PACT_CLI_LEGACY env var is set, in which case, existing behaviour is preserved.
all available functionality available exposed when PACT_CLI_LEGACY is set, will be removed in a major version bump
changes
./pact/bin/
├── pact (single binary with all pact rust functionality)
├── pact-broker (legacy) - use pact broker
├── pactflow (legacy) - use pact pactflow
├── pact-message (legacy) - use pact mock (consumer) / pact verifier (provider)
├── pact-mock-service (legacy) - use pact mock
├── pact-provider-verifier (legacy) - use pact verifier
└── pact-stub-service (legacy) - use pact stub
• (BREAKING): removal of pact wrapper script
• introduction of pact cli with subcommands
• (BREAKING) pact_mock_server_cli -> pact mock
• (BREAKING) pact_verifier_cli -> pact verifier
• (BREAKING) pact-plugin-cli -> pact plugin
• (BREAKING) pact-stub-service -> pact stub
• default routing of all legacy commands to pact <subcommand> equivalent
• (PARTIAL BREAKING) ruby -> rust command line arguments are not identical, with exception to the pact-broker-cli
• users can opt in to existing behaviour by setting PACT_CLI_LEGACY= to any value
This will be published under a minor release.
Current consumers
• homebrew
• will get latest release by default
• provide warning on install, to advise users to opt-in to legacy commands with PACT_CLI_LEGACY or be advised to try and make it work
• pact-js-cli
• work required to map verifier/mock/broker/stub cli to js api
• quickest staged roll-out is
• to set PACT_CLI_LEGACY=1 in api
• allow mapping to old / new bin stubs via PACT_CLI_LEGACY
• pact-python-cli
• is there a api surface still exposed?
Apply this approach to
• pact-docker-cli as well
• pact-foundation/pact-docker-cli#175
• pactflow/actions
• https://github.com/pactflow/actions/tree/feat/pact-broker-cli-rust-rewrite
pact-foundation/pact-standaloneGitHub
10/25/2025, 1:50 AM