Skip to main content

23 posts tagged with "community"

View All Tags

Β· 7 min read

πŸ‘‹ It's June, we've just passed the Summer Solstice, and some of you may be engrossed in footie-fever supporting your favourite team at the Euros ⚽. Good luck!

In this month's update, we will showcase what has been happening across the Pact OSS Ecosystem, letting you know how we got on at GitHub's Merge festival in Berlin, and sharing some of the latest community events coming up this year.

Pact OSS Updates​

General Updates​

Specific language updates​


The Pact Rust core saw a good set of enhancements and fixes this month, with the latest release of pact_ffi 0.4.21.

This is mostly being driven by an increase of usage of the FFI interface, across client libraries which is resulting in issues being raised and fixed. Some of the key highlights include:

Check out the release notes here

If you've spotted something, once you've raised an issue, sometimes the best way to try and sort it, is yourself. We are happy to guide through the process, so don't be shy, get involved!

Pact-Reference - Slack​

Chat with us in: #pact-rust.


Ali Ustek helped with some maintenance work and updated the pact-plugin JVM driver to Gradle 8. It was a decent bit of work and it's much appreciated as it saves the core maintainers time to focus on other areas.

Pact-Plugins - Slack​

Have you tried out Pact Plugins yet? What's stopping you?

Chat with us in: #pact-plugins.


Back in April, GoLang recently introduced v1.22.x which has affected some of our users, and was raised: Runtime error occurs with golang 1.22.x.

It transpires the error was actually at our end, and was solved by the issues original poster fix: use the same signature for the same function (#402).

There was some impressive debugging done by the GoLang team which makes for an interesting read. Check it out here.

I'm going to use some of that new found knowledge to help me with my own debugging in the future.

Pact-Go has also been updated to v0.4.21 of the pact_ffi library, bringing smaller binaries, improved content-type detection, and the next pact-go release will be the first to offer native alpine support. Subscribe or star the repo for notifications, otherwise I'll update the post to let you know when it's released.

How are you finding Pact-Go? Let us know in the Slack channel.

Pact-Go - Slack​

Chat with us in: #pact-go.


Few bits of big news for Pact-JS this month:

  • Pact CLI tools (ruby based) have now been moved from @pact-foundation/pact-core to @pact-foundation/pact-cli. This is to make it easier for users to find the CLI tools, and to make it easier to maintain the codebase. You can find the new CLI tools here and read the migration guide here.
    • This dropped the package size from 353 MB to 164 MB
  • Alpine Support is here! Pact-JS now supports Alpine Linux, which is a lightweight Linux distribution that is commonly used in containerized environments. This is a big win for users who are using Alpine Linux in their environments previously having to port applications to a glibc (debian etc) based distro.
  • Package sizes are now smaller, the pact rust core binaries have been made smaller, so despite adding 2 new platform/arch combos, the package size has further been reduced to 116 MB.
  • Content-Type detection is improved via a fix in the pact rust core.
    • Related pact-js-core issue here
  • Add @pact-foundation/pact-cli into your package.json if you rely on the CLI tools in your project.
  • Check your project for any references to @pact-foundation/pact-core and update them to @pact-foundation/pact-cli.

Let us know how you get on!

Pact-JS - Slack​

Chat with us in: #pact-js.


We spoke last month where Val Kolovos assigned himself to one of the tasks: Add support and example for a message consumer test using Rust engine and we wished him luck!

We are pleased to say that we now have a V3 and V4 async message consumer test example in the Pact-Python codebase. This is a great step forward for the Pact-Python ecosystem, and we are excited to see how this will help users in the future.

Check out the PR here: Feat/async message consumer

Thanks Val πŸ’›!

If you want to get involved, don't forget, we have a Pact Compatibility suite which is a set of BDD style tests to check compatibility between Pact implementations. There are full implementations in JVM, and Rust, with Tien over in Pact-PHP using it to guide and validate his Pact Rust core based implementation of Pact-PHP.

Pact-Python - Slack​

Chat to us in: #pact-python.


The v10 Beta2 release is here, which includes the new pact_ffi 0.4.21 release and all the fixes that came along with it.

Check out the release notes here

Anyone can start testing pact-php with pact_ffi code by updating their composer.json

"pact-foundation/pact-php": "10.0.0-beta2"

This bring a raft of features to the Pact-PHP ecosystem including V4 Pact Specification support, access to the Pact Plugin ecosystem and huge speed benefits over the 9.x Ruby based release.

You can see a full range of examples here

Pact-PHP - Slack​

Chat to us in: #pact-php.

Community Events​

Are you talking about Pact or contract-testing this year at an event? Why not let us know and get yourself featured!

GitHub Merge Festival - Berlin​

We had a great time at GitHub's Merge festival in Berlin), where we had the opportunity to meet some of you in person. It was great to see the community come together and share their experiences with Pact. We also had the opportunity to listen to some of the GitHub team and other event members, and discuss how we can continue to work together to make the developer experience even better.

If you are close to Berlin but didn't get to this event, don't miss the WeAreDevelopers World Congress on 17-19 July 2024. We won't be there unfortunately, but it's a great event to attend if you are in the area.

IMG_5893 (1)

It got pretty busy :)


Brighton Java User Group​

Bas Dijkstra is continuing his contract testing tour, this time in Brighton on the 25th July, with the topic 'Solving the integration testing puzzle with contract testing'. If you are in the area, make sure to check it out.

GopherConUK 2024​

Mark Bradley will be speaking at GopherConUK 2024, 14th-16th of August. He his topic will be "Using Pact to deploy Microservice with confidence". If you are attending, make sure to check out his talk.


You can also check out some of his previous material on the topic of Pact, on his blog site here:

Community Videos​

Made some cool video content showcasing Pact? Let us know to get featured!

What is contract testing?​

Check out Daniel Knott providing an introduction to contract testing, along with further reading to help aid your journey. Check it out on YouTube here. He covers many different testing topics, so this along with it others are certainly worthy of your time.

Thats a wrap​

Want to carry on the conversation? Sign up here to join our Slack community, where you will be amongst over 5.5k other users. It's a safe place to ask questions, and a great place to share the awesome work you are doing in the Pact ecosystem.

Whatever you are up to, let us know, and we can look to get you featured in the Pact post.

See you next month folks!

Cheers, Saf

Β· 12 min read

πŸ‘‹ It's May, and time is flying as we move into the 2nd half of the year. I'll be bringing you the usual updates from the world of Pact in the last month.

Pact OSS Updates​

General Updates​

  • Alpine is now supported in the pact-reference core
  • The builds are static, and therefore the single binary works across musl or glibc based distros (excluding ffi)
  • pact_ffi library comes in both static *.a & shared *.so variants for musl, depending on the consuming client libraries requirements for ffi interop
libraryalpine supportversion
pact_ffiβœ…- x86_64 .a from 0.2.4
- aarch64 .a from 0.4.15
- .so from 0.4.17
pact_mock_server_cliβœ…- 1.0.5
pact_verifier_cliβœ…- 1.1.1
pact-stub-serverβœ…- 0.6.0
pact-plugin-cliβœ…- 0.1.2
pact-protobuf-pluginβœ…- 0.3.15
pact-csv-pluginβœ…- 0.0.6

Specific language updates​


Pact-PHP V10 Beta Release​

The v10 Beta release has landed due to an epic amount of work from Tien Vo Xuan and Lewis Cowles

Check out the release notes here

Anyone can start testing pact-php with pact_ffi code by updating their composer.json

"pact-foundation/pact-php": "10.0.0-beta1"

This bring a raft of features to the Pact-PHP ecosystem including V4 Pact Specification support, access to the Pact Plugin ecosystem and huge speed benefits over the 9.x Ruby based release.

You can see a full range of examples here

Pact-PHP Alpine Support​

You'll also be pleased to know, that the 10.0.0-beta1 is the first of the client libraries to support Alpine! πŸŽ‰

Pact-PHP - Slack​

Chat to us in: #pact-php.


Pact-Reference - Pact FFI​

0.4.20 of libpact_ffi was released

This release allows optional query parameter values, as well as fixing a pesky warning that was cluttering users consoles. It also pins our shared library to glibc 2.23 for linux gnu targets (non-musl). This allows users of RHEL8 and other older supported distros to still utilise the pact_ffi library, as well as those on later distributions.

Pact-Reference - Pact Mock Server​

Ron has started a redesign/rewrite for a V2 version of the Pact Reference Mock Server, and would find it easier to support multiple versions with branches it the crate is not in a mono-repo (pact-reference).

Therefore the action was taken to move it from its home in pact-reference to its own repository

You can find it here

  • The pact_mock_server code resides here
  • The pact_mock_server_cli code resides here

Pact-Reference - Pact Stub Server​

A couple of features dropped to

Pact-Reference - Pact Stub Server - Docker​

Pact-Reference - Pact Stub Server - Docker - Supported Platforms​

Multi-platform images are available, and can be used cross-platform by setting the platform flag.

  • --platform=linux/amd64
  • --platform=linux/arm64
  docker run --platform=linux/arm64 -t -p 8080:8080 -v "$(pwd)/pacts/:/app/pacts" pactfoundation/pact-stub-server -p 8080 -d pacts
Pact-Reference - Pact Stub Server - Docker - Supported Registries​

Docker images are published to multiple registries

Pact-Reference - Pact Stub Server - Supported Platforms​

OSArchitectureSupportedPact Stub Server Version

Note: From v0.6.0, Linux executables are statically built with musl and as designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-Reference - Slack​

Chat with us in: #pact-rust.


A couple of features dropped to

Pact-Plugin-CLI - Supported Platforms​

OSArchitectureSupportedPact Plugin CLI Version

Note: From v0.1.2, Linux executables are statically built with musl and as designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-CSV-Plugin - Supported Platforms​

OSArchitectureSupportedPact CSV Plugin Version

Note: From v0.0.6, Linux executables are statically built with musl and as designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.


A couple of features dropped to

And we saw a community fix from new contributor Eric Muller in this PR

Pact-Protobuf-Plugin - Supported Platforms​

OSArchitectureSupportedPact Protobuf Plugin Version

Note: From v0.3.15, All Linux executables are statically built with musl and are designed to work against glibc (eg, Debian) and musl (eg, Alpine) based distos.

Pact-Protobuf-Plugin - Slack​

Have you tried out Pact Plugins yet? What's stopping you?

