Back to Blog

RIDDL 1.16.3 Released

RIDDL 1.16.3 is now available.

release riddl compiler

RIDDL 1.16.3 is now available. This release of the RIDDL compiler and language tooling includes the following changes:

What’s New

Release 1.16.3

Parser Bug Fixes

  • ZonedDateTime was unparseable: The ZonedDateTime predefined type could never be parsed because PredefTypes.zonedDateTypes listed ZonedDate twice instead of ZonedDate and ZonedDateTime. Fixed so both ZonedDate(zone) and ZonedDateTime(zone) are now correctly parsed.

  • Zone parameter matching fixed: The zone parameter in ZonedDate/ZonedDateTime used StringIn("A-Z", "0-9", ":.+-") which only matched those exact literal strings, not actual timezone identifiers. Replaced with CharsWhileIn to correctly match timezone character patterns like UTC, EST, etc.

  • graph/table aggregate use cases caused MatchError: The parser accepted graph and table as aggregate use case keywords (e.g., graph MyGraph { ... }) but the AggregateUseCase enum had no corresponding GraphCase or TableCase variants, causing a runtime MatchError. Added both enum cases with match arms in the parser and PrettifyVisitor.

URI → URL Rename

  • Predefined type renamed from URI to URL: The internal PredefType.URI constant and allPredefTypes entry have been renamed to URL to match the parser keyword (URL) and user-facing syntax. The AST class remains URI (to avoid JVM class name conflicts) but its kind method now returns "URL", so error messages and formatted output correctly show URL(...) instead of URI(...).

New Validation: Predefined Type Name Conflicts

  • Error when redefining a built-in type name: Defining a type whose name exactly matches a predefined type (e.g., type Currency is Decimal(10,2) or type Location is { lat: Real, lon: Real }) now produces a validation error. This prevents shadowing built-in types which causes downstream parser and resolution issues — for example, Currency requires a country code parameter and won’t parse correctly if redefined.

  • Style warning for case-variant type names: Defining a type whose name differs from a predefined type only in casing (e.g., type Timestamp is TimeStamp) now produces a style warning, since such aliases are redundant.

Affected Predefined Types

The full list of names that cannot be used for user-defined types: Abstract, Blob, Boolean, Current, Currency, Date, DateTime, Decimal, Duration, Id, Integer, Location, Length, Luminosity, Mass, Mole, Nothing, Natural, Number, Pattern, Range, Real, String, Temperature, Time, TimeStamp, Unknown, URL, UserId, UUID, Whole, ZonedDate, ZonedDateTime.

Migration Notes

If your models define types that shadow any of the above names, rename them to avoid conflicts. Common cases found in existing models:

  • type UserId is String → rename to type UserIdentifier is String
  • type Location is { ... } → rename to type GeoLocation is { ... }
  • type Currency is Decimal(10,2) → rename to type MonetaryAmount is Decimal(10,2)