Rails is Omakase. @AshFramework is Chipotle: build your own bowl.
@sevenseacat & @ZachSDaniel1 (co-authors of Ash Framework) join @RootCert on a lightsaber analogy, book-driven features & why nobody asks beginner questions in Ash's Discord anymore.
Watch: https://t.co/MxmifkLmYF
Next drop from #AshConf is out! @_csinclair_ gives an extremely entertaining talk, featuring time, state and...little baggies of sand delivered internationally via a service called OnlySands??? 😂
https://t.co/pFfhXdJF9C
#ElixirLang
@leonqadirie@DanniFriedland@foldkit Ash can generate typed interfaces for your client at least, and helps a lot with the server side type system. Not fully soundly typed, but probably more than you expect comes from Ash's types.
My ElixirConf EU talk is out! Its a talk I wanted to give for quite some time 😎
https://t.co/t0244r5se3
Don't miss my next talk: I'm giving the closing keynote at @ElixirConf on Friday! I'll be talking about how you can augment and empower your team with AI, with *tons* of examples and workflows you can implement right out of the gate.
Elixir, Phoenix Live View and Ash Framework is a killer combo.
As a solo dev 2 months ago I've started a new project. Fairly complex ERP system.
Another company with 5+ devs couldn't build and deploy it in 2 years.
We're already using mine in a laboratory 🫣
#myelixirstatus
UsageRules are one of the coolest things I have come across in a while.
Essentially versioned AI skills that are maintained and shipped by @AshFramework so LLMs know how to use it right away.
@JalenLee0016@jskalc We use it with large SQL databases just fine? What kinds of queries? What was the problem you faced? No reason you can't also just run an ecto query if you need to do something Ash doesn't support.
Announcing our Keynote speaker for #AshConf! @ajetha has built an award winning CRM, @dayliteapp, which was featured at WWDC, all while migrating a mature and complex codebase to #ElixirLang and #AshFramework. Come to Varberg, Sweden on October 3rd (the day after Goatmire) to hear all about it 😎
Register here: https://t.co/2pjNACWeZJ
@_svs_ Fell in love with @elixirlang & @elixirphoenix a few years ago. Got introduced to @AshFramework last year. Such a potent & amazing stack.. no wonder many orgs use it as their secret sauce. And yes.. @josevalim is a legend. Take a bow Jose!
Learn how to add OAuth, MCP, and a Lua-based code mode to any @AshFramework application in the latest Code and Stuff video!
#MyElixirStatus
https://t.co/TtYVkDR80O
Small thing I'm weirdly excited about in the next release of AshPostgres: upserts can now tell you whether each record was inserted or updated.
Sometimes it is fun to work on fancy new packages for #AshFramework, but being able to focus on the core stuff is often more rewarding.
This might sound easy, but the standard "INSERT ... ON CONFLICT" approach cannot generalize this without resorting to hacks that don't generalize to any given use case.
Now you can just read `:upsert_action` from the result metadata — works for a single record or a whole bulk upsert.
It's powered by a SQL `MERGE` under the hood now (PG17+), which also quietly sets up something much bigger I'll be sharing soon 👀
Just have to update the `min_pg_version` callback on your repo to take advantage of it
#ElixirLang
Now that AshPostgres supports `MERGE`, we can finally have `Ash.update_many/4` in #AshFramework 😎. This allows you to do many row-wise updates each with their own unique input. This differs from `Ash.bulk_update/4` which updates a query or a set of records with *one* set of inputs.
This might not seem that cool, but try hand-rolling this in a re-usable way with all of the various features that Ash supports (atomics, expression-based-updates, lifecycle hooks, etc.) and you'll get it 😂
This can be used for all kinds of purposes, but will soon be used to significantly optimize relationship management logic, i.e updating a to_many relationship with a set of inputs will now be three discrete queries, one to create anything new, one to update anything modified (with `update_many`) and one to remove anything left out.
Take a look at the example code & representative SQL query:
#ElixirLang