google/guava

Google core libraries for Java

17
Hotness score
67
Reliability score
51,527
Stars
about 12 years
Age
0
Published reviews
0
Questions

Scores

Hotness and reliability

The two headline scores, measured daily, with 30, 90, and 180 day views.

Hotness score

Jul 19, 2026

Current17

Previous31

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Hotness formula

40% Hot today + 40% Hot this week + 20% Breakout.

  • 40% Hot today: 21
  • 40% Hot this week: 16
  • 20% Breakout: 37
  • Stars gained: 1d: 2
  • Stars gained: 7d: 5
  • Stars gained: 14d: 14
  • Stars gained: 30d: 44
  • Stars gained: 90d: 31

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Jul 19, 2026

Current67

Previous68

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Reliability formula

30% Continuity + 30% Closure + 20% Shipping + 10% Liveness + 10% Support burden.

  • 30% Continuity: 77
  • 30% Closure: 85
  • 20% Shipping: 4
  • 10% Liveness: 100
  • 10% Support burden: 76

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

Reliability breakdown

What drives the reliability score

Component scores measured daily from GitHub activity (2026-07-18).

Continuity30% of headline77

Activity on 70 of 90 tracked days in the last 90 and 20 of 30 in the last 30.

Closure30% of headline85

Merged 132 of 179 PRs opened and closed 14 of 13 issues opened over the last 90 tracked days — PR flow carries 55% of this component, issue flow 45%.

Shipping20% of headline4

1 releases in the last 180 days, 0 in the last 90 and 0 in the last 30 — a steady cadence scores highest.

Liveness10% of headline100

Last push 0 days ago — freshness decays as pushes age (roughly halves every 83 days without a push).

Support burden10% of headline76

Open-issue load isn't tracked for this repo yet.

Adoption confidence92

Modeled — how confidently teams are adopting this repo. Stargazers

Maintenance quality69

Modeled from PR/issue responsiveness and upkeep signals. Activity pulse

Risk score22

Modeled — lower is better; adoption and continuity risk. Repository

Stays active (30d)68%

Modeled chance the repo stays active over 30 days. Activity pulse

Stays active (90d)75%

Modeled chance the repo stays active over 90 days. Activity pulse

Release rhythm (180d)4

Regularity of releases over the last 180 days. Releases

Maintainer bus risk (90d)18%

Modeled — lower is better; concentration of commits in few maintainers. Contributors graph

Topics

Explore related topics

Jump into the topic listings this repository belongs to.

Measured history

Project metrics

Weekly GitHub totals with 30, 90, and 180 day views.

Issues opened

Jul 12, 2026

Current0

Previous0

Weekly total

320
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Jul 12, 2026

Current0

Previous0

Weekly total

420
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Jul 12, 2026

Current10

Previous11

Weekly total

29150
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Jul 12, 2026

Current10

Previous12

Weekly total

29150
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Jul 12, 2026

Current10

Previous10

Weekly total

26130
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue

Issue close ratio (daily)

Jul 15, 2026

Current1.00

Previous0.00

Daily ratio — a gap means nothing was opened that day

How this works: each day's value is issues closed that day ÷ issues opened that day. Days when nothing was opened render as gaps — never a rolling average or a made-up zero. Values above 1 mean the project closed more issues than arrived that day.

2.001.000.00
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

20 observed daily rows. Missing days are not fabricated.

Per-day formula: issues closed that day ÷ issues opened that day; blank when nothing was opened (a gap, not a zero).

DateIssues openedIssues closedStored score

Pull request close ratio (daily)

Jul 17, 2026

Current1.00

Previous1.00

Daily ratio — a gap means nothing was opened that day

How this works: each day's value is pull requests closed that day ÷ pull requests opened that day. Days when nothing was opened render as gaps — never a rolling average or a made-up zero. Values above 1 mean the project closed more pull requests than arrived that day.

3.001.500.00
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

134 observed daily rows. Missing days are not fabricated.

Per-day formula: pull requests closed that day ÷ pull requests opened that day; blank when nothing was opened (a gap, not a zero).

DatePRs openedPRs closedStored score

Releases

Jul 19, 2026

Current0

Previous0

Weekly total

110
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue

Project Overview