Chat with us in: #pact-plugins.



v2.0.5 is out which includes Janez Justin's change we spoke about last month and updates several dependencies in the project.

Chat with us in: #pact-go.


Pact JS Core saw a few new fixes, which thanks to npm's package resolution and our use of a caret in our dependency of @pact-foundation/pact-core in @pact-foundation/pact, means you will pull in the latest fixes, without a new release of @pact-foundation/pact

Pact-JS - Alpine support​

A pull request has gone in to bring alpine/musl support to pact-js-core and pact-js. It will close this open RFC.

Please feel free to take a look, drop a review, or a comment to say that this is a feature you would like!

If you'd rather wait until its released, please try it out in your projects and let us know how you get on.

Pact-JS - Slack​

Chat with us in: #pact-js.



Pact Pythons core maintainer has been enjoying a well-earned holiday for the last month, and in true open-source style, 2 new contributors arrived, wanting to get involved in extending the Pact Rust FFI support in Pact-Python.

Shout outs go to David Rettie & Val Kolovos, who are getting involved. It all started with a question

hello! I'm interested in putting some time into helping out with the pact V3/ffi tasks. I've been familiarising myself with the codebase and work done so far, I'm wondering if any other contributors or maintainers would like to have a call to help me get on the right track ?

Val dove in head first and naturally came up against a few blockers, questions are always welcome, especially as the help often paves the way for others.

I'm currently working to implement the v3 message_consumer.feature test. I've made pretty good progress, but I just got stuck on generators. I haven't been able to find anything in any of the other languages, so I was hoping someone here might be able to point me in the right direction.

Val has currently assigned himself to one of the tasks: Add support and example for a message consumer test using Rust engine and we wish him luck!

If you want to get involved, don't forget, we have a Pact Compatibility suite which is a set of BDD style tests to check compatibility between Pact implementations. There are full implementations in JVM, and Rust, with Tien over in Pact-PHP using it to guide and validate his Pact Rust core based implementation of Pact-PHP.

Chat to us in: #pact-python.

Community Events​

Praveen Erode Mohanasundaram - Contract Testing: The Key to Unlocking E2E Testing Bottlenecks in CI/CD pipelines​

Long time Pact advocate and community contributor Praveen Erode Mohanasundaram spoke at Devoxx UK about Contract Testing: The Key to Unlocking E2E Testing Bottlenecks in CI/CD pipelines.

I'll let Praveen give an overview of his talk

As organisations embrace microservices architecture to achieve rapid, independent deployments, they often encounter obstacles that impede these benefits. A common challenge is an overreliance on traditional end-to-end testing strategies, which, while providing confidence, can slow deployment, create dependencies, and limit team autonomy.

Drawing from the transformative journey at Discover Financial Services, where we navigated the challenges of modernising systems into a microservices architecture, this presentation will delve into the hurdles encountered, the pivotal role of contract testing in overcoming these challenges, various contract testing strategies and open source tools, and our evolutionary path towards embracing contract testing. Join me to discover how this approach became the catalyst for removing bottlenecks in our CI/CD pipeline, unlocking the true potential of microservices for unparalleled agility and success

Interested? Well lucky for you, you can catch the video on YouTube πŸ“Ί

TestGuild - Getting the Most Out of Open Source with Yousaf Nabi​

TestGuild Yousaf Podcast

I recently spoke with Joe Colantonio about all things open-source, you can check it out via multiple mediums via the links on the TestGuild site, whether you prefer watching a video or listening to a podcast, Joe has got you covered.

Pact Showcasing at the GitHub Open Source Fair @ The Merge - Berlin​

OpenSource Fair

THE MERGE is a developer experience conference brought to you by GitButler, a dev tool company founded by the co-founder of GitHub. They are bringing together technical founders and execs from companies such as GitHub, Sentry, Heroku, and Tauri to discuss all things developer tools and the communities they built around them.

There will also be an Open Source Fair where 24 selected projects will get the chance to showcase!

We are proud to announce that Pact was selected, so we will be there spreading the Pact love far and wide.

If your in Berlin, June 13th-14th, why not come and talk to us!

Book updates - Contract Testing in Action​

Contract Testing In Action book cover

Another 4 chapters have just dropped for the book Contract Testing in Action on Manning, written by Marie Cruz and Lewis Prescott.

If you are new to Pact, be sure to check it out! πŸŽ‰


πŸ₯· Don't forget!

You can use CTA45 between April 29 to July 30 to save 45% πŸ€‘

πŸŽ₯ If you want to give the book some promotion, or offer a quote, reach out to Marie, Lewis or myself

Thats a wrap​

Want to carry on the conversation? Sign up here to join our Slack community, where you will be amongst over 5.5k other users. It's a safe place to ask questions, and a great place to share the awesome work you are doing in the Pact ecosystem.

Whatever you are up to, let us know, and we can look to get you featured in the Pact post.

See you next month folks!

Cheers, Saf

Β· 9 min read

πŸ‘‹ Hello and welcome to the April update from the world of Pact. We've got a varied selection as always, but my personal favorite is all about a πŸ“–.

Read on to find out, as I'm not going to spoil the surprise. πŸ™Š

Pact OSS Updates​

General Updates​

GitHub Actions recently switched macos-latest runners to macos-14 which is MacOS Sonoma running on an arm64 (apple silicon) processor over its predecessor x86_64 (intel).

Hopefully that hasn't given you much grief, but it certainly has had an impact on some of our workflows which we've needed to rectify.

macos-11 will be deprecated some time in June, and users should prepare for a time where only arm64 macos machines are available on GitHub actions, and ensure use of Rosetta for any x86_64 invocations.

Specific language updates​



Tien Vo has been continuing the trend with many more pull requests against the Pact-PHP project, preparing for the launch of Pact-PHP v10.x

Pact-PHP v10.x is now mainlined on the master branch, and Pact-PHP v9.x has moved to the release/9.x branch.

We've just synced the latest docs from the repo, to the website, so you can find Pact-PHP's new docs here

You can find the full list of April's merged pull-requests here. I've elected not to list them, as the current number is 37! πŸš€

Why not help us make it 38!

Chat to us in: #pact-php.



We've seen a raft of features and fixes land this month in Pact-Reference. Mainly driven by Tien Vo (Pact-PHP) & Josh Ellis (Pact-Python) during their work in implementing the pact-ffi in their respective languages, and trying to implement the full Pact compatibility suite. We also as usual have users working with the pact-reference project raising issues and proposing fixes via PR's. We are grateful for all the feedback, and contributions to the project.

Features & Fixes:

Chat with us in: #pact-rust.



Pact Plugin Driver​

  • Ron found an issue in the Rust plugin driver, which was causing slow-down issues on Windows machines. The upshot of his findings, is that plugin based tests on Windows should run quicker. You can check out the commit here. If you are using the Pact-FFI, I think you'll need to wait for a release beyond libpact_ffi-v0.4.19 to be cable to consume these.


  • A range of fixes were released in v0.3.14 of the pact-protobuf-plugin off the back of this raised issue. For the full list of changes, see the changelog

Have you tried out Pact Plugins yet? What's stopping you?

Chat with us in: #pact-plugins.



  • Last month we spoke about releasing musl variants on the Pact FFI library. We saw our first community contribution, in consuming these in a Pact client project, in this issue and respective PR. This is exciting to see. I'd love to see linux Aarch64 support for musl and non-musl variants. Fancy dropping in a PR?
  • The Road to Pact Plugins.
    • If you are waiting eagerly for access to the Pact Plugin framework within Pact-Net, why not comment on the open RFC where you can register your interest in using it, or potentially contributing to it's implementation.
  • The Road to Pact-Net V5.
    • Are you using Pact-Net V5 Beta? Drop us some feedback and let us know how you are getting on. It's really invaluable in helping us decide when to promote from a beta to a release-candidate.

Chat with us in: #pact-net.



GoLang recently introduced v1.22.x which seems to have introduced some defects for the GoLang community, causing segfaults on linux x86_64 machines. This affected some of our users, and was raised here


Linux x86_64 users

  • Using GoLang 1.22.x ?
    • Resolution: disable -race
  • Need to use -race?
    • Resolution: downgrade to 1.21.x


  • Janez Justin removed go-getter in this PR in favour of utilising the stdlib's net/http and compress/gzip to download the pact_ffi dependencies for the project. This helped him resolve an indirect vulnnerablity in Pact-Go and has the additional benefit of greatly reducing the size of the dependency tree. Thanks Janez!
  • Still stuck on Pact-Go v1.x? You can now publish pacts with the branch property set, thanks to this PR
    • Note: If you are using Pact-Go v2.x, you will utilise the pact-cli tools for publishing pacts, which already supports the branch parameter.


  • The main Pact documentation website has been updated to include the new Pact-Go V2 package and documentation. It seems we missed our doc's sync job when promoting V2 from it's beta state. Not to fear though, thanks to a community report for identifying, it has now been rectified and you can find the new documentation here.

Chat with us in: #pact-go.




Chat with us in: #pact-js.



🎺 Pythonista’s rejoice.

We are thrilled to announce the release of Pact Python v2.2, a significant milestone that not only improves upon the existing features but also offers an exclusive preview into the future of contract testing with Python.

Be sure to read about at pact-pythons new doc site, in its inaugural blog post from maintainer Josh Ellis.

Chat to us in: #pact-python.

Community Events​

Solving the integration testing puzzle with contract-based testing​

Bas Dijkstra is an independent test automation consultant and trainer, who has been active in the test automation field for some 16 years now, and has worked on software testing and automation solutions across a wide range of programming languages, frameworks and technology stacks.


He recently delivery a talk about contract testing with Pact.NET, which you can watch here.

I'll hand over to Bas in his own words, to describe what's in store.

Setting up and running integration and end-to-end tests in distributed software systems is hard. Making sure that all components are deployed, with the right version, in the right state, with the right data is a challenging task for many teams.

Contract-based testing is an approach that tries to address this problem and simplify and speed up integration testing for distributed software systems.

In this talk and recorded demo, you'll learn about the basic principles behind contract-based testing, the questions it tries to answer, and the three different approaches to contract-based testing. You will also see contract-based testing in action, using the well-known Pact.Net library for C#. To wrap up the talk, we will also talk about how to adopt contract-based testing in your team and organization, and some of the potential pitfalls that should be addressed along the way.

If you want to get in touch, please use the contact form on his site, or send Bas an email at

