
Facilitates shared data types across projects, addressing duplication issues. Includes types for Location, Locale, Currency, and potentially Duration shortcuts for types like Distance.
[!IMPORTANT] v3.2.0 Behavioral Fixes: This release corrects long-standing bugs whose output or validation changes for existing code.
UrlEncoder.encodeis now true RFC 3986 percent-encoding — useencodeFormDatafor the previousapplication/x-www-form-urlencodedbehavior.Url/Uri/Urn/GeoUristring output is now well-formed, andUrn/GeoUriconstruction now rejects invalid input. Critical arbitrary-precision fixes also land inBigInteger/BigDecimaldivision andBankersValue. See the changelog for the full list.v3.0.0 Breaking Change: All GeoJSON geometry types (e.g.,
Point,Polygon) have been renamed with aGeoprefix (e.g.,GeoPoint,GeoPolygon).Moneynow usesBigDecimalfor its internal value to support sub-minor units, andTelemetryhas moved to thequantitativepackage.
This project follows a specialized documentation hierarchy.
| Category | Type | Standard / Compliance | Description |
|---|---|---|---|
| Financial | Money |
Banker's Rounding | Arbitrary-precision monetary values with BigDecimal storage. |
Currency |
ISO 4217 | Global currency definitions with scale factors. | |
| Localization | Locale |
BCP 47 | Universal language, region, and script identifiers. |
| Quantitative | Coordinates |
WGS84 | Geodetic latitude and longitude degrees. |
Distance |
SI (Meters) | Linear distance with accuracy support. | |
Speed |
SI (mps) | Rate of motion in meters per second. | |
Altitude |
SI (Meters) | Vertical distance above/below reference. | |
Azimuth |
Degrees | Compass bearing (0-360°). | |
Telemetry |
Unified Domain | Comprehensive model with coordinates, azimuth, speed, and altitude. | |
| Geospatial | GeoJson |
RFC 7946 |
GeoPoint, GeoFeature, and GeoFeatureCollection models. |
| SI Units | UnitOfMeasure |
SI / Imperial | Definitions for meters, liters, bytes, etc. |
MetricPrefix |
SI Prefixes | Scaling factors from Quetta to Quecto. |
|
| Identifiers | Url |
RFC 3986 | Uniform Resource Locators (Web). |
Urn |
RFC 8141 | Uniform Resource Names (Persistent IDs). | |
GeoUri |
RFC 5870 | Geographic 'geo' URI scheme. | |
| Mathematics | BigInteger |
Pure Kotlin | Arbitrary-precision integer math support. |
BigDecimal |
Pure Kotlin | Arbitrary-precision decimal math with rounding support. | |
| Utilities | BitSet |
Multiplatform | Space-efficient storage for bit-level flags. |
BankersValue |
Half-to-Even | Precision math with bias-free rounding rules. |
Locale.current or localeFor("fr-CH").Money(12.50, Currency.Usd) or Money(BigDecimal("1.23456"), Currency.Eur).Telemetry(coords, speed = 2.5.mps, azimuth = 90.degrees).100.meters or 5.kilometers.UnitOfMeasure.Litre.symbol ("L"), MetricPrefix.Kilo.Url("https://pkg.dev"), Urn("urn:uuid:...").GeoUri(45.5, -122.6) (RFC 5870).BigInteger("999999999999999999999999") or BigDecimal("123.456").BigDecimal("1.255").setScale(2, RoundingMode.HALF_EVEN) -> 1.26.GeoPoint(45.5, -122.6, 100.0).toGeoJson() (RFC 7946).Locale.displayName from the bundled resource data is always English. To show a locale's name in the end user's own language:
localeFor("bn")?.localizedDisplayName() // "bengali" for a French user, "ベンガル語" for a Japanese userRather than bundling a full translation matrix (~90 × 90 names) into every app, this delegates to the CLDR data each platform already ships — java.util.Locale (JVM/Android), NSLocale (Apple), Intl.DisplayNames (JS/Wasm). Bundled resource files aren't viable everywhere: browsers can't read files synchronously, and klibs can't deliver resources into an iOS app bundle.
Tradeoffs to be aware of:
Intl.DisplayNames (widely available since ~2020); older environments fall back to English.null — the worst case is the English displayName.See ADR 0003 for the full rationale, and GAPS.md for the deferred bundled-tables alternative.
To ensure mathematical precision and behavior consistency, this library employs rigorous Differential Parity Testing against standard baseline libraries:
java.math.BigInteger and java.math.BigDecimal).This library includes embedded, machine-readable "skills" to help AI assistants understand its APIs and best practices.
META-INF/ai-skills/*.ai-skill.md
If you are using an AI assistant (like Claude, Gemini, or ChatGPT) to write code with this library, paste this prompt first:
"Scan all project dependencies for AI Skill files in
META-INF/ai-skills/with the prefixio.github.aughtone. Use these to understand the API patterns, types, and governance for this library. If they are not found in the local classpath, refer to https://github.com/aughtone/aughtone-types for the source definitions."
[!IMPORTANT] v3.2.0 Behavioral Fixes: This release corrects long-standing bugs whose output or validation changes for existing code.
UrlEncoder.encodeis now true RFC 3986 percent-encoding — useencodeFormDatafor the previousapplication/x-www-form-urlencodedbehavior.Url/Uri/Urn/GeoUristring output is now well-formed, andUrn/GeoUriconstruction now rejects invalid input. Critical arbitrary-precision fixes also land inBigInteger/BigDecimaldivision andBankersValue. See the changelog for the full list.v3.0.0 Breaking Change: All GeoJSON geometry types (e.g.,
Point,Polygon) have been renamed with aGeoprefix (e.g.,GeoPoint,GeoPolygon).Moneynow usesBigDecimalfor its internal value to support sub-minor units, andTelemetryhas moved to thequantitativepackage.
This project follows a specialized documentation hierarchy.
| Category | Type | Standard / Compliance | Description |
|---|---|---|---|
| Financial | Money |
Banker's Rounding | Arbitrary-precision monetary values with BigDecimal storage. |
Currency |
ISO 4217 | Global currency definitions with scale factors. | |
| Localization | Locale |
BCP 47 | Universal language, region, and script identifiers. |
| Quantitative | Coordinates |
WGS84 | Geodetic latitude and longitude degrees. |
Distance |
SI (Meters) | Linear distance with accuracy support. | |
Speed |
SI (mps) | Rate of motion in meters per second. | |
Altitude |
SI (Meters) | Vertical distance above/below reference. | |
Azimuth |
Degrees | Compass bearing (0-360°). | |
Telemetry |
Unified Domain | Comprehensive model with coordinates, azimuth, speed, and altitude. | |
| Geospatial | GeoJson |
RFC 7946 |
GeoPoint, GeoFeature, and GeoFeatureCollection models. |
| SI Units | UnitOfMeasure |
SI / Imperial | Definitions for meters, liters, bytes, etc. |
MetricPrefix |
SI Prefixes | Scaling factors from Quetta to Quecto. |
|
| Identifiers | Url |
RFC 3986 | Uniform Resource Locators (Web). |
Urn |
RFC 8141 | Uniform Resource Names (Persistent IDs). | |
GeoUri |
RFC 5870 | Geographic 'geo' URI scheme. | |
| Mathematics | BigInteger |
Pure Kotlin | Arbitrary-precision integer math support. |
BigDecimal |
Pure Kotlin | Arbitrary-precision decimal math with rounding support. | |
| Utilities | BitSet |
Multiplatform | Space-efficient storage for bit-level flags. |
BankersValue |
Half-to-Even | Precision math with bias-free rounding rules. |
Locale.current or localeFor("fr-CH").Money(12.50, Currency.Usd) or Money(BigDecimal("1.23456"), Currency.Eur).Telemetry(coords, speed = 2.5.mps, azimuth = 90.degrees).100.meters or 5.kilometers.UnitOfMeasure.Litre.symbol ("L"), MetricPrefix.Kilo.Url("https://pkg.dev"), Urn("urn:uuid:...").GeoUri(45.5, -122.6) (RFC 5870).BigInteger("999999999999999999999999") or BigDecimal("123.456").BigDecimal("1.255").setScale(2, RoundingMode.HALF_EVEN) -> 1.26.GeoPoint(45.5, -122.6, 100.0).toGeoJson() (RFC 7946).Locale.displayName from the bundled resource data is always English. To show a locale's name in the end user's own language:
localeFor("bn")?.localizedDisplayName() // "bengali" for a French user, "ベンガル語" for a Japanese userRather than bundling a full translation matrix (~90 × 90 names) into every app, this delegates to the CLDR data each platform already ships — java.util.Locale (JVM/Android), NSLocale (Apple), Intl.DisplayNames (JS/Wasm). Bundled resource files aren't viable everywhere: browsers can't read files synchronously, and klibs can't deliver resources into an iOS app bundle.
Tradeoffs to be aware of:
Intl.DisplayNames (widely available since ~2020); older environments fall back to English.null — the worst case is the English displayName.See ADR 0003 for the full rationale, and GAPS.md for the deferred bundled-tables alternative.
To ensure mathematical precision and behavior consistency, this library employs rigorous Differential Parity Testing against standard baseline libraries:
java.math.BigInteger and java.math.BigDecimal).This library includes embedded, machine-readable "skills" to help AI assistants understand its APIs and best practices.
META-INF/ai-skills/*.ai-skill.md
If you are using an AI assistant (like Claude, Gemini, or ChatGPT) to write code with this library, paste this prompt first:
"Scan all project dependencies for AI Skill files in
META-INF/ai-skills/with the prefixio.github.aughtone. Use these to understand the API patterns, types, and governance for this library. If they are not found in the local classpath, refer to https://github.com/aughtone/aughtone-types for the source definitions."