← Back
Milan Jovanovic October 1, 2026 10m

Polly Is Going Paid. Here Are Your Options.

Not yet indexed — Search & Ask will be available once this episode finishes processing.

Read full transcript 8 segments
  1. Poly, the popular.net resilience Poly, the popular.net resilience library, is becoming a paid product. In library, is becoming a paid product. In library, is becoming a paid product. In this video, I want to unpack what this this video, I want to unpack what this this video, I want to unpack what this means for you using Poly inside of your means for you using Poly inside of your means for you using Poly inside of your applications, what your alternatives are applications, what your alternatives are applications, what your alternatives are if you don't want to continue using if you don't want to continue using if you don't want to continue using Poly, and I also want to take this Poly, and I also want to take this Poly, and I also want to take this opportunity to reflect on the broader opportunity to reflect on the broader opportunity to reflect on the broader open source ecosystem and some of the open source ecosystem and some of the open source ecosystem and some of the other libraries that went commercial in other libraries that went commercial in other libraries that went commercial in the past year. Here's the announcement the past year. Here's the announcement the past year. Here's the announcement on the Poly blog of them introducing the on the Poly blog of them introducing the on the Poly blog of them introducing the open-source maintenance fee. Now let's open-source maintenance fee. Now let's open-source maintenance fee. Now let's take a quick look at what exactly this take a quick look at what exactly this take a quick look at what exactly this means if you want to continue using poly means if you want to continue using poly means if you want to continue using poly as a dependency in your project. Now the as a dependency in your project. Now the as a dependency in your project. Now the first link here is to the actual open first link here is to the actual open first link here is to the actual open source maintenance fee website and I source maintenance fee website and I source maintenance fee website and I think this is a great effort to help think this is a great effort to help think this is a great effort to help open source projects remain sustainable open source projects remain sustainable open source projects remain sustainable while giving funding to the developers while giving funding to the developers while giving funding to the developers actually working on said open source actually working on said open source actually working on said open source project. Going to leave the link to this project. Going to leave the link to this project. Going to leave the link to this as well as the announcement blog in the as well as the announcement blog in the as well as the announcement blog in the description of this video if you want to description of this video if you want to description of this video if you want to read more about it. Now, when it comes read more about it. Now, when it comes read more about it. Now, when it comes specifically to Poly, the source code specifically to Poly, the source code specifically to Poly, the source code still remains free and open on GitHub. still remains free and open on GitHub. still remains free and open on GitHub. This is not a change to the license and This is not a change to the license and This is not a change to the license and it's also not a support contract.

  2. it's also not a support contract. it's also not a support contract. Instead, they introduce it as an enduser Instead, they introduce it as an enduser Instead, they introduce it as an enduser license agreement, which means that this license agreement, which means that this license agreement, which means that this effectively targets the poly binary that effectively targets the poly binary that effectively targets the poly binary that you download to use the library inside you download to use the library inside you download to use the library inside of your projects. So technically of your projects. So technically of your projects. So technically speaking, you can still take the open speaking, you can still take the open speaking, you can still take the open source code which remains free and open, source code which remains free and open, source code which remains free and open, build it yourself and use that binary to build it yourself and use that binary to build it yourself and use that binary to avoid the fee. Now I'm going to talk avoid the fee. Now I'm going to talk avoid the fee. Now I'm going to talk more about this a bit later, but just an more about this a bit later, but just an more about this a bit later, but just an interesting observation. Now how this interesting observation. Now how this interesting observation. Now how this applies to Poly, it's a $20 per month applies to Poly, it's a $20 per month applies to Poly, it's a $20 per month fee if you are using Poly as a direct fee if you are using Poly as a direct fee if you are using Poly as a direct dependency. And this only applies to dependency. And this only applies to dependency. And this only applies to companies that have a profit of more companies that have a profit of more companies that have a profit of more than $20,000. It also applies for than $20,000. It also applies for than $20,000. It also applies for organization that uses poly and not organization that uses poly and not organization that uses poly and not necessarily per project which is good necessarily per project which is good necessarily per project which is good news if you have a bunch of projects news if you have a bunch of projects news if you have a bunch of projects that depend on poly. Again, the license that depend on poly. Again, the license that depend on poly. Again, the license itself is not changing and the source itself is not changing and the source itself is not changing and the source code is not moving behind a payw wall. code is not moving behind a payw wall. code is not moving behind a payw wall. This is enforced through an enduser This is enforced through an enduser This is enforced through an enduser license agreement that you accept when license agreement that you accept when license agreement that you accept when you download the paid version of Poly you download the paid version of Poly you download the paid version of Poly into your applications. Now, this is into your applications. Now, this is into your applications. Now, this is supposed to take effect on November supposed to take effect on November supposed to take effect on November 16th, 2026. So, about a month and a half 16th, 2026. So, about a month and a half 16th, 2026. So, about a month and a half from now. And obviously this should not from now. And obviously this should not from now. And obviously this should not apply for any versions prior to Poly apply for any versions prior to Poly apply for any versions prior to Poly introducing the open source maintenance introducing the open source maintenance introducing the open source maintenance fee. I assume most of you are going to fee. I assume most of you are going to fee. I assume most of you are going to be at least somewhat familiar with Poly be at least somewhat familiar with Poly be at least somewhat familiar with Poly and the resilience policies that they and the resilience policies that they and the resilience policies that they allow you to offer. So here's a small allow you to offer. So here's a small allow you to offer. So here's a small example of how you would use Poly in a example of how you would use Poly in a example of how you would use Poly in a typical ASP.NET Core application. This typical ASP.NET Core application. This typical ASP.NET Core application. This is the newer API that also supports is the newer API that also supports is the newer API that also supports dependency injection and it's more dependency injection and it's more dependency injection and it's more performant and the recommended way to

  3. performant and the recommended way to performant and the recommended way to use Poly nowadays. Now, here's an use Poly nowadays. Now, here's an use Poly nowadays. Now, here's an example of introducing a resilience example of introducing a resilience example of introducing a resilience pipeline. In this example, it's a retry pipeline. In this example, it's a retry pipeline. In this example, it's a retry pipeline where you configure it with a pipeline where you configure it with a pipeline where you configure it with a retry policy. And now you can customize retry policy. And now you can customize retry policy. And now you can customize it by setting some values on the retry it by setting some values on the retry it by setting some values on the retry strategy options. So, you can set things strategy options. So, you can set things strategy options. So, you can set things like how many retries you should have, like how many retries you should have, like how many retries you should have, what is the delay between the retries, what is the delay between the retries, what is the delay between the retries, what is the backoff type between the what is the backoff type between the what is the backoff type between the retries if you want to use a jitter, and retries if you want to use a jitter, and retries if you want to use a jitter, and you can also define a predicate for what you can also define a predicate for what you can also define a predicate for what specific type of exception you want to specific type of exception you want to specific type of exception you want to handle with this retry policy. Here's a handle with this retry policy. Here's a handle with this retry policy. Here's a simpler example of adding a timeout simpler example of adding a timeout simpler example of adding a timeout resilience policy. So if your request resilience policy. So if your request resilience policy. So if your request exceeds a given timeout, it's going to exceeds a given timeout, it's going to exceeds a given timeout, it's going to be aborted so that you don't end up be aborted so that you don't end up be aborted so that you don't end up wasting unnecessary time. And finally, wasting unnecessary time. And finally, wasting unnecessary time. And finally, here's an example of a circuit breaker here's an example of a circuit breaker here's an example of a circuit breaker policy. You introduce it by calling add policy. You introduce it by calling add policy. You introduce it by calling add circuit breaker and then you can circuit breaker and then you can circuit breaker and then you can customize the circuit breaker strategy customize the circuit breaker strategy customize the circuit breaker strategy options and you have a bunch of things options and you have a bunch of things options and you have a bunch of things that you can configure here. So that's that you can configure here. So that's that you can configure here. So that's the configuration side where you set up the configuration side where you set up the configuration side where you set up the resilience pipelines within the the resilience pipelines within the the resilience pipelines within the dependency injection container. How you dependency injection container. How you dependency injection container. How you actually use this inside of your actually use this inside of your actually use this inside of your services is by resolving a resilience services is by resolving a resilience services is by resolving a resilience pipeline provider. And this is like a pipeline provider. And this is like a pipeline provider. And this is like a factory that lets you get an individual factory that lets you get an individual factory that lets you get an individual pipeline instance. So in this example, pipeline instance. So in this example, pipeline instance. So in this example, we're using the named pipelines we're using the named pipelines we're using the named pipelines approach. And if I want to resolve my approach. And if I want to resolve my approach. And if I want to resolve my retry pipeline, I say get pipeline and retry pipeline, I say get pipeline and retry pipeline, I say get pipeline and then within execute async, I run the then within execute async, I run the then within execute async, I run the code that I want to wrap with this code that I want to wrap with this code that I want to wrap with this policy. So in this case, if it throws an policy. So in this case, if it throws an policy. So in this case, if it throws an exception, it's going to be retrieded exception, it's going to be retrieded exception, it's going to be retrieded according to the policy that we just according to the policy that we just according to the policy that we just configured. And then same goes for the

  4. configured. And then same goes for the configured. And then same goes for the timeout pipeline, you resolve it from timeout pipeline, you resolve it from timeout pipeline, you resolve it from the pipeline provider and wrap your the pipeline provider and wrap your the pipeline provider and wrap your execution inside of execute async. And execution inside of execute async. And execution inside of execute async. And obviously the last example using the obviously the last example using the obviously the last example using the circuit breaker is going to behave more circuit breaker is going to behave more circuit breaker is going to behave more or less the same to resolve it and wrap or less the same to resolve it and wrap or less the same to resolve it and wrap your execution inside of the concrete your execution inside of the concrete your execution inside of the concrete pipeline instance. I don't intend to pipeline instance. I don't intend to pipeline instance. I don't intend to spend time going into exactly how this spend time going into exactly how this spend time going into exactly how this works at runtime. you can grab the works at runtime. you can grab the works at runtime. you can grab the source code for this video yourself and source code for this video yourself and source code for this video yourself and give it a try. What I do want to put my give it a try. What I do want to put my give it a try. What I do want to put my focus on is the actual package reference focus on is the actual package reference focus on is the actual package reference inside of my project. So, I'm directly inside of my project. So, I'm directly inside of my project. So, I'm directly referencing Poly extensions and if I referencing Poly extensions and if I referencing Poly extensions and if I continue to do this after the continue to do this after the continue to do this after the introduction of the open source introduction of the open source introduction of the open source maintenance fee, I'm subject to the end maintenance fee, I'm subject to the end maintenance fee, I'm subject to the end user license agreement and I will pay user license agreement and I will pay user license agreement and I will pay the $20 fee. However, Microsoft released the $20 fee. However, Microsoft released the $20 fee. However, Microsoft released a couple of years ago, I believe it was a couple of years ago, I believe it was a couple of years ago, I believe it was with .NET 8, the Microsoft resilience with .NET 8, the Microsoft resilience with .NET 8, the Microsoft resilience packages. So if I replace the package packages. So if I replace the package packages. So if I replace the package reference here with Microsoft reference here with Microsoft reference here with Microsoft extensions resilience and behind the extensions resilience and behind the extensions resilience and behind the scenes I'm using central package scenes I'm using central package scenes I'm using central package managements. So all I have here is the managements. So all I have here is the managements. So all I have here is the package reference while the version is package reference while the version is package reference while the version is controlled from that XML file.

  5. controlled from that XML file. controlled from that XML file. Everything should now still compile just Everything should now still compile just Everything should now still compile just fine. So if we go into my program file, fine. So if we go into my program file, fine. So if we go into my program file, you won't see any red squiggly lines you won't see any red squiggly lines you won't see any red squiggly lines with the compile errors. If I build a with the compile errors. If I build a with the compile errors. If I build a solution, it's also going to build to solution, it's also going to build to solution, it's also going to build to completion without any errors. And this completion without any errors. And this completion without any errors. And this is because the Microsoft text engines is because the Microsoft text engines is because the Microsoft text engines resilience library is a direct wrapper resilience library is a direct wrapper resilience library is a direct wrapper over poly. And this is also one of the over poly. And this is also one of the over poly. And this is also one of the conundrums of the open source conundrums of the open source conundrums of the open source maintenance fee. It only applies if you maintenance fee. It only applies if you maintenance fee. It only applies if you have a direct reference on poly and not have a direct reference on poly and not have a direct reference on poly and not if poly is a transitive dependency. if poly is a transitive dependency. if poly is a transitive dependency. Meaning if I were to reference Microsoft Meaning if I were to reference Microsoft Meaning if I were to reference Microsoft extensions resilience, I wouldn't have extensions resilience, I wouldn't have extensions resilience, I wouldn't have to pay the open source maintenance fee. to pay the open source maintenance fee. to pay the open source maintenance fee. And I suspect this is going to be the And I suspect this is going to be the And I suspect this is going to be the simplest migration strategy for anyone simplest migration strategy for anyone simplest migration strategy for anyone currently using poly as a direct currently using poly as a direct currently using poly as a direct dependency. But this also means that you dependency. But this also means that you dependency. But this also means that you now depend on the specific version of now depend on the specific version of now depend on the specific version of poly that is referenced in the current poly that is referenced in the current poly that is referenced in the current version of Microsoft extensions version of Microsoft extensions version of Microsoft extensions resilience that you are using. So if I resilience that you are using. So if I resilience that you are using. So if I open my directory packages props, this open my directory packages props, this open my directory packages props, this is going to be version 10.10.0. is going to be version 10.10.0. is going to be version 10.10.0. Now in this case I also have the direct Now in this case I also have the direct Now in this case I also have the direct reference to poly just for demo reference to poly just for demo reference to poly just for demo purposes. But while researching for this purposes. But while researching for this purposes. But while researching for this video, I do recall reading that video, I do recall reading that video, I do recall reading that transitive pinning doesn't mean that you transitive pinning doesn't mean that you transitive pinning doesn't mean that you have to pay the open- source maintenance have to pay the open- source maintenance have to pay the open- source maintenance fee. What this means is you can still fee. What this means is you can still fee. What this means is you can still only depend on Microsoft Extension only depend on Microsoft Extension only depend on Microsoft Extension resilience directly and have a pin of resilience directly and have a pin of resilience directly and have a pin of the specific Poly library that you want the specific Poly library that you want the specific Poly library that you want to use. Let's say because of some to use. Let's say because of some to use. Let's say because of some security vulnerability and the new security vulnerability and the new security vulnerability and the new version of Poly fixes that, you should version of Poly fixes that, you should version of Poly fixes that, you should be allowed based on my understanding to be allowed based on my understanding to be allowed based on my understanding to pin that specific version of Poly to be pin that specific version of Poly to be pin that specific version of Poly to be resolved with Microsoft Extensions

  6. resolved with Microsoft Extensions resolved with Microsoft Extensions Resilience while still not being subject Resilience while still not being subject Resilience while still not being subject to the open- source maintenance fee. to the open- source maintenance fee. to the open- source maintenance fee. Now, let's talk about what your Now, let's talk about what your Now, let's talk about what your alternatives are. As I said, probably alternatives are. As I said, probably alternatives are. As I said, probably the simplest option if you don't want to the simplest option if you don't want to the simplest option if you don't want to pay the open source maintenance fee is pay the open source maintenance fee is pay the open source maintenance fee is using one of the Microsoft Resilience using one of the Microsoft Resilience using one of the Microsoft Resilience libraries like I demonstrated here. You libraries like I demonstrated here. You libraries like I demonstrated here. You can also build the poly source code and can also build the poly source code and can also build the poly source code and produce the binary yourself and then produce the binary yourself and then produce the binary yourself and then reference that. You could fork the reference that. You could fork the reference that. You could fork the existing repository and maintain your existing repository and maintain your existing repository and maintain your own nougat package. In fact, there's own nougat package. In fact, there's own nougat package. In fact, there's already an open source fork called already an open source fork called already an open source fork called fences. This is from the creators of the fences. This is from the creators of the fences. This is from the creators of the brighter messaging library. The nougat brighter messaging library. The nougat brighter messaging library. The nougat package is paramor fences. And in the package is paramor fences. And in the package is paramor fences. And in the repo on GitHub, it states that this is a repo on GitHub, it states that this is a repo on GitHub, it states that this is a community fork of poly maintained by community fork of poly maintained by community fork of poly maintained by brighter command. The fork was taken brighter command. The fork was taken brighter command. The fork was taken from poly version 8.7.0 O specifically from poly version 8.7.0 O specifically from poly version 8.7.0 O specifically to avoid the open- source maintenance to avoid the open- source maintenance to avoid the open- source maintenance fee. Now, considering that it's only $20 fee. Now, considering that it's only $20 fee. Now, considering that it's only $20 a month and you only have to pay it once a month and you only have to pay it once a month and you only have to pay it once per your organization. But then again, per your organization. But then again, per your organization. But then again, when you consider that this would be 1% when you consider that this would be 1% when you consider that this would be 1% of the profit, you have to ask the of the profit, you have to ask the of the profit, you have to ask the question, is it worth paying 1% of your question, is it worth paying 1% of your question, is it worth paying 1% of your profit for a resilience library? I'm profit for a resilience library? I'm profit for a resilience library? I'm going to leave this for everyone to going to leave this for everyone to going to leave this for everyone to answer for themselves. Now, in the past answer for themselves. Now, in the past answer for themselves. Now, in the past year, there have also been three very year, there have also been three very year, there have also been three very popular .NET open source libraries that popular .NET open source libraries that popular .NET open source libraries that became commercial. These are automapper became commercial. These are automapper became commercial. These are automapper mediator both by Jimmy Bogart and then mediator both by Jimmy Bogart and then mediator both by Jimmy Bogart and then mass transit the messaging library. And mass transit the messaging library. And mass transit the messaging library. And if I recall correctly they even if I recall correctly they even if I recall correctly they even announced going commercial I think on announced going commercial I think on announced going commercial I think on the same day or if it wasn't on the same the same day or if it wasn't on the same the same day or if it wasn't on the same day it was within a couple of days of day it was within a couple of days of day it was within a couple of days of each other. And my opinion on all of each other. And my opinion on all of each other. And my opinion on all of this is that this is awesome. Like you this is that this is awesome. Like you this is that this is awesome. Like you should get paid if you're doing open

  7. should get paid if you're doing open should get paid if you're doing open source and you are making a valuable source and you are making a valuable source and you are making a valuable product. Let's just consider this as product. Let's just consider this as product. Let's just consider this as non-negotiable. Now what I do want to do non-negotiable. Now what I do want to do non-negotiable. Now what I do want to do here is just give you a comparison of here is just give you a comparison of here is just give you a comparison of the popularity of these libraries before the popularity of these libraries before the popularity of these libraries before and after going commercial. So for and after going commercial. So for and after going commercial. So for AutoMapper I took the average number of AutoMapper I took the average number of AutoMapper I took the average number of downloads per major version before and downloads per major version before and downloads per major version before and after going commercial and we went from after going commercial and we went from after going commercial and we went from 150 million downloads to 17 million 150 million downloads to 17 million 150 million downloads to 17 million downloads. For Mediator, it went from downloads. For Mediator, it went from downloads. For Mediator, it went from 107 million downloads to 10 million 107 million downloads to 10 million 107 million downloads to 10 million downloads per major version. And then downloads per major version. And then downloads per major version. And then for Mass Transit, it went from 107 for Mass Transit, it went from 107 for Mass Transit, it went from 107 million downloads to 2 million downloads million downloads to 2 million downloads million downloads to 2 million downloads per major version after going per major version after going per major version after going commercial. Altogether, these represent commercial. Altogether, these represent commercial. Altogether, these represent drops of 91%, 88%, and 98% after going drops of 91%, 88%, and 98% after going drops of 91%, 88%, and 98% after going commercial. Now, what I'm happy to see commercial. Now, what I'm happy to see commercial. Now, what I'm happy to see is that they are still getting some is that they are still getting some is that they are still getting some healthy number of downloads, which means healthy number of downloads, which means healthy number of downloads, which means that all three of these projects are that all three of these projects are that all three of these projects are decently popular, and I think their decently popular, and I think their decently popular, and I think their creators definitely deserve getting a creators definitely deserve getting a creators definitely deserve getting a payout. The same goes for the Poly open- payout. The same goes for the Poly open- payout. The same goes for the Poly open- source maintenance fee. And this video source maintenance fee. And this video source maintenance fee. And this video is definitely not a criticism on Poly or is definitely not a criticism on Poly or is definitely not a criticism on Poly or any of the other libraries going any of the other libraries going any of the other libraries going commercial. I fully support these commercial. I fully support these commercial. I fully support these decisions while also acknowledging that decisions while also acknowledging that decisions while also acknowledging that we as developers also have other we as developers also have other we as developers also have other alternatives to consider. So it's not alternatives to consider. So it's not alternatives to consider. So it's not really like anyone is forcing you to really like anyone is forcing you to really like anyone is forcing you to have to pay for any of these libraries.

  8. have to pay for any of these libraries. have to pay for any of these libraries. You are free to decide if the value is You are free to decide if the value is You are free to decide if the value is worth it for you and your projects. And worth it for you and your projects. And worth it for you and your projects. And this is especially true with the era of this is especially true with the era of this is especially true with the era of AI agents that we're currently living in AI agents that we're currently living in AI agents that we're currently living in where the cost of producing code for where the cost of producing code for where the cost of producing code for some of the simpler libraries like for some of the simpler libraries like for some of the simpler libraries like for example mediator is now effectively example mediator is now effectively example mediator is now effectively zero. So there's really nothing stopping zero. So there's really nothing stopping zero. So there's really nothing stopping you from maintaining your own version if you from maintaining your own version if you from maintaining your own version if you want to. So that's a quick recap of you want to. So that's a quick recap of you want to. So that's a quick recap of what changed with the poly library and what changed with the poly library and what changed with the poly library and when these changes take effect and also when these changes take effect and also when these changes take effect and also what your alternatives are if you don't what your alternatives are if you don't what your alternatives are if you don't want to pay for the open source want to pay for the open source want to pay for the open source maintenance fee. I'd also like to hear maintenance fee. I'd also like to hear maintenance fee. I'd also like to hear from you in the comments. What do you from you in the comments. What do you from you in the comments. What do you think about the open- source maintenance think about the open- source maintenance think about the open- source maintenance fee? And do you think this is a fee? And do you think this is a fee? And do you think this is a sustainable way to fund open source sustainable way to fund open source sustainable way to fund open source projects? Again, thanks a lot for projects? Again, thanks a lot for projects? Again, thanks a lot for watching. If you enjoyed this video, watching. If you enjoyed this video, watching. If you enjoyed this video, consider smashing that like button. And consider smashing that like button. And consider smashing that like button. And until next time, stay awesome.

No summary available yet.

View original episode ↗