Skip to main content

CHANGELOG.md

# Changelog

## 0.4.0 (2026-04-28)

### Features

- Add `formats:` option for `:date` and `:datetime` fields. Tries each
  format in order on read; the first to parse successfully wins. Useful
  for files that mix date formats (e.g. mostly `M/D/YYYY` with occasional
  `YYYY-MM-DD`). Mutually exclusive with `format:`. Writing uses the
  first entry in the list.
- Add `Module.canonical_string/2` (and `Delimit.Schema.canonical_string/3`):
  generate a stable, deterministic string encoding of a struct based on
  its schema. Uses ASCII Unit Separator as the default delimiter.
- Add `Module.row_hash/2` (and `Delimit.Schema.row_hash/3`): compute a
  cryptographic hash of a struct's canonical encoding. Defaults to SHA-256
  truncated to 16 bytes.
- Add `:row_hash` derived field type. Declared in the layout, populated
  automatically on read with the hash of the row's non-derived fields.
  Skipped on write. Supports `algorithm:` and `truncate:` options.
- Add `:raw_row` derived field type. Captures the row as a list of strings
  before type coercion. Useful for debugging and audit trails. Skipped
  on write.

## 0.3.0 (2026-03-03)

### Features

- Add fixed-width format support (`:fixed_width`)

## 0.2.0 (2025-05-21)

### Fixes

- Do not double skip headers

### Other

- Simplified code to eliminate pre-processing
- More appropriate empty row/value detection
- Rely on layout for field mapping, not layout AND header content

## 0.1.0 (2025-05-12)

- Initial release