All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.3.0] - 2026-11-10

Added

  • Examples for every public function, documented types and a Phoenix quick start; all iex> examples in the docs and README run as tests.
  • mix ref_data.init creates priv/ref_data/ with an example dataset and prints the configuration to add.
  • RefData.label/3 returns the label for a stored value, for displaying saved choices.
  • Immutable catalogs loaded with RefData.load/1 and selected with source:.
  • Submitted-value validation with canonical JSON values and explicit errors for unknown, disabled and ambiguous choices, including nested groups.
  • Concurrent-read and storage lifecycle tests.
  • Direct lookup API with fetch/2, get!/2 and configurable server selection.
  • Explicit supervision and independent named or unnamed instances.
  • File-specific validation errors and duplicate dataset detection.
  • Tests for malformed data, missing keys, empty datasets and grouped disabling.

Changed

  • Require Elixir 1.18 or later (for the built-in JSON module).
  • Breaking: the default server starts only when config :ref_data, path: ... is set, so adding the dependency no longer fails startup when ref_data/ is absent.
  • Pin development to Elixir 1.20.5 / OTP 29.1.2 and test Elixir 1.18 to 1.20 in CI.
  • Replace the Jason runtime dependency with built-in JSON decoding.
  • Update all development dependencies and the lockfile.
  • Represent grouped options as string-labelled tuples instead of atom-keyed lists.
  • Return nil for missing get lookups without crashing the shared server.
  • Use protected ETS tables for shared datasets; local reads bypass the owner mailbox.
  • Keep immutable catalog lookups process-free and preserve option order.
  • Publish tables through a supervised Registry and resolve restarted instances by PID.
  • Preserve legacy server messages and remote-node lookups.
  • Document release-safe paths, current configuration syntax and migration steps.

Fixed

  • Disabling options in grouped datasets.
  • Dynamic atom creation from JSON group labels.
  • Crashes on empty datasets and unclear errors for invalid input.

[0.2.1] - 2021-03-10

Changed

  • Documentation, package metadata and CI updates only; no library changes.

[0.2.0] - 2021-03-10

Added

  • Supports more detailed json definitions to allow developers to add custom values

Fixed

  • Modified generation of maps from json definitions to match the casing between key and value (e.g. { "genders": ["Male", ...]}) will now create a map %{ "name" => "genders", "values" => [[ "key" => "Male", "value" => "Male"], ...]} rather than %{ "name" => "genders", "values" => [[ "key" => "Male", "value" => "male"], ...]}

Changed

  • Removed the use of :ets, it is redundant given the nature of a GenServer and its role holding state
  • Modified the Jason.decode funtion to include the string: :copy option. The RefData server is designed to run while your application is running and the default reference option stops teh garbage collection of the original json definitons
  • Removed the use of the :raw key as it was redundant and the library no longer stores the raw json