From what I understand, Ash is an abstraction layer built in Elixir that makes it easy to model and work with resources.
Like say, in Elixir, normally you define database resources in a pretty granular way. You write the migrations manually and define the schema manually (although there are generators to handle a lot of the boilerplate). Then you write the functions to CRUD your new model, etc.
Whereas with Ash, I believe the ideas is that you define the resource using Ash's DSL (Elixir can get pretty liberal with the metaprogramming), and then it makes it easy to add functionality from there:
auto-generating migrations, handling object-level permissions, generating OpenAPI schemas, and making it easy to do a lot of other stuff that is tedious to do by hand.
It seems to be very magic-heavy but claims to allow escape hatches. I've heard some good things about it, but also that it has a lot of magic involved.
It's written mostly by one guy and it's definitely a high-level abstraction, but I'm quite certain it's not just buzzword salad. It certainly has a huge scope though and I wonder if it tries to do too much, but I am quite intrigued by the siren song of this project.
There was recently an Elixir conference (ElixirConf) and Zach's (the main developer) talk was posted on YouTube just the other day, so that's probably why this is getting posted here now.
As a very new guy using Ash: yes, there are escape hatches everywhere, and a lot of magic is quite thin.
I find that often if I don't understand the magic, I just drop directly into Elixir and/or Ecto (Ash resources are Ecto schemas).
In his talk at the recent Elixir conference Zach Daniels said that the goal for the next version of Ash is improved DX: error messages, debuggability, tools etc. So a lot of magic will be stripped away.
Like say, in Elixir, normally you define database resources in a pretty granular way. You write the migrations manually and define the schema manually (although there are generators to handle a lot of the boilerplate). Then you write the functions to CRUD your new model, etc.
Whereas with Ash, I believe the ideas is that you define the resource using Ash's DSL (Elixir can get pretty liberal with the metaprogramming), and then it makes it easy to add functionality from there: auto-generating migrations, handling object-level permissions, generating OpenAPI schemas, and making it easy to do a lot of other stuff that is tedious to do by hand.
It seems to be very magic-heavy but claims to allow escape hatches. I've heard some good things about it, but also that it has a lot of magic involved.
It's written mostly by one guy and it's definitely a high-level abstraction, but I'm quite certain it's not just buzzword salad. It certainly has a huge scope though and I wonder if it tries to do too much, but I am quite intrigued by the siren song of this project.
There was recently an Elixir conference (ElixirConf) and Zach's (the main developer) talk was posted on YouTube just the other day, so that's probably why this is getting posted here now.