All notable changes to this project are documented here. The format follows Keep a Changelog, and the project uses Semantic Versioning.

0.1.0 - 2026-11-02

First public release.

Added

Changed (compared to the pre-release code)

  • :atom and :module config values must name existing atoms unless unsafe_atoms: true is given.
  • Runtime.Config reads scripts with Elixir's Config.Reader; the external_config dependency is gone.
  • Security.Password uses a cryptographically secure random source and returns {:error, :too_short}. It also now honours the requested length; previously some lengths produced shorter passwords.
  • Schema.Query.get/2 returns {:error, :not_found} when no row matches.
  • count/1 uses COUNT(*) and no longer requires an inserted_at column.
  • The :no_defaults option is now :ignore_defaults.
  • :preloads are loaded with LEFT JOINs in the same query instead of one query per association. With to-many preloads, paging and distinct are applied to parent rows through a primary-key subquery. Preload queries and functions are no longer accepted.

Fixed

  • count(group_by: ["column"]) with string column names crashed while building the select.
  • Config.Helper.get_env/2 crashed for an unset variable with a non-string :type and no :default; it now returns nil.

Removed

  • Application.Helper.conditional_applications/3,4, conditional_modules/3,4 and conditional_children/3,4. Use conditional_append/3,4.
  • Schema.Change.create/2, and the placeholder *_by functions (generate them with extend/2 or delegate/1).
  • Dependencies on poison, hackney, sweet_xml, cloak_ecto, earmark, atomic_map, jason and external_config.