Guava is a core Java library set from Google that expands what you can do with the Java standard library in day-to-day backend and Android code. You get immutable collection implementations, richer collection types like Multimap and Multiset, graph data structures, hashing helpers, string and primitive utilities, concurrency helpers, and I/O support in one cohesive package. Your team can use Guava to reduce repetitive utility code and to standardize common patterns that otherwise become inconsistent across services.

Guava ships in two primary dependency flavors: a JRE artifact for Java 8+ runtimes and an Android-compatible artifact for Android use cases. That split matters when your team shares modules across server and mobile codebases, because API availability and transitive behavior can differ by flavor. The project also publishes snapshot builds and API docs for HEAD, which gives you an upgrade path if your team needs a fix before the next stable release.

In practical terms, Guava works best when your team wants stronger collection semantics and safer defaults around shared state. Immutable collections reduce accidental mutation; utility classes reduce boilerplate around null-safe string handling, primitive operations, and hashing. Graph support gives you a ready-made model for dependency graphs and routing-style problems without adding a separate graph framework. You can treat Guava as a foundational library, but your team should still enforce clear usage boundaries so that utility calls do not become an unstructured dependency magnet.

Key Challenges Addressed

Without a cohesive utility layer, your codebase often drifts into duplicate helper methods, inconsistent collection semantics, and fragile ad hoc concurrency utilities. Guava targets that drift directly. ImmutableList, ImmutableSet, and ImmutableMap provide explicit immutable containers that your team can pass across boundaries with less defensive copying. Multimap and Multiset remove custom wrappers for one-to-many and counted-element operations, which simplifies indexing and aggregation logic.

Concurrency-related friction also appears early in Java systems. Guava addresses part of that with abstractions such as ListenableFuture and utility executors that make callback-based composition easier in codebases that still use future-based async patterns. Your team can avoid writing custom callback registries and reduce threading mistakes by relying on well-tested primitives.

Text, primitive, and hashing work can be similarly noisy in plain JDK code. Guava gives you stable utility surfaces for string normalization, splitting/joining, primitive array handling, and hashing helpers, so your team can focus on domain behavior instead of low-level plumbing.

  • Use immutable collections to enforce no-mutation boundaries between modules.
  • Replace bespoke one-to-many maps with Multimap to cut custom glue code.
  • Model dependency edges with Guava graph APIs instead of hand-rolled adjacency containers.
  • Standardize common utility behavior to reduce subtle differences between services.

When your team adopts Guava intentionally, the biggest win is consistency. Shared conventions around immutable data and utility usage usually improve code review quality and reduce regressions that come from inconsistent helper implementations.

Getting Started

Guava is straightforward to adopt through Maven or Gradle, with one important choice at the start: pick the correct flavor for your runtime target. Use the -jre artifact for Java 8+ server/runtime environments, and use the -android artifact when your module must stay Android-compatible.

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>33.0.0-jre</version>
</dependency>
dependencies {
  implementation("com.google.guava:guava:33.0.0-jre")
  // or: implementation("com.google.guava:guava:33.0.0-android")
}

After adding the dependency, start with a small boundary-hardening change rather than a broad rewrite. Converting mutable DTO internals to immutable collections is a low-risk first move. You can then migrate narrow use cases to Multimap or Multiset where custom containers currently exist.

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;

ImmutableList<String> stages = ImmutableList.of("queued", "running", "done");
Multimap<String, String> labelsByStage = ArrayListMultimap.create();
labelsByStage.put("running", "batch");
labelsByStage.put("running", "priority");

Sharp edges show up when dependency exposure is not planned. If Guava types appear in public APIs, upgrades can affect downstream modules more than expected. Your team should decide whether Guava is an internal implementation detail or a public contract. In Gradle, the api vs implementation choice is directly relevant for that decision. For Android-shared modules, verify flavor compatibility early to avoid late-stage CI surprises.

Features and Use Cases

Guava’s feature set is broad, but several areas usually produce immediate engineering value. Immutable collections are the most common entry point because they encode intent directly in type usage. If your service layer passes ImmutableMap and ImmutableList, your team documents mutability constraints in code rather than in comments or conventions.

Specialized collections are another high-impact area. Multimap is useful for request indexing, tag/group lookups, or any one-to-many relationship where a plain Map<K, List<V>> becomes repetitive. Multiset is practical for frequency counting and weighted aggregations. Bi-directional mappings with BiMap simplify identity translation flows where reverse lookup should remain explicit and efficient.

