dev-newsEcto logohexdocs.pm/ecto

Latest stable Ecto: 3.14.2, released (release notes). 18 stable releases since 7 Mar 2024.

Ecto

The database wrapper and query language for Elixir.

3.14.2current release, 14 August 2026

#Ecto.Changeset<
  action: :release,
  version: "3.14.2",
  changes: %{
    Ecto.Changeset: [
      "changed?/3 for removed one-to-one relations",
      "stale belongs_to keys in apply_changes/1",
      "prepare_changes kept in merge/2",
      "default :on_cast kept in relation metadata"
    ],
    Ecto.Repo: [
      "caller’s Logger level reaches preload tasks",
      "writable fields enforced after prepare_changes"
    ],
    Ecto.Schema: [
      ":writable for :inserted_at in timestamps/1",
      "autogenerate options for composite types",
      "no compile-time deps from @derive"
    ],
    Ecto.Query: [
      "source field caching for map updates"
    ]
  },
  errors: [
    Ecto.Type: {"normalize DateTime casts to UTC", [note: "reverted in the next release"]}
  ],
  valid?: false
>
3.0103.183.263.353.473.593.633.733.853.973.1043.1133.1273.1373.14320192020202120222023202420252026
Every Ecto 3 minor line from its .0 release until the next one, from Hex. Band height and the number in it are stable releases on that line.

Ecto 3.14.2 went out on 14 August 2026, and the changelog carries a warning against one of its own entries: the change that normalizes DateTime casts to UTC is marked as reverted in the next release. Ten weeks later there is no next release, so the current Ecto still casts that way.

The unreleased 3.15 section also changes a default. validate_length/3 will count Unicode codepoints instead of graphemes, which is how databases usually enforce string limits, so a length check on text with emoji or combining marks can start failing. Ecto has been on version 3 since October 2018: 87 stable releases in eight years.

As of 24 October 2026. Ecto changelog.

Latest releases

  1. 3.14.2Changeset and Repo fixes; DateTime casts normalized to UTC, marked for revert.
  2. 3.14.1UUIDv7 helpers and :on_writable_violation for fields.
  3. 3.14.0UUIDv7, reorder_assoc/2, :replace_changed upserts for PostgreSQL HOT updates.
  4. 3.13.6Relaxes the decimal requirement.
  5. 3.13.5Select a subset of a subquery as a struct.