Hot new reads​

We've often wondered when a book dedicated to contract testing would appear on the scene. We even had this statement on the books section of our site

We're not aware of any books currently dedicated to contract testing, but here are some that talk about Pact and contract testing as part of a broader microservices development and testing strategy

However good news everybody 🎺

Contract Testing In Action​

Contract Testing In Action book cover

We are pleased to announce that Contract testing experts Marie Cruz and Lewis Prescott, have put pen to paper, and have just released the Contract Testing in Action πŸ“• under the MEAP (Manning Early Access Program).

Contract Testing in Action is a hands-on guide to contract testing for microservices applications and other systems of loosely-coupled components. After learning the basics of contract design and implementation, you’ll dive into constructing your own contract testing framework. You’ll explore the leading contract testing tools, including Pact, PactFlow, and GitHub Actions. Plus, you’ll set up consumer-driven contract testing for REST and GraphQL APIs and learn to integrate contract testing into a CI/CD pipeline. Finally, you’ll delve into provider-driven contract testing, which simplifies adoption by utilizing your existing stack and practices.

What does early access mean for you?

  1. You get a book dedicated to Contract Testing, written by industry leading experts.
  2. You get the chance to offer direct feedback, into the chapters as they progress. You can join the discussion forum here.
    1. This allows you to stamp your mark on the world of contract testing.
  3. If you love the book, we would love the following:
    1. Quotes that could be used in the book
    2. Social Media promotion

How can you get your hands on a copy?

Check out Contract Testing in Actions page on Manning's site.


πŸ₯· Want a discount?

You can use CTA45 between April 29 to July 30 to save 45% πŸ€‘

πŸŽ₯ If you want to give the book some promotion, or offer a quote, reach out to Marie, Lewis or myself

Thats a wrap​

Want to carry on the conversation? Sign up here to join our Slack community, where you will be amongst over 5k other users. It's a safe place to ask questions, and a great place to share the awesome work you are doing in the Pact ecosystem.

Whatever you are up to, let us know, and we can look to get you featured in the Pact post.

See you next month folks!

Cheers, Saf

Β· 10 min read

Welcome everyone, to that time of year when the πŸ•’ shifts an hour forward, the 🌞 shines on for a bit longer, which is nice, after a πŸ₯Ά and 🌧️ winter. It's March and we are live for another Pact Open Source update.

We've got lots of community contributions this month, and pleased to announce that Pact-PHP v10 is wrapping up for an official release, which will bring that Pact Rust core to more users, bringing speed and reliability benefits over the existing implementation. Huge props go out to Tien Vo πŸ‘¨πŸ»β€πŸ’» for the incredible coding marathon, and Lewis Cowles πŸ•΅οΈ for the code reviews.

Pact OSS Updates​

Specific language updates​


Pact-PHP: V10 is nearly here. πŸš€ This brings the Pact Rust core to Pact-PHP allowing support up to the Pact V4 specification, which includes http / async & sync message / plugin interaction support, as well as allowing these to all co-exist in a single Pact file.

Here is a bit of a timeline of activities:

  • βœ…10.0.0-alpha7 release just went live
  • βœ… Creation of a release/9.x branch from current master branch for anyone who still want to work on Ruby Standalone code.
  • βœ… Merging of ffi branch into master
  • πŸ”œ Official release of Pact-PHP v10
    • alpha -> beta -> release

Once again we want to thank Tien and Lewis for their efforts in bringing this across the line. It is a testament to open-source collaboration across the globe, and has been really fun to watch. I really hope you enjoy using the new release. Be sure to drop us feedback like Steve Taylor did in this Github Issue

