zachdaniel

zachdaniel

Creator of Ash

Ash 3.1 released

Ash 3.1 Released!

Major themes

Generators! These are just the first entries into a powerful new suite of tools. Check out the generator docs for more! Ash and AshPostgres now have installers and generators powered by Igniter. We think that igniter is going to be a very big deal, expect to see a blog post, more updates to igniter, and installers & generators for each Ash package!

Built in UUIDv7 support: the type :uuid_v7 has been added to core, in addition to a uuid_v7_primary_key :name attribute builder. Thanks @moissela!

In addition, we’ve been hard at work cleaning up bugs, improving DX and smoothing out sharp edges.

Big Picture

One thing I wanted to touch on as part of this announcement, is the idea of “Ash 4.0”. Before those of you who have just done the 3.0 upgrade jump out of your seats, I’d like to explain that there are no current plans for a 4.0 version of Ash. It may happen in the future, if there are breaking changes that absolutely must go in, but if it ever does it will be 5-10% as big as the update from 2.0 → 3.0.

Ash core is, for the most part, now “feature complete”. There are tons of improvements that can be made to various subsystems, optimizations, nobs and dials added, etc. But the general shape of Ash as of 3.0 will be the general shape of Ash for many years to come.

Now we get to focus our efforts more on the Ash & Elixir ecosystem!

We hope this comes as good news to our users :slight_smile:

Changelog

Features:

  • [Generators] add mix ash.install (call with mix igniter.install ash)

  • [Generators] add mix ash.gen.resource

  • [Generators] add mix ash.gen.base_resource

  • [Generators] add mix ash.gen.domain

  • [Generators] add mix ash.extend

  • [Ash.Type.UUIDv7] Add built in Ash.Type.UUIDv7 type, and uuid_v7_primary_key builder

Bug Fixes:

  • [atomics] sort primary key changes ahead of others in atomic changes

  • [Ash.Changeet] fix typespec for Changeset.around_transaction/2 (#1292)

  • [multitenancy] ensure tenancy is always enforced on create/update/destroy actions

  • [loading relationships] lateral join on from_many? true relationships

  • [calculations] don’t reuse calculations/aggregates if authorize? is true

  • [aggregates] ensure aggregate context is fully configured in Ash.aggregate

  • [bulk actions] properly transfer changeset.context on streamed batch changesets

  • [bulk actions] ensure notifications are dispatched from bulk actions

  • [lazy loading] lazy-loading logic for calculations/aggregates was inversed (#1275)

  • [error handling] properly match on async task exceptions

  • [policies] ensure context is available in policy template expressions

  • [policies] ensure forbidden errors behave the same when using implicit bulk version of code interface functions

  • [manual relationships] compare keys in manual relationships when using ‘complex’ types (#1270)

  • [Ash.Filter] cover more cases in filter input parsing (#1261)

  • [has_one relationships] automatically set from_many? if a has_one has a sort applied

  • [Ash.Filter] fix match error when synthesizing joins across data layers

  • [Ash.DataLayer.Ets] properly support multitenancy when referencing relationships

  • [Ash.Type.Union] initialize & validate each subtype of a union

Improvements:

  • [Ash.Type.Enum] allow overriding cast_stored/2 and dump_to_native/2

  • [Ash.DataLayer.Simple] support offset in the simple data layer

  • [Ash.Changeset] allow after_action hooks in fully atomic changesets

Most Liked

moissela

moissela

Awesome :fire:

IMO, Igniter will be a game changer, especially if in the future it will be adopted also in phoenix and liveview :star_struck:

netProphET

netProphET

I get the feeling that this isn’t a terrible time to be starting my Ash journey :flying_saucer:

sevenseacat

sevenseacat

Author of Ash Framework

Awesome! The generators are really nice - they’ll save a lot of initial set up time, and copying and pasting boilerplate for things like new resources :star_struck:

arcanemachine

arcanemachine

Nice work! The book should be coming out pretty soon then?

zachdaniel

zachdaniel

Creator of Ash

Still a few months at least :slight_smile:

Where Next?

Popular in News & Updates Top

zachdaniel
Hey folks! I’ve begun putting together some concrete, framework-wide tooling and guidance on the usage of LLMs in development. The goal h...
New
zachdaniel
Hey friends! A long time quality of life feature we’ve been wanting to add is the ability to refer to to-one relationships in calculation...
New
mobileoverlord
New versions of the Kiosk systems are out. These systems update official Nerves systems with a local web browser for rendering user inter...
New
zachdaniel
Hey folks! We’re starting a new weekly newsletter with the goings on of the various Ash packages and other interesting news from myself a...
New
bartblast
Hologram v0.6.0 is here, bringing production-ready features to the full-stack Elixir web framework! This release focuses on enhanced secu...
New
fhunleth
It looks like it’s finally safe to announce that Nerves supports Erlang/OTP 26 and Elixir 1.15! We’ve updated dozens of Nerves and close...
New
zachdaniel
Hey folks! We’re giving a training at the upcoming ElixirConf EU! If you want a leg up on 3.0, this is definitely something you don’t wan...
New
zachdaniel
What if you had full stack types for SPAs built with tech like React, Inertia, Vue, Svelte… but all of the power Ash Framework and Elixir...
New
zachdaniel
The new Ash Framework site and installer are live. Please try it out and let me know what you think!
New
jjcarstens
The Raspberry Pi is a very popular hardware platform for Nerves users and the official systems are getting an upgrade! :tada: :beers: Wh...
New

Other popular topics Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New

We're in Beta

About us Mission Statement