Hashing utilities support consistent digests and hash functions for cache keys or deduplication workflows. I/O utilities and string helpers reduce low-level plumbing and cut repeated null/empty handling code. Primitive helpers can simplify collection transformations where boxing overhead or repetitive conversion logic would otherwise clutter hot paths.

Graph APIs are a distinct advantage when your domain already has edge-centric logic. Dependency resolution, job ordering, and topology inspection become clearer when represented through graph abstractions rather than nested map/set structures.

  • Service configuration loading: immutable maps and sets for safe cross-thread read access.
  • Event labeling and routing: Multimap for one-to-many tag mappings.
  • Counting and ranking pipelines: Multiset for frequency analysis.
  • Task orchestration models: graph APIs for dependency edges and traversal.
  • Async adaptation in legacy code: future utilities where full reactive migration is not planned.

A pragmatic rollout pattern is to adopt Guava per domain boundary. Your team can keep one bounded context on JDK-only utilities while another context uses Guava heavily, then converge gradually based on observed maintenance cost. That keeps migration risk low while still capturing most of the ergonomics gains.

Ecosystem and Dependencies

Guava integrates through standard Java build tooling and is easy to consume in Maven and Gradle projects. The project publishes stable releases and snapshot artifacts, so your team can select either release cadence based on risk tolerance. Snapshot APIs can be useful for early validation, while stable releases suit stricter production change policies.

For documentation and learning, your team can rely on the project’s GitHub repository, wiki resources, and generated API docs. That ecosystem structure matters because Guava covers many utility domains, and implementation details can vary across packages. Keeping usage tied to official docs reduces accidental reliance on outdated patterns.

Dependency strategy is the main ecosystem decision. If Guava becomes visible in your public API, consumers inherit that coupling and future upgrade coordination becomes part of your release process. If your team keeps Guava internal, you retain flexibility to refactor utility usage without forcing consumer-side changes.

Android compatibility is another ecosystem dimension. Guava explicitly supports an Android flavor, which helps when your team shares business logic across platforms. Still, you should validate any specific API surface against your chosen flavor and module constraints before broad rollout.

  • Build integration: Maven and Gradle artifacts for JRE and Android flavors.
  • Documentation channels: GitHub repo, wiki pages, and published API docs.
  • Release posture: stable versions for production and snapshots for early verification.
  • Compatibility planning: internal-only usage vs public API exposure.

Architectural Overview

Guava is organized as a set of focused packages rather than one monolithic abstraction layer. You can treat each package family as a capability module: collections, concurrency, graphs, hashing, I/O, strings, and primitives. That structure lets your team adopt incrementally while keeping conceptual boundaries clear.

The collection architecture prioritizes semantic clarity. Immutable collection types model read-only ownership explicitly, while specialized mutable types (Multimap, Multiset, etc.) model common patterns without custom wrappers. In practice, that reduces accidental complexity because the data structure itself communicates behavior and constraints.

Concurrency utilities are designed for composability in future-oriented codebases, especially where callback orchestration is still relevant. Your team can centralize async coordination patterns using Guava primitives instead of scattering custom listener/executor glue. Even if your codebase later migrates to newer async models, Guava-based boundaries can act as stable transition layers.

Graph support introduces a reusable model for edge and node relationships. Instead of manually synchronizing adjacency maps, your team can encode graph operations through a dedicated API with clearer intent. That often improves testability because graph fixtures are easier to reason about than ad hoc nested collections.

Architecturally, the biggest design leverage comes from policy choices around where Guava types are allowed. If your team defines boundaries up front, Guava increases clarity. If usage is unrestricted, utility sprawl can make ownership and upgrade paths harder to manage.

  • Package-level modularity supports selective adoption.
  • Data structure semantics are explicit in type choices.
  • Async and graph APIs reduce custom infrastructure code.
  • Boundary policy determines long-term maintainability impact.

Pros and Cons

Guava gives your team high-quality utility coverage with coherent APIs, and that can improve both velocity and readability. Immutable collections and specialized containers often remove entire categories of defensive code. You also get a single dependency for multiple utility needs, which simplifies dependency management compared with stitching together many narrow libraries.

