Apache Commons Lang

Apache Commons Lang End of Life - Dates and Lifecycle

Apache Commons Lang is a Java utility library providing helper classes for strings, numbers, reflection, and object manipulation that extend the core Java API, one of the most widely used libraries in the Java ecosystem.

Last updated 29 July 2026

35

Versions tracked

33

At EOL

2

Supported

Apache Commons Lang version lifecycle and end-of-life dates
Version Released Security Support Latest
3.20.0
12 Nov 2025
3.19.0
19 Sep 2025
12 Nov 2025 Ended 8 months, 2 weeks ago
3.18.0
06 Jul 2025
19 Sep 2025 Ended 10 months, 1 week ago
3.17.0
24 Aug 2024
06 Jul 2025 Ended 1 year ago
3.16.0
01 Aug 2024
24 Aug 2024 Ended 1 year, 11 months ago
3.15.0
13 Jul 2024
01 Aug 2024 Ended 1 year, 11 months ago
3.14.0
18 Nov 2023
13 Jul 2024 Ended 2 years ago
3.13.0
23 Jul 2023
18 Nov 2023 Ended 2 years, 8 months ago

Apache Commons Lang is a Java utility library providing helper classes for strings, numbers, reflection, concurrency, and object manipulation that extend what the core Java API offers. It's one of the most widely used libraries in the Java ecosystem, commonly pulled in as a transitive dependency even by developers who never directly chose to add it.

Apache Commons Lang Lifecycle Explained

Commons Lang has no formal end of life schedule for its actively developed 3.x line (technically packaged as lang3), it's simply the current, maintained version, with releases shipping every few months. The older 2.x line, however, does have an official status: the project's own documentation states plainly that "Commons Lang 2 is in maintenance mode," distinct from and behind the actively developed 3.x line. That transition happened at version 3.0 in 2011, a deliberately backwards-incompatible move to Java 5 that changed the package name from org.apache.commons.lang to org.apache.commons.lang3, specifically so both versions could coexist on the same classpath during a gradual migration.

Within the stable 3.x line, the most disruptive event in years happened not through a major version bump, but through a routine feature release. Version 3.18.0, released in July 2025, deprecated a long list of widely used StringUtils methods, including equals(), startsWith(), contains(), and replace(), in favor of new Strings.CS (case-sensitive) and Strings.CI (case-insensitive) classes. Because these methods are used constantly across the Java ecosystem, the change broke CI builds for numerous downstream projects and prompted a JIRA ticket, LANG-1777, explicitly requesting the deprecations be reverted. It illustrates a real risk with libraries like this: even without a formal end of life event, a routine minor release can still force meaningful code changes across a codebase.

The same 3.18.0 release also shipped the underlying code fix for what later became CVE-2025-48924, a StackOverflowError in ClassUtils.getClass() triggered by very long input strings, discovered through Google's OSS-Fuzz project. The CVE identifier itself wasn't formally documented on the project site until the following release, 3.19.0, two months later.

Is Apache Commons Lang still maintained?

Yes, the 3.x line is actively developed, with version 3.20.0 released in November 2025 and a regular cadence of releases. The older 2.x line, last updated in 2011, is officially described by the project as being in maintenance mode.

What is Apache Commons Lang used for?

It provides utility classes that extend Java's core API for common tasks like null-safe string operations, object comparison and building, number parsing, and reflection helpers, functionality many Java developers reach for constantly but that isn't included in the standard library.

What is CVE-2025-48924?

It's a StackOverflowError vulnerability in ClassUtils.getClass() that can be triggered by extremely long class name inputs. The underlying code fix shipped in version 3.18.0, discovered through Google's OSS-Fuzz automated fuzzing project, though the CVE identifier wasn't formally documented on the Commons Lang site until version 3.19.0.

Why did Apache Commons Lang deprecate StringUtils.equals()?

Version 3.18.0 deprecated equals() and many other commonly used StringUtils methods in favor of new Strings.CS and Strings.CI classes, intended to make case sensitivity explicit rather than implicit in method names. The change proved controversial, breaking builds for several downstream projects, and a JIRA ticket (LANG-1777) was filed specifically asking the project to revert the deprecations.