0.2.0 (2026-10-21)

  • Dynamic content (see the guide): sources (ElementorexCms.Source) with an Ecto adapter that reads the fields of any schema (ElementorexCms.Source.Ecto, or the schema itself in config :elementorex_cms, sources: [...]); bindings of any prop to a field of the current item, with before/after text, fallback and formats (ElementorexCms.Dynamic); the Loop grid block, with limit, order, filters, related items and responsive columns; templates of single records (record= on ElementorexCms.Components.document/1, source= and a preview picker in the editor); display conditions of blocks on a field of the item (Advanced tab); templates generated from each source; mix elementorex.gen.source.
  • Pagination of the Loop grid: numbers, previous/next or both (links with the page of each loop, ?<id>[page]=2, that the runtime follows in place, swapping only the grid), a Load more button and infinite scroll (the runtime fetches the next page and appends its items; links without JavaScript). params on ElementorexCms.Components.document/1 and ElementorexCms.to_html/2; optional count/2 of sources.
  • Search and filters for visitors (ElementorexCms.Filters): the Filters form block and its fields (Search box, Choice filter with the values of a field, Range filter, Toggle filter, Sort), applied in place by the runtime or as a plain GET form; the state of each loop under its key in the query string. Filters of your own: with logic in the source (filters: and filter/4 of ElementorexCms.Source.Ecto) or as blocks (mix elementorex.gen.filter, filter_name/2 and friends). Sources get the search (Query.search), the "in" operator and optional values/2.
  • Editor: a database button next to every prop that can be bound, a field picker, the settings of each binding, a Dynamic palette category and the Dynamic content group of templates.
  • Interface in Portuguese, German, French, Italian and Japanese too. Locale modules (ElementorexCms.I18n.Locale) for the app's own strings or new languages, generated by mix elementorex.gen.locale; regional codes fall back to their language; locale on ElementorexCms.Components.document/1 and ElementorexCms.to_html/2; the editor's locale can change while it runs.

Upgrading from 0.1 needs no changes. To give loop grids pages and filters, pass the params of the page to the document (params={@params}, from mount/3; pages generated by mix elementorex.gen.cms 0.1.0 leave them out) and keep the ElementorexRuntime hook on the element that holds it.

0.1.0 (2026-10-20)

First version.

  • Document model (ElementorexCms.Document), builder and Ecto type.
  • Block DSL (ElementorexCms.Block, ElementorexCms.Block.Prop) and 34 built-in blocks with daisyUI 5 and inline Heroicons.
  • Safe server rendering: props cast on render, allow-list HTML sanitizer, CSS value grammar, scoped custom CSS with nesting, URL allow-list.
  • Responsive styles (desktop, tablet, mobile) and :hover, hide per device, entrance animations.
  • Visual editor (LiveComponent + hook): palette, DOM tree, canvas iframe with the host's CSS, inspector (Content/Style/Advanced), inline editing, drag and drop, HTML/CSS/JSON drawer, undo/redo and history, templates, uploads and media library, keyboard shortcuts.
  • English and Spanish interface.
  • Mix tasks: elementorex.install, elementorex.gen.cms, elementorex.gen.block, elementorex.gen.template.