Another strong point is portability across common Java environments, including Android-focused modules through the Android flavor. If your team maintains shared logic, this split can preserve consistency while respecting platform requirements. The project’s mature documentation and package breadth also support long-lived codebases where maintainability matters more than short-term novelty.

Trade-offs still matter. Guava’s breadth can encourage overuse when your team lacks clear conventions. Utility-heavy code sometimes becomes less discoverable if static imports and helper chains hide domain intent. API exposure risk is real too: once Guava types enter public interfaces, future dependency and version coordination can become a release-management concern.

You should also weigh overlap with modern JDK features already available in your runtime baseline. Some helper patterns that once required Guava now have acceptable JDK alternatives. A disciplined adoption plan works best: use Guava where semantics are materially better, avoid it where native JDK APIs are already clear and sufficient.

  • Pros: strong immutable collections, practical specialized data structures, broad utility coverage, Android/JRE flavor support.
  • Pros: consistent APIs that reduce duplicate helper implementations across modules.
  • Cons: potential API coupling if Guava types leak into public contracts.
  • Cons: utility sprawl risk without explicit style and boundary rules.
  • Cons: partial overlap with newer JDK capabilities can create unnecessary abstraction layers.

Comparison and Alternatives

Measured 90-day trends for this project and its alternatives.

GitHub stars

Weekly star gains

51,4960-51,496
Full metrics details

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

Guava

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

76 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

75 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.

80 observed daily rows. Missing days are not fabricated.

DateValue

Issues opened

Weekly total

320
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Guava

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue

Issues closed

Weekly total

420
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Guava

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

36 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

36 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

36 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests opened

Weekly total

29150
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Guava

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests closed

Weekly total

29150
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Guava

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

178 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

36 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

36 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

36 observed daily rows. Missing days are not fabricated.

DateValue

Pull requests merged

Weekly total

26130
Full metrics details

GitHub API observation. Historical values render only when the source provides a real observation for that day.

Guava

GitHub API observation. Historical values render only when the source provides a real observation for that day.

178 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub API observation. Historical values render only when the source provides a real observation for that day.

36 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed pull request ratio

Weekly average

100500
Full metrics details

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

Guava

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

76 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

75 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.

80 observed daily rows. Missing days are not fabricated.

DateValue

Open/closed issues ratio

Weekly average

100500
Full metrics details

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

Guava

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

180 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

76 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

75 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.

80 observed daily rows. Missing days are not fabricated.

DateValue

Releases

Weekly total

110
Full metrics details

GitHub release published_at events bucketed by UTC day; drafts are excluded.

Guava

GitHub release published_at events bucketed by UTC day; drafts are excluded.

180 observed daily rows. Missing days are not fabricated.

DateValue
Commons Lang

GitHub release published_at events bucketed by UTC day; drafts are excluded.

76 observed daily rows. Missing days are not fabricated.

DateValue
Commons Collections

GitHub release published_at events bucketed by UTC day; drafts are excluded.

75 observed daily rows. Missing days are not fabricated.

DateValue
Vavr

GitHub release published_at events bucketed by UTC day; drafts are excluded.

80 observed daily rows. Missing days are not fabricated.

DateValue

Hotness score

Weekly average

100500
Full metrics details

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

Guava

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Commons Lang

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

76 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Commons Collections

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

75 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score
Vavr

Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.

80 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.

  • Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
  • Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
  • Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
  • Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
  • Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
  • Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
DateStarsStars 1dStars 7dStars 14dStars 30dStars 90dSame-day multiplierWeekly multiplierFortnight multiplierHot todayHot weekBreakoutStored score

Reliability score

Weekly average

100500
Full metrics details

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

Guava

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

180 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Commons Lang

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

76 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Commons Collections

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

75 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score
Vavr

Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.

80 observed daily rows. Missing days are not fabricated.

Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.

  • Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
  • Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
  • Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
  • Support burden = 100 − 2 × open issues per 1,000 stars
  • Liveness = 100 × exp(−pushed days ago ÷ 120)

Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.

DateIssues openedIssues closedPRs openedPRs mergedReleasesStarsOpen issuesPushed days agoContinuityClosureShippingLivenessSupport burdenLicenseObserved daysMissing daysNeeds healingStored score

If your team is evaluating Guava against other Java utility libraries, the useful comparison axis is not feature count alone. You need to compare collection semantics, API clarity, dependency surface, ecosystem maturity, and how much replacement of custom infrastructure each option gives you.

