RSS Amplifier

Ash Chronicle · Aug 23, 2025

Ash Chronicle: Issue #23

0
Sign in to vote or save

Zach Daniel · Ash Chronicle

Welcome to Ash Chronicle — your quick, informal digest of what’s new and notable in the world of Ash Framework. Got something cool? Drop it in the #showcase channel on Discord!

We now have an Open Collective instead of my personal Github Sponsors account. This money will be transparently spent to advance both the Ash and Elixir ecosystem 😎. We’ll use it to support discord, host the website, and before long we’ll begin sponsoring work ⭐

Something we’ve had for a very long time was the ability to use aggregates over related data. For example:

But this only worked in cases that you could write relationships from one resource to another. This was easy to workaround by writing a relationship with `no_attributes? true`, but would clutter up your resources and was not an intuitive solution.

Now, in addition to relationship paths, you can use resources in aggregates, enabling all kinds of useful calculations and aggregates.

Generic actions now have a full action lifecycle like any other action type. They support things like preparations, validations and before/after action hooks! This reduces a lot of the mental overhead of using generic actions and allows for entirely new methods of building composable and reusable logic 😎.

It also reduced a whole bunch of conditionals/branching in our action lifecycle chart.

In addition to this, read actions now support all of the relevant transaction hooks.

  • There is now a VSCode extension that adds all kinds of goodies for Ash users 😎 Make sure to star the repo and tell Kevin just how cool this really is once you try it out!

  • Christian Alexander created a new package called AshCircuitBreaker which adds the ability to wrap actions in circuit breakers to allow for graceful handling of and recovery from failures.

  • Albin Kocheril Chacko created a website you can use to interactively work with the resource generators. Pretty slick!

  • I wrote a blog post about Elixir Misconceptions, more to come soon there 😁

  • added an introspection module for typed structs (@matt-beanland)

  • better errors around invalid returns for validate and change callbacks

  • Support unrelated aggregates and exists expressions

  • add `scope` option to `Ash.Generator.changeset_generator` (Joseph Lozano)

  • Support many to many relationships in `ash.gen.reosurce` (Kenneth Kostrešević)

  • Include polymorphic relationships in usage rules (Gonzalo Muñoz)

  • Verify filter expressions reference real args when used in actions (Kenneth Kostrešević)

  • Fix typo in usage rules on `get_by_id` (albinkc)

  • Add array modifier to `ash.gen.resource` (Kenneth Kostrešević)

  • Add `prepend?` opt to hooks and Ash.Subject transaction hooks (@chazwatkins)

  • Create `Ash.Subject` to provide a uniform interface when dealing with something that might be a changeset, query, or action input (@chazwatkins)

  • Add a `log?` option to `can` functions, allowing much easier authorization logic debugging

  • Add transaction hooks for read actions (ChristianAlexander)

  • Add before/after/around transaction hooks to generic actions (ChristianAlexander)

  • Support global validations being applied to read actions

  • move permission check of tools to after they are filtered by other simpler criteria (@jgwmaxwell)

  • Add a default adapter for ChatGoogleAI (@mylanconnolly)

  • Properly annotate fields as required

  • Handle number constraints in generated schema

  • Add `on_tool_start` and `on_tool_end` callbacks (@bradleygolden)

  • Support `argument` option and pass extra arguments to `guard`

  • Don’t run `git init` if already in a git repo (Erik André Jakobsen)

  • Fix heisenbug that was brought about from enumerating the rewrite struct (which should have been fine?)

  • Add a nicer error on `:oof` response from `yes?`

  • Add support for `relay_id_translation` on GraphQL subscriptions (Mike Wilson)

  • allow providing descriptions for routes (@marinakr)

  • support disambiguating embedded resource input type names

  • Don’t make `data` required unnecessarily

  • Support `conn` option in test request functions, for setting headers or customizing the conn in other ways

  • Use `default_fields` as the fields example in docs

  • Use more idiomatic error messages on pre-request schema check validation failures

  • handle infinitely nested embeds via $refs

  • Add a nicer compile time error message on mismatching magic link action type

  • Better error message on invalid magic link tokens

  • Debug form errors in templates

  • Add daisyUI overrides module (pikdum)

  • Support unrelated aggregates

  • Do not create snapshots for resources that have no attributes (horberlan)

  • Make rollback more reliable by using `--to` instead of `-n`

  • Make the actor/authorizing buttons far clearer using words instead of svgs (Andy LeClair)

  • Support passing action_arguments to `AshOban.schedule/3` (Infinitis)

  • Remove unwanted sections from Phoenix’s default AGENTS.md when installing ash_phoenix (Rodolfo Torres)

  • Add option to determine resource plural name in routes for `ash_phoenix.gen.html` (Kenneth Kostrešević)

No posts

Read the original on ashchronicle.substack.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.