All notable changes to io.ipwhois:ipwhois-java will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Initial public release.
IPWhois.lookup()— single IP lookup (IPv4 / IPv6, or the caller's own current IP when called with no argument ornull).IPWhois.bulkLookup()— up to 100 IPs in a single GET request (paid plan). Returns aBulkResultwrapper exposing the success, per-IP results, and whole-batch error cases throughisSuccess(),getResults(), andgetError().- Localisation (
lang), field filtering (fields), threat detection (security), and rate info (rate) — passable per call or set once on the client. - Free plan (no API key,
ipwho.is) and paid plan (ipwhois.pro) supported through the same class. Anull, empty, or whitespace-only API key is normalised to the free plan. - HTTPS by default. Set
Map.of("ssl", false)in the constructor's options map to fall back to HTTP. - Fluent setters for client-wide defaults —
setLanguage(),setFields(),setSecurity(),setRate(),setTimeout(),setConnectTimeout(),setUserAgent(). - Never-throws contract on
lookup()andbulkLookup(): every runtime failure (invalid IP, bad API key, rate limit, network outage, malformed JSON) is returned in the response withsuccess: false, a human-readablemessage, and anerror_typeof"api","network","environment", or"invalid_argument". HTTP error responses are additionally enriched withhttp_status; HTTP 429 responses on the free plan withretry_after. - Fail-fast validation on the setters and the constructor's options map:
IllegalArgumentExceptionis thrown fornullwhere it isn't allowed (setLanguage,setFields,setUserAgent, theuser_agentoption) and for non-positive timeouts (setTimeout,setConnectTimeout, and thetimeout/connect_timeoutoptions). Surfaces programmer errors at the point they happen rather than on the next network call. - Zero runtime dependencies — uses only
java.net.http.HttpClient(JDK 11+) and an embedded minimal JSON parser inio.ipwhois.internal.MiniJson. No Jackson, no Gson, no JSON-P. - JUnit 5 test suite covering URL construction, input validation, fluent setters, and the embedded JSON parser.