Apache Commons Lang focuses on core language-oriented helpers. Your team gets many string/object/number utilities, but collection semantics and immutable container strategy are less central than in Guava. It is a good fit for narrow helper needs, yet it usually does not replace Guava’s richer data structure layer.

Apache Commons Collections emphasizes collection utilities and data structures. It can serve teams that want collection-focused extensions with an Apache Commons style footprint. Guava often feels more cohesive when your team also wants hashing, graph, and concurrency-adjacent utilities in the same dependency.

Eclipse Collections offers a deep collections model with a strong functional-style API and many container variants. If your workload is heavily collection-centric, your team may find Eclipse Collections compelling. Guava remains attractive when your scope includes broader utility categories beyond collections.

Vavr brings functional programming abstractions and immutable data structures to Java. It can be a strong option if your team wants functional patterns as a primary design direction. Guava usually suits teams that want pragmatic utility expansion while staying close to conventional Java idioms.

fastutil specializes in type-specific collections with performance-oriented design. Your team can benefit when primitive-specialized structures are central and memory/layout trade-offs are explicit priorities. Guava is broader, while fastutil is narrower and more focused on container-level efficiency.

Project Repo Adoption confidence (~6mo) PRs merged (~6mo) Star growth (~6mo)
Guava https://github.com/google/guava ██████████ 64.93 ██████████ 348 ██████████ 1455
Apache Commons Lang https://github.com/apache/commons-lang ░░░░░░░░░░ 31.27 ░░░░░░░░░░ 0 ██████████ 204
Apache Commons Collections https://github.com/apache/commons-collections ░░░░░░░░░░ 31.91 ██░░░░░░░░ 59 ░░░░░░░░░░ 40
Eclipse Collections https://github.com/eclipse/eclipse-collections ██████████ 49.27 ░░░░░░░░░░ 0 ░░░░░░░░░░ 151
Vavr https://github.com/vavr-io/vavr ████████░░ 58.56 ██████░░░░ 197 ██░░░░░░░░ 318
fastutil https://github.com/vigna/fastutil ██░░░░░░░░ 39.62 ░░░░░░░░░░ 6 ██░░░░░░░░ 274

Best overall alternative: Eclipse Collections. You get a very mature, collection-first design with broad container coverage and strong long-term maintainability signals for teams whose primary need is advanced collections rather than all-around utility breadth.

Conclusion

Guava is a strong fit when your team wants one reliable dependency for immutable collections, specialized data structures, graph modeling, and practical utility APIs across Java and Android-compatible modules. The biggest engineering payoff comes from consistent semantics: immutable boundaries, explicit container intent, and less repeated helper code.

Trade-offs are mostly governance and API discipline. If Guava types leak widely into public interfaces, upgrades become coordination work. If usage is intentional and bounded, Guava can stay lightweight in practice and improve readability across large codebases.

For implementation planning, start with official resources: the GitHub repository, wiki documentation, and release feed. You can then adopt package-by-package, validate flavor compatibility early, and keep public API boundaries explicit so utility adoption stays an asset instead of a long-term constraint.

Join the conversation

Reviews · Questions · Posts

Share what you know about guava — write a review from your real experience, ask an implementation question, or publish a post about how you use it.

Share your experience

Write or update your review

Explain what worked, what broke down, and what another team should know before adopting guava.

Write your review now — it saves locally and publishes automatically after you sign in.

Rating
Positive attributes
Negative attributes

Project Q&A

Questions and answers

Browse implementation threads tied directly to google/guava. Each question links through to the full answer page.

Q&A No threads yet

Be the first to ask how teams run guava in production. Every question you post becomes a durable, searchable answer page other developers can find.

Ask the first question

Related posts

Posts tagged with the same topics

These posts come from the same topic surface as this repo, so readers can move from project evaluation into practical writeups and migration notes without leaving context.

Posts No topic-linked posts yet

Share how your team uses guava — a migration note, an architecture writeup, or a comparison. Your post reaches everyone browsing these same topics.

Write the first post
Get a weekly email with the hottest new projects in the Mobile Development and Java world.
No Spam. Unsubscribe easily at any time.

Copyright 2018-2026 Awesome Open Source.  All rights reserved.