Not an issue as such, just want to say I love it. (I'm using 10-alpha3) It's so much faster and simpler, and I'm looking forward to using some of the newer Pact specification features. My API tests came across easily without much fuss.

Chat to us in: #pact-php.



  • Multi-Arch Docker images.

    • You asked for it, you got it!

      • --platform=linux/amd64

      • --platform=linux/arm64

      • DockerHub Images

    • Whats left?

      • CI pipeline to automate building/publishing of Docker images
      • Publishing of images to GitHub container registry
  • Alpine Support

    • Linux binaries are now built with musl statically linked rather than glibc dynamically.

      • This means any Linux users, regardless of distribution should all be able to use a single architecture specific binary.
    • Releases

      • pact-verifier-cli

        curl -LO$(uname -m).gz
        gunzip pact_verifier_cli-linux-$(uname -m).gz
        mv pact_verifier_cli-linux-$(uname -m) pact_verifier_cli
        ./pact_verifier_cli --help
      • pact_mock_server_cli

        curl -LO$(uname -m).gz
        gunzip pact_mock_server_cli-linux-$(uname -m).gz
        mv pact_mock_server_cli-linux-$(uname -m) pact_mock_server_cli
        ./pact_mock_server_cli --help
    • Whats left?

    • Pact FFI Alpine specific static and shared libraries

      • These are now published, and require consumption in client libraries. Contributions are welcome, otherwise you'll hopefully see these rolling out throughout the year.

Chat with us in: #pact-rust.

Node JS​


Pact-JS Features​

Did you know, Pact-JS now supports the V4 Specification via the PactV4 interface. The documentation has been updated to reflect this. Found an issue or gap? Let us know

Corporate proxy support was delivered by Zac Poe in this pull request

  • feat(corporate proxy #1188)

In Zac's words

Add native support of HTTPS_PROXY and HTTP_PROXY for verifier for #1188

This change adds two pieces of behavior:

  • The verifier's 2 step parse body behavior now uses a proxy request buffer (instead of the 'proxyReq' rewrite behavior) to ensure the request stream is accessible for intermediary agent behavior
  • The verifier natively supports HTTP_PROXY/HTTPS_PROXY config and assigns a proxy http Agent where those values are present

This results in out-of-the-box support for corporate proxies in the js verifier

Thanks Zac πŸ™Œ

Pact-JS Fixes​

Dany Marques went down the NPM rabbit hole, to investigate the root cause of a very interesting bug, affecting NPM registry proxies, and npm script-jacking!

Some long nights with his detective hat on, saw Dany find a suitable workaround as an interim for the Pact-JS project, as well as upstream fixes to the npm project itself. We cannot thank you enough for your herculean efforts.

Matt Fellows fixed an issue where matching rules are not supported in messages: pact-foundation/pact-js#1183.

If you've been stuck on either of these issues, be sure to give it a re-test!

Chat with us in: #pact-js.

React/Cypress users​

GearΓ³id Γ“ Treasaig upgraded one of our example repos which contains our vanilla React "Product" API consumer used across all the JS HTTP based examples, and additionally includes Cypress and Pact-Cypress-Adapter.

GearΓ³id utilized to stage his pull-requests in distinct commits. The PR for good reading if you are preparing for upgrading some major dependencies in your JavaScript project, and want an example to follow. Thank you, we really appreciate it.

If you want to get involved, why not pull down the example and try it out, or apply upgrades to one of our many example repos. We would greatly appreciate it, and it is a neat way to start contributing to open source, if you haven't managed to already, but want to start somewhere!

Pact Broker​

Pact-Broker: Multi-Platform support + GitHub container registry support.

Multi-platform images are available

  • --platform=linux/amd64

  • --platform=linux/arm/v7

  • --platform=linux/arm64

  • DockerHub Image

    docker pull pactfoundation/pact-broker:latest
  • GitHub Container Registry Image

    docker pull
    • Note: The Org name needs to match our GitHub org, so note the additional hyphen - between pact-foundation

Pact Broker on AWS Fargate with CDK​

The beauty of the Pact Broker nature as a Docker image, means that it can be deployed in a multitude of different ways, and the architecture considerations are the end users to determine, implement and manage.

There are projects which seek to offer experiences with Terraform & Helm in order to provide some out-the-box experiences for regular deployment platforms.

Most of these have come from community contributions, either publicly displayed on GitHub, or shared back into the Pact-Foundation, such as pact-broker-chart.

I'm pleased to announce that we've had a community contribution by learnautomatedtesting of a PactStack, an open source tool utilizing gitlab AWS CDK to publish and deploy a serverless framework of the pactbroker and postgres database.

PactStack is a serverless solution for running a Pact broker alongside a PostgreSQL database entirely on AWS Fargate, leveraging the AWS Cloud Development Kit (CDK) for infrastructure as code. This solution is designed to facilitate contract testing between microservices by providing a centralized broker for storing and retrieving Pact contracts. The stack includes an ECS cluster, Fargate services for the Pact broker and PostgreSQL database, a CloudWatch Log Group for logs, and an S3 bucket for storing Pacts.

You can check out the repository here and see it in action against a full worked example

We've not had the chance to test this out yet, but if it appeals to you, please feel free to try it out and let the author know if you have any issues.

Chat to us in: #pact-broker.

Pact Ruby CLI​

Pact-Ruby-CLI: Multi-Platform support + GitHub container registry support.

Multi-platform images are available

  • --platform=linux/amd64

  • --platform=linux/arm/v7

  • --platform=linux/arm64

  • DockerHub Image

    docker pull pactfoundation/pact-cli:latest
  • GitHub Container Registry Image

    docker pull
    • Note: The Org name needs to match our GitHub org, so note the additional hyphen - between pact-foundation

Chat to us in: #pact-ruby.

Pact Docs​

Martin Gallauner is on his road to Pact Nirvana, and has been dropping some edits to the guide as he is working through it.

Thanks Martin, we really appreciate it and know that our end-users will to!

Did you know, that the majority of our website documentation was written by volunteers and it is a collective smattering of shared knowledge. A contract testing wikipedia if you will.

Whilst this is awesome, it can make a new users journey, a little disjointed at times, as they can feel overloaded with information.

We'd love to look at the documentation estate as a whole this year, and redesign our user journeys. If this appeals to you, why not get in touch.

Community Events​

Women Who Go London Feb 2024​


I had the pleasure of traveling down to London and speaking to a load of budding software-engineers at Deliveroo HQ about GoLang via the Women Who Go London group!

How do we test our applications now, what are the benefits and drawbacks of each way of testing and how does integration fit into all of it. Yousaf explains it all and provides examples on how to start contract testing with Go and Pact.

You can check out the slides here

Sanyia Saidova walks us through the journey of how to shape your platform to account for growth in your application - what decisions lay in your path as your userbase grows and how to weight them.


You can check out Sanyia's slides here

Are you in, or near London? Do you love coding? Do you want to build a more diverse and inclusive Go community? Why not join us the WWGL Meetup group and attend an event soon.

Community shout-outs​

Big shout outs go to these contributors for their efforts, big and small.

  • Tien Vo for his dedication and determination to complete the pact-php rust core migration, I'm sure it's been a learning journey and you've come out as an even better PHP developer. We hope you can take you learnings and apply in a day job, as many others will be able to apply your code against their projects, providing safety and guarantees for years to come.
  • Lewis Cowles for the continual reviews in pact-php and support for Tien Vo.
  • Dany Marques for his tenacity in tracking down an obscure bug in the npm ecosystem, and creating upstream fixes, as well as resolving his issue in the interim in the pact-js project.
  • GearΓ³id Γ“ Treasaig for a series of PR's to improve the quality and health of our examples.
  • learnautomatedtesting for the Pact Broker AWS Fargate project and demo.
  • Zac Poe for corporate proxy support in Pact-JS

No matter the contributions, your work will make a positive impact to end users, who wish to benefit for Pact's feature-set, no matter the language or the tooling. We love seeing users bring fixes, improvements and new features to the Pact stable. We can help support you, if you aren't sure where to start.

What's stopping you?

Thats a wrap​

Want to carry on the conversation? Sign up here to join our Slack community, where you will be amongst over 5k other users. It's a safe place to ask questions, and a great place to share the awesome work you are doing in the Pact ecosystem.

Whatever you are up to, let us know, and we can look to get you featured in the Pact post.

See you next month folks!

Cheers, Saf

Β· 20 min read

Hello, and welcome to our first Pact Open post of 2024. It seems customary that you get a month's reprieve from me at the start of every year, so I'll start by saying Happy New Year to everyone, and also Happy New Year of the Dragon, to those who celebrated the Chinese New Year recently.

I hope you all had the chance to wind-down, relax and spend time with people you care about, whilst looking back, hopefully with a smile, at all the things you achieved last year. If you helped get involved in Pact, in any way, big or small, we are grateful.

Anyhow, that brings me to February, and I get the pleasure of letting you know what has been happening across the Pact estate over the last 8 weeks!

Pact OSS Updates​

Specific language updates​


Pact-Reference: Lots of changes in the Pact-Reference project, from Ron and others. You'll find Pact FFI 0.4.16 out with a number of QoL improvements from a range of contributors.

Chat with us in: #pact-rust.


Pact-Plugins: The pact-protobuf-plugin has seen an uptick in usage, with several new contributors raising issues and fixes. We appreciate both, especially if the issues come with reproducible snippets as we have been seeing. Keep it up.

Fixes by Ron:

Have you tried out Pact Plugins yet? What's stopping you?

Chat with us in: #pact-plugins.


Pact-net: 5.0.0-beta.2 was released a few days ago which includes the following

  • Replaced Newtonsoft with System.Text.Json (see upgrade guide for more info)
  • Increased minimum supported .Net Framework version to 4.6.2
  • Marked MacOS ARM architecture as fully supported
  • Upgraded to FFI 0.4.16
  • Upgraded tests to .Net 8 and .Net Frame 4.6.2
  • Find unused ports for the messaging server more efficiently

Want to upgrade? Check out the upgrade guide here.

Still on Pact-Net v3.x and want to migrate to the latest stable v4 version? Check out the upgrade guide here.

Whats next? Pact Plugin support! Check out the RFC for more detail, and feel free to add your feedback.

Chat with us in: #pact-net.


Pact-go: v2.0.4 has just been released, which bumps the Pact FFI and includes external contributions from Armin Becher and Stanislav Vodetskyi, thanks guys πŸš€.

  • feat: add native lib path function #376
  • fix: allow empty responses in sync messages (#386)
  • fix: update pact-ffi to 0.4.16

Armin's change looks to improve the developer experience for GoLang users utilising Windows. Are you one of them?

Chat with us in: #pact-go.

Node JS​

Pact-JS: v12.2.0 has just been released. This introduces the PactV4 interface into GA (it was previously feature-flag enabled). This allows for Pact plugin support to the Pact-JS project. A team effort, led to a vulnerability fix, closing off an outstanding issue, thanks Yukun & Rufei. Matchers can now be applied to response bodies, thanks to this PR

Want to see the plugin framework in action in Pact-JS? Check out our gRPC example here.

Chat with us in: #pact-js.


Pact-Python: Josh has been continuing to work on the pact-compatability-suite integration in order to verify the Pact-Python integration with the Pact Rust libraries works correctly. You can keep track of the road to V3/V4 and the Rust backed implementation in this tracking issue. We saw a community fix: ensure interactions are not left when exception occur inside with statement from Jakub Stolarkski.

We hope to get a release out shortly, which will bring in an updated pact-ruby-standalone, and support for Python 3.12, and Jakub's fix. Also don't forget to watch the repository, if you want to be first in the loop when the new release lands, and later in the year you can start trialing the pact rust engine in your pact-python projects.

Chat to us in: #pact-python.


Pact-PHP: Tien Vo has been on fire over the last 8 weeks, buoyed by Lewis Cowles input at review time. It has been nice to see Lewis dropping in to help lighten the load of Tien as well. It's nice to watch from afar, as I can see them both learning off each other, and goes to show how much collaboration helps as sometimes it can feel like a lonely place when you are just plugging away.

Changes in the FFI branch include:

  • Implementing of the V1 Consumer / V1 Provider/ V2 / V3 and V4 pact compatibility suites. If you've not seen the compat suite, it uses Cucumber to describe the Pact features, and Pact-PHP is using the Behat flavour. It is worth taking a look at.

I'd recommend dropping into the FFI branch, and checking out some of the examples where you can see Pact-PHP being used for contract testing gRPC services.

Have you trialed the V10 Beta of Pact-PHP?

Chat to us in: #pact-php.

Pact Broker​

Pact-Broker: JΓΆrgen Andersson is helping keeping the Pact Broker up to date, by updating our base image to Ruby 3.2.3, the Alpine version from 3.17 -> 3.19 and upgrading Supercronic 0.2.29.

Unfortunately moving to Alpine 3.19, broke Sqlite for x86_64 users, in the same way that it had been noted to have been broken in the aarch64 and arm images. We got a couple of reports, one from a fellow maintainer, and another from a user, which provided a cookie trail, which led to a fix, building sqlite3 gem from source, which not only solver the issue in our x86_64 image, and the outstanding aarch64/arm issue as well.

What does this mean for you? We will soon be publishing our multi-manifest images, without a -multi suffix, which means whether you are running on shiny M-Series macbook, a Raspberry PI, or your Intel/AMD gaming rig, you'll be able to pull the latest image, and get a native image that is right for your system.

Chat to us in: #pact-broker.

Pact Ruby Standalone​

Pact-Ruby-Standalone: Our fork of Traveling-Ruby has been updated with a few goodies.

What does this mean for users of the Pact Ruby Standalone project?

  • The ruby runtime is updated to Ruby 3.2.3
  • The bundled version of OpenSSL is now bumped to 3.2.0
  • The dependency on bash is gone! Yep, you heard that right, you can get away with sh only which means no more bash required in your Alpine images.

Pact Workshops​

The following workshops have been updated to use the latest versions of the Pact client libraries:

Yo dawg, I heard you like Alpine​

Unless you've been living under a rock, you've probably heard about Alpine. If not, it is a variant of Linux, which many teams choose to run their builds on due to its tiny footprint, and smaller security surface area. One of the significant areas of differences to more regular flavour of Linux (Debian/Ubuntu/Fedora etc), are it's choice of standard library. With Alpine choosing musl whilst others prefer glibc. This poses challenges for distributors of packages used within the Linux ecosystem.

So lets take a look at our options.

  1. We provide a single distribution, linked to glibc:
    1. Users need to be aware that the distribution is linked to glibc.
    2. Alpine users are required to perform workarounds.
    3. There will be a performance overhead in calling a program linked to glibc, over musl for Alpine users.
    4. Compatibility is not guaranteed, so further issues may occur, which can become complex to diagnose, especially if not reproducible on a glibc based distro.
    5. Maintainers need to ideally update their code to detect the presence of musl, to inform users of compatability issues. In many cases, glibc programs won't run without the Alpine workarounds, and therefore there is no ability in code to provide useful messages to users, so the onus is on them reading the documentation.
  2. We provide two distributions, one linked to glibc, one linked to musl:
    1. Users need to be aware of which std library they use, glibc or musl.
    2. Maintainers need to ideally update their code to detect the presence of musl, so they can provide the correct musl package to users. This can be challenging.
    3. Alpine traditionally prefers creating static builds, which can cause the inability of client languages to link to the shared C libraries.

Rust Core​

Alpine support has not been made available to the pact-reference project, often referred to the Pact Core, with our official guidance on our website:

Alpine is not supported as it requires us to build dynamically linked libraries for each specific version of Alpine and musl. It's possible to make it work, but we make no guarantees and it's likely to break in subtle ways and we would instead recommend adopting Ubuntu or Debian which supports linking to glibc.

I'm not sure how many users have been limited by this, unable to switch from Alpine based containers, and therefore unable to utilise the pact-reference project, and all the V3/V4 Pact Spec goodness, along with the benefits that the Pact Plugin ecosystem providers, however there were enough issues on our repositories to make it a worthwhile wander to investigate. I've documented it in this issue in our pact-foundation/devrel repo.

The pact-core consists of a few elements, which are of use to end consumers, and languages, who are not using Rust.


You can take a look at the ecosystem here.

As the project is built with Rust, we can easily add in musl targets, both aarch64 and x86_64 with Cross (we'll talk a little about Cross in our next section).

The CLIs are easy, add in our required targets, build with cross, and out pops a musl based executable.

Shared libraries are a little more awkward. In order to tell Rust to create a shared library, we use the cdylib notation in our Cargo.toml file. This pops out shared libaries, when we build it with the following extensions.

  • Linux .so (shared object)
  • MacOS .dylib (dynamic library)
  • Windows .dll (dynamic linked library)

The extensions here, denote that they are shared libaries. If one was to build them statically, they would return a .a extension, which denotes archive. These files are in order of magnitude larger than their dynamic counterparts, as they self-contain everything needed to run the program, without requiring any external or system libraries.

When we build for Alpine targets, we only get a .a file output. Whilst this is perfect for some of our client languages, some such as PHP, Ruby and .NET to name a few, are unable to read .a files, excluding them from the picture.

It's possible by setting some flags, either as Rust compile time, or by using some gcc commands to take a .a file, and convert it into a shared object file. With this newly created file, we can load it with PHP, Ruby and .NET, in Alpine successfully.

In order to get green test suites, under the Alpine platform, it was necessary to also update parts of the Pact plugin framework to become musl aware, such that if it detects musl, it attempts to download a musl variant of a plugin. If the musl variant doesn't exist, it would be nice if we could attempt to load the glibc variant, which may work with the compatibility workarounds discussed earlier. If we can warn the user, so they can take an proactive actions, even better.

For two of the plugins, protobuf and csv, these are written in rust, so again we can follow our same pattern to enable musl variants. For our sample build your own plugin template, it is written in GoLang, which uses Goreleaser to build the linux variants. There is the added benefit that the application is built linked against musl, but able to be run on machines that link to glibc or musl, meaning there is no need to produce a separate musl named artifact.

The last of the plugins I took a look at was pact-avro-plugin, created by one of our community members Ali Ustek. This particular plugin is written in Java, so required the end user to install at least the JRE, if not the SDK, of Java 17, in order to use it. It also had a requirement on bash, in it's startup script, but the author has since updated this to use a sh based wrapper, meaning end users on Alpine, won't additionally need to install bash. Hooray!

Lower is better​

Whilst we've been talking about glibc/musl, it's usually good to know that they tend to be forwards compatible, such that if you build against an older version of musl or glibc, then your application will work with later versions of each respective library.

If you happen to build your application on the latest version of Alpine (musl) or Debian (glibc), you'll find users of older versions of those distro's will have errors running your application due to missing symbols.

We can resolve that using fixed images, which carefully control the versions of musl/glibc that we link against.

Now rather than creating our own build-box, the cross-rs project allows Rust based projects, to compile (and cross-compile) for multiple targets. Each of these targets, has a corresponding build image, and the team provide a brilliant table of the libc versions in place.

Now you'll note against the main branch, the glibc version is 2.31. This caused issues for several users, often for them indirectly. For example, one might be running an official NodeJS image, for an older version of Node, say version 16. These images are no longer being updated, as Node 16 is EOL, so it's built against an older version of Debian, which runs an older version of glibc, than 2.31. Oh noes!

Whilst our user in our story, was able to unblock themselves by updating to a later node image, which contained a later distribution, we are unknowingly excluding many Linux users from utilising the Pact Framework.

That isn't a place we'd like to position ourselves, as we understand that not only do teams in greenfield applications, who have the freedom to choose their tools and techniques, often pick contract testing, but that teams supporting heritage (legacy) applications, who for many varying reasons, might not have the ability to upgrade their infrastructure to the latest and greatest at the drop of a hat. These teams can benefit too from contract testing and should not be omitted from the frame.

So how do we solve it?

By pinning our version of cross to 0.2.5, our glibc based targets will link to 2.23, as shown in this cross target table

One of our community members Omair Majid posted this table of glibc versions in use across common linux distributions.

Distributionglibc version
Arch Linux2.36
Alpine 3.13N/A
CentOS 72.17
CentOS Stream 82.28
CentOS Stream 92.34
Debian 9 (Stretch)2.24
Debian 10 (Buster)2.28
Debian 11 (Bullseye)2.31
Fedora 352.34
OpenSUSE Leap 15.32.31
OpenSUSE Tumbleweed2.35
RHEL 72.17
RHEL 82.28
RHEL 92.34
Ubuntu 18.042.27
Ubuntu 20.042.31
Ubuntu 22.042.35

Ruby Core​

So what about Ruby? I spoke earlier about our fork of traveling-ruby, which recently underwent some updates. Whilst on my Alpine adventures, I realised that there would now be some disparity between the platforms supported by the Pact Rust core, and the Pact Ruby core. That was an itch, I needed to scratch. Could I bring native musl based support to traveling-ruby? That way not only do we need to tell users, they no longer need bash, due to using sh compliant wrapper scripts, but they no longer would need a compatability layer, if one was running Alpine.

So similar to Cross, the traveling-ruby package uses Docker images to build for Linux. They are referred to as a holy-build-box, and was originally created by the Phusion team, of Passenger fame (and also the creators of traveling-ruby). The box used for building the current linux packages are based on Centos7 which links to glibc 2.17.

So I would need to create an Alpine based holy-build-box and see how far could get. Turns out pretty far and I managed to successfully Alpine/musl based packages for aarch64/x86_64. They were built on an Alpine 3.15 box, and have been tested up to the current 3.19 Alpine release.

Itching to try out the musl based packages? I've published a release from my fork of pact-ruby-standalone, that you can take out for a test drive today.

Who and whose ARMy?​

Multi-Manifest Images​

For the last year, we have been trialing multi-manifest images for the pact-cli and pact-broker docker images, which you have to opt in to use, by appending the tag name with -multi.

We've had a small amount of feedback, mainly all positive, with hopefully the last of the gremlins sorted (Sqlite3 was failing on arm64 images, then x86_64 images, resolved by building from source), so we are beginning to drop the multi suffix.

Pact-CLI has been the first, and also it celebrates it v1.0.0 release. You can find a multi-manifest tag with AMD64/ARM64 and ARM flavours here.

We would also like to publish our images to GitHub container registry in order to alleviate any pain, DockerHub's rate limits may be imposing on teams. The first of a series of PR's across our images is here, and a tracking issue here.

GitHub Actions launches ARM64 MacOS Runners​

We recently introduced ARM64 CI testing capabilities via CirrusCI last year, and rolled it out to several of our repositories, which unlocked cross-platform, cross-architecture testing for our maintainers, however due to licensing changes, CirrusCI began limiting OSS users usage, which mean monthly, builds would fail as we moved over our limits.

This was an inconvenience, but not limiting as we had not removed our existing GitHub Actions workflows, and were infact waiting for GitHub to unlock access to MacOS M1 runners for OSS usage. That time came last month, and we have see it applied to a couple of our repositories already.

If you spot a repo not covered by the new macos-14 runner, why not drop a PR in on the project?

Windows on ARM​

Are you running Windows on ARM? Whether you running it natively, or you are enjoying it via your speedy M-Series Apple processors via Apples Virtualisation framework (Check out UTM for a rather splendid open-source virt tool), I've got some good news for you.

We have started to publish support for Windows on ARM across a few of our projects. I'll borrow our list of Rust tooling before, as it'll highlight some of the gaps that we still need to cover. If you want to see Windows on ARM via your favourite Pact Client library, why not help fill in some of the blanks.

So what about Ruby? Not again Saf! Well it turns out Windows on ARM for Ruby, transpired to be a bit more complex, with even x86_64 emulation being broken in some versions. Users would come across this error, which would ultimately be solved for arm64 native builds (still broken in x86_64 emulation mode) via this patchset.

With this in place, it is now possible to compile later versions of Ruby > 3.1 for arm64 via a clangarm64 msys2 environment, and official msys2 packages were released for Ruby 3.1.4.

Traveling-Ruby utilises RubyInstaller2's packages for bundling Ruby and your gems, for distribution, but is awaiting arm64 support, with a request here. One can't utilise the msys2 packages directly, without a couple of tweaks, as RI2 maintains it's own Pacman repository with Ruby builds.

So I had a little dive into RI2, and managed to get it building for ARM64, consumed via traveling-ruby and consumed in pact-ruby-standalone locally.

Community Events​

Eric DeAndrea - How to avoid common pitfalls with modern microservices testing​

Eric DeAndrea spoke this month at the San Francisco Java User Group where he some common battle scars from our experiences in the field. He introduced the testing pyramid and explained why it is important in helping to continuously deploy microservices independently without fear. He also demonstrated, through a test-driven development approach, how the combination of Pact contract testing combined with Quarkus developer joy can help prevent your microservices from breaking in production.

Missed it? Don't worry you can catch the slides here, and you can be sure to hear more from Eric throughout the year. I would recommend following his socials for heads up on his next event.

WomenWhoGo - London​

WomenWhoGo London

If you're based in London, why not link up with the Women Who Go community, who are holding their first in-person event of 2024.

You'll get to hear from Sanyia Saidova from Deliveroo who will be speaking about Growing your application from prototype to production, and I'll be talking about Pact + GoLang - Contract testing for the past, present and the future (and how you can get involved!).

You can check out the meetup event here.

Community shout-outs​

We'd love to give a huge shout out to Stanislav Vodetskyi, who has been going above and beyond to improve the Pact-Go experience, by not only dropping PR's in the Pact-Go project, but rolling up his sleeves, learning Rust on the fly, to provide PR's in the Pact-Reference and Pact-Rust project, to improve the gRPC plugin capabilities, either by bug-fixes or improvements.

It's great to the see the plugin framework being actively used in an organisation, and this adoption helps bring more use cases to the table, and the feedback we receive in terms of Slack, GitHub issues or pull-requests, all go a long way to helping new users embrace Pact Plugins and the DX around it.

If you've spotted an improvement you can make, why not strike up a discussion with the maintainers, or fork the repo and have a play.

Thats a wrap​

Phew, that was a-lot! I didn't even scratch the surface, as this is only a small selection of the repositories across the Pact Foundation. If I missed something you achieved since the start of 2024, be sure to give me a shout so I get you a mention in the post.

If you haven't yet contributed to the Pact project, this is your year. If you are stuck and don't know where to start, why not join us in our Pact Slack community.

Sign up here!

See you next month folks!

Cheers, Saf

Β· 4 min read

Pact Almanac 2023​

Grab your hoverboard, and get prepared for another trip back to the future, with our round up of this years Pactivities in our seasonal Pact Almanac.


We had a raft of code features, patches, fixes and new projects added to the Pact-Foundation over the year. If you haven't read our monthly blog posts, you can read a round-up of the most significant changes from each month in there. Check out the side-bar to the left to view the older posts.

I've mainly focused on video content this time round, where you can find multiple advocates of Pact, spreading the word of not just how to do contract testing, but the why. I hope you'll enjoy them, be sure to like and comment on the videos, whether it's to show your appreciation or you just fancy a debate.

Oh, and if you are the debating type, why not join us in a fireside chat next year?

Anyhow, let see what each month has in store for us.


Kicking off the year, we introduce a blog post from eBay titled API Evolution Is a Challenge. Could Contract Testing Be the Solution? You can read it here


Diego Herrera introduced spoke at at EdinburghJS with a talk titled Testing services with Pact. Watch it here


Holly Cummins discusses how contract tests combine the lightness of unit tests with the confidence of integration tests, and should be part of your development toolkit. Watch it here


Lewis Prescott caught up with Janet Gregory and Lisa Crispin (Authors of the famed Agile Testing book), where they talk about how to use holistic testing with microservices and contract testing. You can watch it here.


In this k6 Office Hours episode, Developer Advocates Marie Cruz (long time Pact friend) and Paul Balogh discuss what contract testing is, if schema testing is the same as contract testing, and how to do schema validation testing using Grafana k6. Check it out here


gRPC and Protobufs are increasing in popularity, however, there are multiple classes of problems that may result in API breaking changes. In this video, we show how you can apply contract testing to gRPC and Protobufs systems using Pact and its Plugin framework. Watch Matt, show a quick demo of it in action here


Dave Farley from Contiunuus Delivery explains why Contract Testing For Microservices IS A MUST, in his video here

For our Polish speaking friends, you can watch Jakub MaΕ‚yjasiak from Ocado Technology, talk about How Pact is more than just contracts and tests, here from a local meet up WrocΕ‚aw.


DPoint, helped demystify contract testing, in this video here, you can also see it in action with Spring Boot demos for both producers and consumers.


Ebay explains Consumer-Driven Contract Testing and how could they use it to improve testing their Microservice APIs with Pact? Watch their video where dive into the theory of Contract Testing, the potential benefits of using it, and some practical examples, here


It was Pact's 10th Birthday, and you can find your map to all the resources that came out of our month long celebration in this blog post.

LambdaTest spoke with Bas Djistrka about Solving the Integration Testing Puzzle with Contract Testing, as part of the Voices of Community series. You can watch it here


Matt Fellows spoke at Testing Talks Conference in Melbourne, where he provides a comprehensive guide to Pact. Watch it here


Angelo kicked off December with a tutorial showcasing interoperability with a PHP backend and JavaScript frontend powered by contract testing, watch it here

See you next year folks​

Thanks for everyone's efforts in using, promoting, and preaching about Pact to everyone you know, now its our time to repay the favour.

If you've done something great, and want to share it, get it listed - the site is open source and you can edit any page, we want to give you a platform to help amplify your voice!

Maybe there is time to get one last video/blog or PR in before crimbo! No, only joking, that’s a wrap for this year's Pact Open Source Almanac, pop your feet up, enjoy your puds and hope to see your name in the book next year.

Β· 6 min read

Happy November everyone! I'm sure holidays for most are fast approaching, and as it's the season for giving, we'll be sharing all the updates across the Pact community and giving you a heads-up about our latest webinar where you can see all of SmartBears open source tools in action, including yours truly, Pact.

OSS Updates​

  • Pact Compatibility Suite
  • Pact Reference
  • Pact PHP
  • Pact Python
  • Pact Broker Client
  • Pact MSW Adapter

Pact Compatibility Suite​

Tien Vo (Pact-PHP), and Josh Ellis (Pact-Python), have both been working on verifying their Pact client implementations against the new Pact Compatibility Suite.

It will help root out inconsistencies in implementations and ensure feature parity. If you are interested in checking it out, or contributing, please jump in. You can retrospectively apply the tests against existing implementations to ascertain their completeness/correctness.

This will be a massive boost to end users, so we would appreciate any help!

Pact Reference​

As Tien as been working through the compatibility suite, he has noted some improvements that can be made to the Pact-FFI, which would otherwise has been found sporadically usually through end-user issues.


Tien brings more features to the ffi branch of pact-php

Pact Python​

Josh implemented the Pact (Consumer) Compatibility Suite (V1) in this PR utilizing the pact_ffi core, great steps in progress towards full specification compatibility, and that juicy V3 and V4 Pact Spec goodness, you Pythonista's have been waiting for.

Pact Broker Client​

Two new features arrive in the Pact-Broker Client.

  1. pact-broker publish PACT_DIRS_OR_FILES --auto-detect-version-properties
    1. When publishing Pacts, by setting --auto-detect-version-properties, you can now automatically detect the repository commit, branch and build URL from known CI environment variables or git CLI.
    2. Supports Buildkite, Circle CI, Travis CI, GitHub Actions, Jenkins, Hudson, AppVeyor, GitLab, CodeShip, Bitbucket and Azure DevOps.
    3. --auto-detect-version-properties is aliased to -r to ease of use
    4. The recent feature improvement introduces the detection of the commit and buildUrl, rather than only the branch, greatly simplifying our recommended Pact Nirvana workflows for users
  2. delete-branch
    1. Users now can delete branches from the CLI

Pact MSW Adapter​

Mock Service Worker (MSW) has fast been becoming the industry standard API mocking for JavaScript, we heard that cry, and created a project to help you leverage the contract testing goodness of Pact, with the power of MSW.

At the end of October, Artem, MSW's creator announced the launch of MSW v2.0, with a raft of changes to improve the life of end-users and plugin authors.

Not long after, Jakub Riedl from CultureAmp, long time friends of Pact, helped bring our adapter in line with MSW v2.0. You can check out the PR here. This is actually his third contribution to the adapter, which is awesome to see.

Not only that, Joel Whalen has been working on support for GraphQL, in the adapter. Already supported by MSW, this would allow for MSW gql interactions to generate Pact contracts. You can check out his progress here.

I also noted whilst I was npm surfing, a new pact-msw package has been launched, this isn't an officially supported version but it's always great to see people working with Pact in the wild, so it might be worth your time checking it out.

Maintainer Meets​

Want to help shape the future of Pact? Why not join us?

We catch up every week with alternating times for the sessions, to aid with syncing with Europe / Austrailian members

  • 9am-9:45am UTC
  • 9pm-9:45pm UTC

You can download a calender invite from our DevRel repository, see Pact Community Meeting.ics

A google document holds our agenda which is openly editable and where anyone can table ideas for discussion.

Pact in the wild​

Bazel + Pact​

We spoke with Olivier Picaud back in July, about the work he was doing with Bazel & Pact, and why it was so important, personally for him.

We have an update


I have worked to associate Pact within Bazel by providing rules_pact The good news is that rules_pact has been accepted to be part of the official Bazel Central Registry

Happy to share this contribution with you guys and again thanks to help teams to facilitate their testing journey :)

VoilΓ  :)


You can check out the GitHub repo and a full worked example in

Community Events​

Are you hosting a Pact event? Let us know and we can feature it in the blog and list it on our events section.

Show and Tell: Discover the Benefits SmartBear’s Open-Source Tools Bring to the SDLC​

On Tuesday Dec 5th 2023 at 10am ET, the SmartBear Dev-Rel team will be showcasing OpenAPI, Swagger, Stoplight, Pact and SoapUI and how they can be used across your SDLC, along with tips, links and pointers on how to get involved with these open-source tools and communities.

You can register here, where if you can't make it, you'll be sent an recording for on-demand viewing.

Dec 5th OSS Webinar

Community Corner​

Omer Morad introduces Automock​

We spoke to Omer Morad back in June 2022, where he introduced NestJS-Pact into the Pact Foundation fold. We caught up with him this week, to find out what he's been up to.

Welcome Omer, we heard from you around a year ago in one of our community corner updates. I hear you’ve been working on a new open source project, would you like to tell our readers a little about it?

I've been working on Automock, an open-source mocking framework. Much of my time has been spent manually mocking for unit tests in dependency injection environments like NestJS. It may cause test suites to become unmanageably large and convoluted. For this reason, I made Automock. By creating mock objects for class dependencies automatically, it simplifies the unit testing procedure. Compatibility across multiple DI and testing frameworks will make the unit testing process easier by allowing developers to focus on writing test cases rather than manually configuring mock configurations.

Awesome! Thanks for sharing with us, hopefully this Automock is useful to others. You can find Omer in our Pact Slack group where you can talk about all things open source.

Thats a wrap​

That’s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi β€” Developer Advocate at PactFlow and Community Shepherd at Pact.

Β· 9 min read

πŸ‘» Happy Halloween all! This month you can look forward to our round up of all things Pactober that happened this month to celebrate 10 years of Pact and the usual open-source updates from across the Pact ecosystem.


Your πŸ—ΊοΈ to the months events.

Pactober Workshops​

Want to learn more about Pact, how it works, and how you can get hands-on?

Watch one, or the series of workshops over on our YouTube channel & check out the supporting material

OSS Updates​

  • Pact Rust
  • Pact PHP
  • Pact Python
  • Pact Go
  • Pact Mock Service
  • Pact Broker

Pact PHP​

Tien Vo showcased the work he has been doing in Pact-PHP during our Pactober birthday bash, you can check it out πŸ“Ί here.

However if you just want to jump into the code, Tien has published a new release 10.0.0-alpha3

You can find lots of examples in the ffi branch showcasing the new functionality.

Check out the merged pull requests, for all the latest work to date, and the open pull requests for anything you can help review!

Pact Python​

Joshua Ellis said Hello World to the Pact community during our Pactober birthday bash, you can check it out πŸ“Ί here.

He has also been super busy in the world of Pact-Python where we've seen a hive of activity.

Josh published his first release, v2.1.0 which is the first to include pre-built wheels published to GitHub.

This release also drops support for Python 3.6 and 3.7, allowing for improvements to the build-system that will keep Pact-Python healthy and maintainable long into the future.

Josh is now working on implementing the FFI feature set, in order to deliver v3 and v4 Pact functionality to the Pact-Python project, which can be tracked in the following issue

If you want to get involved, why not reach out via the GitHub repo, or via #Pact-Python Slack channel.

You'll also notice new issue templates, and labelling across the project, which should hopefully make the triaging process slicker for everyone. Please feel free to try it out and give us feedback, good, bad or ugly!

Pact Go​

Stanislav Vodetskyi helped deliver both a fix and an enhancement to Pact-Go

Alex also managed to add a change to our v1 (Ruby-backed) pact-go implementation, which will help him out with running multiple pact verifiers in parallel.

Are you using Pact-Go v2? Fancy lending a hand updating the pact-go workshop, to use pact-go v2?

Let me know, and I'm sure I can dig up some swag!

Pact Mock Service​

As our Pact ruby ecosystem progressed onto Ruby 3.x, it allowed Pact-mock_service to be updated to provide compatibility with Rack 3.

This was kindly provided by provided in this PR via Adam Forsyth.

Pact Broker​

Ben Brugman made his first PR ever :hooray: - This one upgraded Supercronic, which is a core dependency in our Pact Broker Docker image.

Pact in the wild​

Sngular OSS presents PactBuilderDSL for Java users​

PactBuilderDSL is a Java library that automates the generation of DSL for bodies in contract definition.

Do you struggle with writing the body validations for contract testing? If you're working with Java... I'm pretty sure you do.

It's pretty common to have huge methods with very similar code to generate them.

This is a need the Sngular team have detected many times not only in the community but also with our clients.

If all this is familiar to you, and you're interested in learning more, watch their talk on πŸ“Ί PactBuilderDSL.

Itching to see the code? You can see it in their GitHub repo sngular/pact-annotation-processor and published to the Maven repository.

How we reached Pact Nirvana​

Nathan Deamer, long time friend and Pact advocate, works over at GoCity where he looks after a team of incredible engineers.

We remember Barry Irvine's post from February about his adventures with Pact & Android.

Nathan shows us Pact through a wider lense at GoCity, as he shows us how they reached Pact Nirvana. It's a great read and motivating if you are on your own Pact journey yourself.

Check it out here

Community Corner - Jo Laing​

If you have tuned in you the Pactober events, you'll probably be bored of my voice, so how about hearing from the lovely Jo Laing, your Pact community manager.

Hello Jo, without further ado, you’ve been getting to know the Pact community this year, how’s it all been going?

I can’t deny on being a little apprehensive having come from managing the Cucumber community group where I am super comfortable and familiar, so it was a relief when I realised this community was actually a very similar space and I even recognised some of the member names from the Cucumber community which has helped me join some dots between Cucumber/BDD and Pact/Contract Testing (win, win). Having the support of the amazing team at Pact has been a big bonus too. I’ve also had to face my fear of GitHub and am happy to say it’s honestly not as bad as I thought πŸ˜‰

Can you tell us anything about what’s coming up for the Pact community?

We’ve started hosting a weekly maintainers community meeting (Check out the open agenda here) which a few maintainers attend. I’d love to see more attendee’s at those meetings and foster those relationships to build a healthy core maintainer group.

GitHub triage is the next big focus for the group. Pact has many repositories so we need to do some housekeeping and get a process in place for managing those.

Looking forward to 2024, there will also be a focus on improving and sharing the educational material we have around Pact and contract testing to help guide people who are interested/starting out.

I’d also love to host more Fireside Chat type sessions too, as the session we held at Pactober was just getting juicy when we had to call time. Reach out to me if this appeals to you.

We worked together to deliver the Pactober event this month πŸ™Œ what were your highlights from the event?

Oh so many! Jamming with you on the organisation of the event was fun! I really enjoyed the freedom we had to manage the whole event end to end. Meeting the speakers was awesome too, what a lovely bunch of people. I’d like to give a big thanks and shout out to everyone from the community involved who helped deliver the event.

I’m excited to see what we can all collaborate on in the future.

Your role changed this year to Open Source Community Manager at SmartBear and you now have three open source communities to shepherd – how is that shaping up?

Yes, I’ve been set quite a challenge here! Alongside the Cucumber and Pact open source communities, I’ve also been tasked with trying to establish a new community group for another of SmartBear's open source tools, Swagger. Now the Pactober event is mostly wrapped up, I have more time to focus on the planning and setting up of whatever works for this group - so lots of outreach, asking, listening and experimenting with our Swagger users in order to shape up the right community setting. So much to do!

So much to do indeed Jo, thank you for taking the time to share with the readers! Couldn't have done this event without you, and looking forward to helping share some of the support, in your journey with the Swagger community and beyond.

Community Events​

Are you hosting a Pact event? Let us know and we can feature it in the blog and list it on our events section.

Thats a wrap​

That’s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi β€” Developer Advocate at PactFlow and Community Shepherd at Pact.

Β· 11 min read

πŸ‘‹ Hello, it's September, and we are a week away from Pactober - A celebration of 10 years of Pact.

I'll be letting you know what you can look forward to, recapping this month's activities in our repos, and introducing a new starter to PactFlow, who is living the dream - getting to work on open-source - as their job. Feel inspired? Join us! We are always hiring.


We've been squirrelling away behind the scenes organising Pactober's main event on the 10th October and we are pleased to announce some of our stellar speakers.

Your links for reference:

Want to attend?

We will be providing links in Slack, but for all the latest updates, be sure to fill out our Pactober registration form


Just some of our fantastic line-up that you will hear from over the month.

Sam Newman​

J.B Rainsberger​

Seb Rose​

Bas Dijkstra​

Lewis Prescott​

Dave Farley​

Got something to say?​

Love Pact as much as Jameshd?

Why not shout about it, in whatever way suits you and we will be sure to feature it throughout Pactober’s Birthday session.

Ways you can do this

  • Fill out the Pactober registration form
  • Catch up with us in Slack
  • πŸ‘‹ Send a 30s video wishing Pact a happy birthday, telling us a short story, or a written message to either Matt Fellows, Jo Laing or I (Yousaf) and we'll ❀️ you forever
  • Find us in GitHub, in our DevRel repository

Pactober Builders​

During Pactober, we'd love to invite you to help build something on our roadmap, take part in a Bug-Bash or in our Doc-Drive.

Need some inspiration?

We've got plenty of requests on our Canny roadmap, and although many are not planned, you can see from the votes, as to how well received it may be from the community.

Alternatively, we can look at outstanding issues and PR's as they can often serve as a good source of inspiration, or things that can easily be sewn up.

Finally, don't forget to check out more ways you can help, if any of these take your fancy?

You can find your fellow builders over in the #pactober-builders channel in Slack.

Pactober Workshops​

We already have a few Pact HTTP based workshops, in a few languages, listed here.

I'll be hosting four sessions throughout Pactober, walking users through the existing workshop, and running some all new ones in the process.

We will need to build out workshops for Message & Plugin Pact, and also our various existing workshops, could do with some love, to utilise the latest features and versions of not only Pact but the client language itself.

We would love any support in helping work on these, but if not, and you just fancy participating along with others during the workshops, then feel free to join me!

OSS Updates​

It has been another busy month in the world of Pact, I've pulled out some changes from the community to showcase in our latest round of Open Source updates.

  • PactFlow's New Starter, and what it means for you
    • Pact Python
  • Pact Rust
  • Pact PHP
  • Pact Plugins
  • Pact Broker
  • Pact Broker Client
  • Pact JS
  • Pact Broker Chart
  • Feature requests
    • Dont Massl the Hoff (Massl based authentication)

PactFlow's New Starter, and what it means for you​

We ❀️ open source. We created Pactflow because we wanted to create a sustainable avenue to work on open source projects, and solve big problems that benefit a global developer community. Instead of the train rides, late nights and weekends where most of our contributions previously originated, this would be our day job.

We said that back in 2021. It would be awesome to work on an open-source project, and get paid for it, as part of your job. For me, its a dream come true. We've wanted to share that opportunity with others, especially as Pact grows in popularity, and gaining active maintainers is a challenge for many an open-source project, even those much larger than our own. Just look at Curls contributor graph!

We also are actutely aware that some of our libraries are suffering from bit-rot, languishing whilst each client implementations native language comes out with new features, and additions, that could be utilised, and they are missing core Pact features, implemented in Rust but not delivered in the client library, which causes struggles in documentating a cohesive Pact experience, in your own multi-language/multi-protocol landscapes.

That being said, we are proud to be able to announce a new starter to the PactFlow family, and by default extension, the Pact Family, who will help alleviate some of that burden. Enter Josh.

Joshua Ellis​

We've been honoured to have Joshua Ellis enter the team, based in Australia, he will be working closely with Beth, Matt and Ron, and comes with a distinguished history, and open source background.

Joshua Ellis

I have an academic background in theoretical particle physics. I am the developer of the LaTeX package TikZ-Feynman to draw Feynman diagrams, and spent the majority of my PhD creating a Rust library to help solve Boltzmann equations to calculate the evolution of particle number densities during the Big Bang. I also did a one year stint in KPMG’s Data & Cloud team, helping architect and build cloud infrastructure, data pipelines, and helping new recruits get up to speed with DevOps and coding.

I'm a big fan of open source software and collaboration, and love to automate everything and anything; even if it sometimes takes me longer to automate the task than to actually do it πŸ˜… Outside of work, my wife and I love finding good food spots in Melbourne. We have a small rescue dog called Cooper (no idea what breed he is), and if I’m not at my computer, you’ll either find me cooking something (perhaps in my smoker), playing piano or trying to learn the cello, or getting a coffee.

So what will Josh be working on?

Proficient in Python and Rust, we will see him help bring Pact-Python up to modern standards, and implement Pact V4 functionality, in a production ready manner, rather than my hack it to get something working xD.

I have recently onboarded with SmartBear, and my focus to begin with will be the Python code. I'm looking forward to working with you all, and improving the Python code! In particular, I will be building upon the amazing work done in #367 to get pact-python working with the Rust core. As a bit of ground work, I have created two issues above to get my feet wet, before tackling the much larger task of supporting V4 fully.

In any case, please feel free to message me with any ideas, or just to say hi :blobwave:

Josh has been tackling the build system and examples for starters, check out the progress, and even better, why not drop us a review, he would love the feedback, and gives him a chance to connect with you all.

Long live Python, Long live pact, long live Pact-Python!

Love Pact? Want to join the team? Why not give us a shout!

Pact Rust​

We were meant to have done some rust stuff, but we've been too busy laughing at this interview with a senior rust developer

But seriously though, what's been happening?

Pact PHP​

Tien Vo has been busy again, bringing more features to the ffi branch

The last one could do with some eyes, and we would still love to know if you have tested this out. Please let us know in the #pact-php channel or via GitHub.

Pact Plugins​

Rohit G Krishnan has been trying out the Pact plugin framework, and raised a PR to fix a bug. Find it, fork it, fix it. The beauty of open-source! Thanks a bunch!

Pact Broker​

Beth introduced a branch endpoint, supporting GET & DELETE in this PR

Expect to see this extend into the Pact Broker client, to let you interrogate the Pact Broker for pacticipants by branch

Pact Broker Client​

Utilising the above change, was the Pact Broker client, for provider-contract publishing.

Whilst the above PR, and pactflow command, is for integrating with closed-source tool PactFlow, please be reminded that this can serve as a useful pointer for implementing your own provider driven contract flow, in an open source broker.

Check out an example repo and supporting blog post

With a bit of tinkering, you can agument your workflows with, itself a fork of Atlassians original

I've been thinking about how we could potentially create an extendable mechanism, whereby users could provide their own provider schemes, for alternate sources, other than OpenAPI, such as AsyncAPI.

If this floats your boat, why not join us, as a Pactober builder, or just give us a shout.


Mat Dodgson delivered a fix: MessageConsumerPact merge pact file correctly

Pact Broker Chart​

Love Kubernetes and Helm?

Chris J Burns & Sherif Ayad have got your back.

Dont Massl the Hoff​

A feature request landed for Providing MASSL based auth support

This is to add the support on adding a 'cert' and a 'key', regarding a self-hosted Broker that requires a 'cert' and a 'key'. This will make the availability to call the 'Pact::VerificationTask' adding the 'cert' and 'key' to interact with the Self-Hosted Broker.

As an example: -

--cert /path/to/client/cert.pem --key /path/to/client/key.pem

NB:- - I don't think it will be cli opts, but rather environment variables, to match the existing conventions for using TLS


Thanks to LluΓ­s Xavier Casals Garcia for raising and Gerald Molina for the PR's

Pact in the wild​

Open edX​

Open edX is a community-driven, open-source project powering and thousands of other online education sites around the world.

We couldn't be more proud to see they are using Pact in their projects, and have written a brilliant post for their engineers. You can read it here

It also features Dawoud Sheraz, who we mentioned earlier in the year about his talk at Python Web Conf. The video is referenced in the above post, but you can watch it here


GitLab are using Pact and have written some great documentation to support its use in their project.

If you haven't tried about GitLab, why not look at testing it out, you can run the community edition for free, on your local machine, see the existing Pact tests (and run them) for yourself.

Community Events​

Are you hosting events about Pact? Why not let us know?

We can't wait for you to get involved, whether you attend one of the sessions throughout the month of Pactober, or you decide to host something yourself. Long live Pact and its awesome community!

Dont forget that throughout October, we will be providing links in Slack, but for all the latest updates, be sure to fill out our Pactober registration form

Thats a wrap​

That’s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi β€” Developer Advocate at PactFlow and Community Shepherd at Pact.

Β· 7 min read

πŸ‘‹ Hello, its August, hope you've had a great summer so far, and enjoyed a nice well-deserved break.

However if you've been in the office, not worrying about your deployments because you use Pact, huzzah.

Whatever you've been up to, the community has been busy as well, so we've rounded up some of the latest happenings in the world of Pact to sink your teeth into.

OSS Updates​

It has been another busy month in the world of Pact, I've pulled out some changes from the changes from community to showcase in our latest round of Open Source updates.

  • Pact Docs
  • Pact Getting started
  • Pact Go
  • Pact Broker
  • Pact Rust
  • Pact JVM
  • Pact Ruby
  • Pact Python
  • Pact PHP
  • Pact Erlang
  • Pact CLI Tooling

Pact Docs​

MUnit (Mule4) with Pact Recipe​

Are you an MuleSoft user running MUnit? If so, check out the latest recipe on our site, kindly provided by Grace Sandford!

Got something you want to share? Why not drop in a pull request. You can find out ways you can help here

Pact Getting Started​

Our Pact getting started guide has been updated to the latest pact-js version, which prepackages the pact ffi runtime, meaning it will be even easier for users with only a current version of node to get up and running.

Fancy creating one in your favourite Pact client language? What's stopping you?


Thanks Boreyuk for picking up this golintci task in the following pull request

A great quality of life improvement for maintainers and contributors of pact-go, and a better user experience, with some of the changes made.

It just goes to show that not all improvements need to be big, and you can drop in and help out maintainers anywhere. If you don't know where to start, just ask!


Beth making us all laugh again with this comment whilst she took some time out on cold Aussie Saturday arvo to bust out a beast of a feature, improving performance of the matrix when multiple selectors are specified.

Pact Rust​

Beth did Rust!

Looking to improve on the error messages returned in various scenarios during provider verification.

Why not hop into Slack or GitHub and let us know what would be on your wish list, to help you when it goes wrong.


  • The maintainer of Kotlin-Logging Osad Shai, dropped in and upgraded his library in Pact-JVM in this PR. It's awesome to see some real-world testing from a package maintainer, I like doing the same when I am fixing up open source projects. The best subjects are the one's already using your libraries. It is also why I get stoked to see public repos showcasing Pact.

  • Victor Enaud spotted a bug in Pact-JVM, applied a fix which ultimately was rejected in favour of another solution, but we are super grateful for both the excellent report, and an attempted solution!



Checkout a sample of the PactV3 interface, powered by the Pact FFI in the following pull request

You can also find more V3 examples here and a grpc example here

I'm inviting Pythonistas who are itching for that V3 and V4 functionality to collaborate with me on the aforementioned PR to help bring your Python projects up to speed with all the latest pact features.

"""pact test for product service client"""

import logging
import os

import pytest
from pact import PactV3
from pact.ffi.native_mock_server import MockServerStatus
from pact.matchers_v3 import Like, Format
from src.consumer import ProductConsumer

log = logging.getLogger(__name__)

PACT_DIR = os.path.dirname(os.path.realpath(__file__))

def consumer():
Β  Β  return ProductConsumer(
Β  Β  Β  Β  'http://{host}:{port}'
Β  Β  Β  Β  .format(host=PACT_MOCK_HOST, port=PACT_MOCK_PORT)
Β  Β  )

def pact(request):
Β  Β  pact = PactV3(
Β  Β  Β  Β  'pactflow-example-consumer-python-v3',
Β  Β  Β  Β  'pactflow-example-provider-python-v3',
Β  Β  Β  Β  hostname=PACT_MOCK_HOST,
Β  Β  Β  Β  port=PACT_MOCK_PORT,
Β  Β  Β  Β  pact_dir="./pacts",
Β  Β  )

Β  Β  return pact

def test_get_product(pact: PactV3, consumer):
Β  Β  expected = {
Β  Β  Β  Β  'id': "27",
Β  Β  Β  Β  'name': 'Margharita',
Β  Β  Β  Β  'type': 'Pizza'
Β  Β  }

Β  Β  (pact
Β  Β  Β .new_http_interaction('interaction')
Β  Β  Β .given('a product with ID 10 exists')
Β  Β  Β .upon_receiving('a request to get a product')
Β  Β  Β .with_request('GET', '/product/10')
Β  Β  Β .will_respond_with(200, body=Like(expected), headers=[{"name": 'content-type', "value": 'application/json'}]))

Β  Β  with pact:
Β  Β  Β  Β  pact.start_service()
Β  Β  Β  Β  user = consumer.get_product('10')
Β  Β  Β  Β  assert == 'Margharita'
Β  Β  Β  Β  result = pact.verify()
Β  Β  Β  Β  assert MockServerStatus(result.return_code) == MockServerStatus.SUCCESS


Tien Vo has been working hard in the pact-php ffi branch, introducing an auto-installing plugins feature in this PR.

You can pick this up in the latest alpha from packagist. See the release here

Have you tried this out in your project? Why not let us know in #pact-php in Slack.


Srijan Choudhary announced pact_erlang version 0.2.0 has been released with the new map-based DSL:

PactRef = pact:v4(<<"myapp">>, <<"animal_service">>),
AnimalObject = #{<<"name">> => <<"Mary">>, <<"type">> => <<"alligator">>},
{ok, Port} = pact:interaction(PactRef,
Β  Β  given => <<"an alligator with the name Mary exists">>,
Β  Β  upon_receiving => <<"a request to GET an animal: Mary">>,
Β  Β  with_request => #{
Β  Β  Β  Β  method => <<"GET">>,
Β  Β  Β  Β  path => <<"/animals/Mary">>
Β  Β  },
Β  Β  will_respond_with => #{
Β  Β  Β  Β  status => 200,
Β  Β  Β  Β  headers => #{
Β  Β  Β  Β  Β  Β  <<"Content-Type">> => <<"application/json">>
Β  Β  Β  Β  },
Β  Β  Β  Β  body => thoas:encode(AnimalObject)
Β  Β  }
?assertMatch({ok, AnimalObject}, animal_service_interface:get_animal(Port, "Mary")),
{ok, matched} = pact:verify(PactRef),
pact:write(PactRef, <<"./pacts">>),

