Skip to content

Releases: ipregistry/ipregistry-java

6.1.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 02 Jul 20:42

Added

  • Asynchronous API: lookupAsync/parseAsync methods on IpregistryClient return a CompletableFuture and are backed by a virtual-thread-per-task executor by default. The executor is configurable via IpregistryConfig#executor (a caller-provided executor is not shut down by the client).
  • Support for a caller-provided CloseableHttpClient via new IpregistryClient and DefaultRequestHandler constructors, allowing full control over connection pooling, proxying, TLS, and metrics. An injected client is not closed by the Ipregistry client (the caller retains ownership).
  • Typed error codes: ApiException#getErrorCode() (and Error#getErrorCode()) now return a strongly typed ErrorCode enum in addition to the raw string code, allowing callers to branch on error conditions without string matching. Unrecognized codes return null while the raw code remains available.
  • Automatic retries with exponential backoff for transient network errors and 5xx server responses, configurable via IpregistryConfig (retryMaxAttempts, retryInterval, retryOnServerError, retryOnTooManyRequests). Retries on 429 Too Many Requests are disabled by default and honor the Retry-After header when enabled.
  • IpregistryClient now implements Closeable to release the underlying HTTP connection pool.

Fixed

  • Escape JSON request bodies so that user-agent and IP values containing special characters (quotes, backslashes, control characters) no longer produce malformed requests.
  • Skip the remote API call in batch lookups when every requested IP is already served from the cache.
  • Bypass the cache for origin (requester) IP lookups to avoid returning data associated with a different IP.
  • Replace deprecated Guava CacheBuilder#expireAfterWrite(long, TimeUnit) usage with the Duration variant.

Changed

  • Upgrade dependencies: Jackson 2.22.0, Guava 33.6.0-jre, Apache HttpClient5 5.6.2, MaxMind DB 4.1.0, JUnit 6.1.1, Mockito 5.23.0, REST-assured 6.0.0, Lombok 1.18.46, and the Gradle wrapper to 9.6.1.

6.0.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 06 Dec 22:59
  • BREAKING: Require Java 25+.

5.0.1

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 22 Jul 23:46

Minor release to fix an issue in the new automated workflow.

5.0.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 22 Jul 23:43

Changed

  • BREAKING: Require Java 21+.
  • Fixed deprecated Gradle configurations.

Improved

  • Added professional, comprehensive javadoc documentation to all API model classes.

Removed

  • Remove deprecated IpregistryConfig#apiUrl. Use IpregistryConfig#baseUrl instead.

4.0.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 08 May 19:15

Added

  • Add new IpregistryGeolocationDataset class for easy loading and query an Ipregistry Geolocation dataset offline.

Changed

  • Updated required Java version to Java 11 from Java 8.

3.7.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 10 Jun 16:47

Added

  • Add new parse method to IpregistryClient to parse one or more user-agent values.

v3.6.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 14 Apr 23:09

Added

  • New vpn field in security object.

v3.5.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 21 Dec 21:45

Added

  • New relay field in security data.

Deprecated

  • Deprecate IpregistryConfigBuilder.apiUrl in favor of IpregistryConfigBuilder.baseUrl.

v3.4.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 07 Nov 18:58

Added

  • Support for usage in native images with GraalVM.

v3.3.0

Choose a tag to compare

@laurentpellegrino laurentpellegrino released this 26 Oct 21:09

Added

  • IpInfo responses has a new company field.
  • The enum ConnectionType includes a new value of INACTIVE.
  • The class DefaultRequestHandler accepts a custom ObjectMapper.

Changed

  • A single ObjectMapper instance is created and reused in DefaultRequestHandler.
  • The API key is no longer passed as a query parameter but as a header when a request is sent.