Netflix Ribbon: A Client-Side Load Balancer in Maintenance Mode
GitHub describes it as Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.. The repository metadata lists Java as its primary language. The metadata lists the Apache-2.0 license. This article stays within the project description and details documented in the GitHub repository README.
At a glance
- What is it?
- Ribbon is a Java IPC library with built-in software load balancing, but Netflix has placed it in maintenance mode. This review covers its architecture, usage, and why you should think twice before adopting it for new projects.
- Who is it for?
- Adopt Ribbon if you are maintaining an existing JVM-based service that already uses it and you need a stable, battle-tested load balancer without new features. Do not adopt it for new projects, especially if you need multi-language support or active maintenance.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 11 months ago.
- What is it written in?
- Mainly Java, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- Netflix/ribbon4,615 ★ · -1
| Repository | 2026-08-13 | 2026-11-14 |
|---|---|---|
| Netflix/ribbon | 4.6k | 4.6k |
-1 Stars in the last 93 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What Ribbon Solves and Who It Is For
Ribbon solves the problem of making remote procedure calls from a client service to a set of servers while distributing the load across them. It is a client-side load balancing library, meaning the client itself decides which server to send each request to, rather than relying on a centralized load balancer. This is useful for microservices architectures where you have multiple instances of a service and you want to spread traffic, handle failures, and avoid a single point of failure. The primary user is a Java developer building a REST-based service that needs to call other services in a cloud environment, especially one using Netflix's Eureka for service discovery. The README describes it as 'battle-tested in cloud', indicating it was designed for high-scale, production environments. However, the maintenance status makes it clear that this is not a library for new greenfield projects unless you are prepared to maintain it yourself.
The Architecture: Modules with Different Levels of Attention
Ribbon is not a single library but a set of modules, each with a specific role. The README lists seven modules: ribbon-core for client configuration and shared APIs, ribbon-loadbalancer for load balancer APIs, ribbon-eureka for dynamic server lists from Eureka, ribbon-transport for HTTP, TCP, and UDP clients using RxNetty, ribbon-httpclient for a REST client on Apache HttpClient, ribbon-example for examples, and ribbon itself which integrates load balancing, fault tolerance, and caching on top of Hystrix. The critical detail is that Netflix does not give all modules equal attention. The README explicitly states that ribbon-core, ribbon-eureka, and ribbon-loadbalancer are 'deployed at scale in production', while ribbon-transport and ribbon are 'not used'. This means that if you use the transport or the top-level ribbon module, you are relying on code that Netflix has effectively abandoned, despite the project not being archived. This is a significant factor in deciding which module to depend on.
How You Get It Running: Maven and Code Examples
To use Ribbon, you add a dependency to your Maven build. The README shows a dependency on com.netflix.ribbon:ribbon:2.2.2, but the latest release is v2.4.8, so you would likely use that version. The code examples show two primary usage models. The first is a template-based approach where you create an HttpResourceGroup with client options, such as withMaxAutoRetriesNextServer(3) and withConfigurationBasedServerList("localhost:8080,localhost:8088"), then build an HttpRequestTemplate with a URI template and a fallback provider. The second is an annotation-based approach where you define an interface with methods annotated with @Http, then call Ribbon.from(MovieService.class) to get a proxy. You also have the option to build a load balancer directly using LoadBalancerBuilder, as shown in the Eureka example with AvailabilityFilteringRule and ZoneAffinityServerListFilter. The examples are concrete and show real API calls, but note that the README does not include a full build or run configuration, so you will need to consult the repository for complete examples.
The Load Balancing Mechanism: Rules, Filters, and Dynamic Server Lists
Ribbon's load balancing is built around the concept of a load balancer that uses a rule to select a server from a list. The README shows the use of AvailabilityFilteringRule, which filters out servers that are marked as unavailable, and ZoneAffinityServerListFilter, which applies zone affinity. The server list can be static, as in the configuration-based list, or dynamic, as with DiscoveryEnabledNIWSServerList which pulls from Eureka. The ZoneAwareLoadBalancer is built from these with LoadBalancerBuilder. This mechanism is client-side, meaning each client instance maintains its own view of the server list and makes its own decisions. This is different from server-side load balancing where a central proxy routes requests. The documentation shows that you can also use LoadBalancerCommand to wrap any IPC call, such as HttpURLConnection, with load balancing, which gives you flexibility beyond the built-in HTTP clients.
A Genuine Limitation: Maintenance Mode and Missing Features
The most obvious limitation is that Ribbon is in maintenance mode. The README states that Netflix is not adding new functionality and is focusing on an internal gRPC-based solution. This means that if you encounter a bug or need a new feature, you cannot expect a fix from Netflix. The README also reveals that some components are not used internally, which suggests they may have known deficiencies. For example, ribbon-httpclient is deprecated, and ribbon-transport is not used. Another limitation is that Ribbon is Java-only, which is a problem if your architecture is polyglot. The README explicitly says that Netflix is moving to gRPC for 'multi-language support and better extensibility/composability through request interceptors'. So if you need to call services from non-JVM languages, Ribbon is the wrong tool.
The Alternative: gRPC with Interceptors
The README points to gRPC as the alternative that Netflix is moving to. The key difference is that gRPC is a full RPC framework with a defined wire protocol, while Ribbon is a library that works with HTTP and other protocols. gRPC supports multiple languages, which addresses Ribbon's Java-only limitation. The README mentions that Netflix is adding load-balancing and discovery interceptors to gRPC to achieve feature parity with Ribbon and Eureka. The README says those interceptors are Netflix-internal at the moment, with open-sourcing not expected before Q3 of 2016. This is a fundamentally different approach: Ribbon is a client-side library that you wire into your existing HTTP stack, while gRPC is a framework that includes client, server, and serialization. For new projects, gRPC is the direction Netflix is going, and the README suggests it offers better extensibility. However, if you are heavily invested in the JVM and want a simple, battle-tested load balancer without adopting a full RPC framework, Ribbon might still be sufficient.
Maintenance and Upgrade Cost, and License Implications
The maintenance cost of Ribbon is low in the sense that it is stable and not changing, but that is also the cost: you will not get updates. The latest release, v2.4.8, is from August 2021 and is based on 2.4.4 with upgraded build and CI configurations, meaning the project is still being kept buildable but not feature-enhanced. There is also a v2.7.x line, with the latest being v2.7.17 from 2019, so there are two version lines to be aware of. Upgrading between them may require changes, but the README does not detail the differences. The license is Apache-2.0, which is permissive and allows you to use, modify, and distribute the code, including commercially, without requiring you to open-source your changes. However, you should note that the README includes copyright 2014 Netflix, Inc., so you should read the full license in the repository. The maintenance mode means that if you need to fix a bug, you are on your own, but the Apache-2.0 license allows you to fork and maintain it yourself.
Editorial conclusion
Adopt Ribbon if you are maintaining an existing JVM-based service that already uses it and you need a stable, battle-tested load balancer without new features. Do not adopt it for new projects, especially if you need multi-language support or active maintenance. Before adopting, verify that the components you need (ribbon-core, ribbon-loadbalancer, ribbon-eureka) are the ones deployed at scale in production, and check the release notes for the latest version (v2.4.8) to confirm the build and CI upgrades. Be aware that ribbon-transport and ribbon modules are not used by Netflix and may have unaddressed issues.
Frequently asked questions
What is Netflix Ribbon used for?
It is a client side IPC library for Java with built in load balancing, fault tolerance, caching and batching, and it supports HTTP, TCP and UDP in an asynchronous and reactive model. Binaries are published to Maven Central under the groupId com.netflix.ribbon.
Is Netflix Ribbon still maintained?
The README places Ribbon in maintenance mode: a large external feature request would not be prioritized inside Netflix, while complete pull requests from outside would be reviewed and accepted. The last push was on 2025-12-17 and the newest listed release is v2.4.8 from 2021-08-05.
Which Netflix Ribbon modules are still used in production?
ribbon-core, ribbon-eureka and ribbon-loadbalancer are each described as deployed at scale in production, and ribbon-test is an internal integration test suite. ribbon-evcache, ribbon-guice, ribbon-transport and the aggregated ribbon module are all marked not used.
What is Netflix replacing Ribbon with?
An RPC solution built on top of gRPC, chosen for multi language support and for extensibility through request interceptors. Load balancing and discovery interceptors are being added for parity with Ribbon and Eureka, and the README describes them as Netflix internal, with open sourcing hoped for no earlier than Q3 of 2016.
How do I add Netflix Ribbon to a Maven project?
The binaries are on Maven Central. The dependency block in the README uses groupId com.netflix.ribbon, artifactId ribbon and version 2.2.2, while the listed releases include v2.7.17 from 2019-05-29 and v2.4.8 from 2021-08-05, so the snippet is older than every release it names.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/netflix-ribbon)Star history chart for your README
[](https://hysenlabs.com/projects/netflix-ribbon)Was this useful?