Pact CLI tooling​

Would you want to see all our pact CLI tooling, in a single place?

Is file size a concern to you?

I had a go at a consolidated bundle of our ruby/rust tooling, to aid migration.

Why not take a look at this PR and let us know your thoughts?

What about getting them all in a single file? :O

Hop onto Slack, or drop us a message in GitHub and provide your input!

Community Events​

Are you hosting events about Pact? Why not let us know?

DevOps Playground: Get hands-on with Pact, Mule 4 and MUnit (London) - August 31, 2023​

The DevOps Playground meetup event is hosting another event showcasing Pact at the end of August.

You can check out the one they performed last year Pact-NET and dotnet.


How to avoid common pitfalls with modern microservices testing (Boston,MA) - September 14, 2023​

Eric Deandrea who has been touring the conference circuit this year, is on fire and hosting a meeting local at his local Java Users Group about Pact & contract testing with Quarkus.

If your based in Boston, MA, you should pop over.

Pacto - A blast from the past​

Have you ever heard of Pacto?

Nope, that's not a typo, Pacto is another Ruby implementation of a library that provides a mock service and provider verification using consumer driven contracts, originally cooked up at ThoughtWorks.

It's now fallen out of maintenance, but many of our long-standing community contributors both remember and tip our hats to Pacto and its champions, for helping raise contract-testing awareness.

Marthinus Engelbrecht updated our docs to reflect this in this PR


We've been squirrelling away organising an awesome lineup for Pactober's main event on the 10th October. You can see the updated pages in the below links.

Add your own event!

We can't wait for you to get involved, whether you attend one of the sessions throughout the month, or you decide to host something yourself. Long live Pact and its awesome community!

Thats a wrap​

That’s it for this month. Stay safe and carry on coding!

  • Yousaf Nabi β€” Developer Advocate at PactFlow and Community Shepherd at Pact.