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

[0.3.3] - 2026-02-28

Fixed

  • CI creates GitLab releases (with tags) using the release keyword instead of git push.
  • LICENSE and CHANGELOG included in ex_doc extras to resolve doc warnings.
  • Removed hidden function reference in BinaryDecoder.V11 moduledoc.
  • Fixed ex_doc auto-linking warnings for hidden modules in CHANGELOG.

[0.3.1] - 2026-02-28

Changed

  • CI now creates git tags automatically on publish.
  • CI pipelines skip tag pushes to avoid duplicate builds.

[0.3.0] - 2026-02-28

Added

  • Ion 1.1 macro system (Eyeon.Macro) with support for system macros, user-defined macros, and TDL (Template Definition Language) compilation.
  • Ion 1.1 text parsing and macro integration — e-expressions, encoding directives ($ion_encoding), and inline modules.
  • Ion 1.1 binary decoding — new binary primitives (FlexUInt, FlexInt, FlexSym), scalar types, containers, timestamps, annotations, e-expressions, and tagless argument encoding.
  • Eyeon.Decoder module extracted for codec-agnostic AST decoding shared between text and binary paths.
  • IVM-based version router that dispatches to V10 or V11 binary decoders.
  • Eyeon.Timestamp struct for precision-preserving timestamp representation (opt-in via %{timestamp: :raw}).
  • Ion equivs/non-equivs test module for data model equivalence testing.
  • Amazon Ion conformance DSL test runner covering 2000+ test cases.
  • System macro implementations: values, default, repeat, delta, sum, annotate, make_string, make_symbol, make_decimal, make_timestamp, make_list, make_sexp, make_field, make_struct, parse_ion, set_symbols, add_symbols, set_macros, add_macros, meta.

Fixed

  • UTF-8 encoding of \xHH escapes in Ion strings and symbols.
  • $ion_symbol_table structs stripped from text decoder output.

[0.2.0] - 2026-02-02

Changed

  • Replaced leex/yecc parser with pure Elixir recursive descent parser (Eyeon.TextParser). This is a complete rewrite of the parsing layer — the Erlang-generated lexer and parser have been removed.
  • Significant performance improvements from the new single-pass text parser (see benchmarks).

Removed

  • ion_lexer.xrl (leex) and ion_parser.yrl (yecc) — the Erlang lexer/parser pipeline has been fully removed in favor of the native Elixir parser.

[0.1.0] - 2026-02-01

Added

  • Initial release of Eyeon — an Elixir library for Amazon Ion.
  • Ion text decoder with full Ion 1.0 support via leex/yecc-generated lexer and parser.
  • Ion text encoder with value-level round-trip support.
  • Ion 1.0 binary decoder and encoder.
  • Local and shared symbol table management (Eyeon.LocalSymbolTable, Eyeon.SharedSymbolTable) with Eyeon.SymbolTable protocol.
  • Eyeon.Catalog for shared symbol table registry.
  • Public API: Eyeon.encode/2, Eyeon.decode/2, and bang variants.
  • Timestamps decode to native Elixir types (DateTime, NaiveDateTime, Date) by default.
  • UTF-16/UTF-32 encoding detection and transcoding.
  • Passes Amazon's official Ion 1.0 conformance test suite.
  • Post-lex adjacency validation for value tokens.
  • Handles edge cases: UTF-16 surrogate pair decoding, overflowing float clamping to infinity, zero-coefficient timestamp fractions, sexp operator adjacency.