A declarative and extensible framework for building Elixir applications.
Find a file
James Harton c67295de6e
improvement: Allow Reactor modules to be run directly from generic actions. (#993)
- Extends the generic action runner to detect when the `run` module is a Reactor and automatically executes it in the correct way.
- Adds a verifier that detects said actions and ensures that action arguments are present for all expected inputs.
2024-04-08 16:48:58 -04:00
.github chore: remove ash_three reference in CI 2024-04-06 15:12:49 -04:00
benchmarks improvement!: 3.0 (#955) 2024-03-27 16:31:59 -04:00
config improvement!: 3.0 (#955) 2024-03-27 16:31:59 -04:00
documentation improvement: Allow Reactor modules to be run directly from generic actions. (#993) 2024-04-08 16:48:58 -04:00
lib improvement: Allow Reactor modules to be run directly from generic actions. (#993) 2024-04-08 16:48:58 -04:00
logos improvement!: 3.0 (#955) 2024-03-27 16:31:59 -04:00
scripts chore: add gource script 2023-12-27 16:37:24 -05:00
test improvement: Allow Reactor modules to be run directly from generic actions. (#993) 2024-04-08 16:48:58 -04:00
.check.exs improvement!: 3.0 (#955) 2024-03-27 16:31:59 -04:00
.credo.exs improvement: handle pkey-less resources when attaching fields 2024-01-21 00:45:35 -05:00
.doctor.exs ci: remove tweets/switch to standardized CI pipeline 2023-01-31 11:15:09 -05:00
.formatter.exs improvement!: 3.0 (#955) 2024-03-27 16:31:59 -04:00
.gitignore * improvement: add data layer introspection to Ash.Resource.Info (#610) 2023-06-10 13:17:17 -04:00
.gitpod.yml fix: handle builtin types in unions (#752) 2023-10-25 08:31:25 -04:00
.tool-versions fix: ensure calculation context is set on aggregate contents 2024-03-20 15:51:39 -04:00
backers.md chore: update backers.md 2022-11-25 14:45:35 -05:00
CHANGELOG.md chore: release version v3.0.0-rc.16 2024-04-07 15:32:11 -04:00
coveralls.json improvement!: 3.0 (#955) 2024-03-27 16:31:59 -04:00
FUNDING.yml fix: parse functions properly 2020-10-09 20:59:43 -04:00
LICENSE chore: Update License 2020-09-21 14:00:57 -04:00
mix.exs docs: more guidance on project structure 2024-04-08 15:54:08 -04:00
mix.lock chore: backport fixes from 2.0 2024-04-04 14:45:03 -04:00
README.md chore: release version v3.0.0-rc.16 2024-04-07 15:32:11 -04:00

Logo Logo

Elixir CI License: MIT Hex version badge

Dependency

def deps do
  [
    {:ash, "~> 3.0.0-rc.16"}
  ]
end

What is Ash?

Ash Framework is a declarative, resource-oriented application development framework for Elixir. A resource can model anything, like a database table, an external API, or even custom code. Ash provides a rich, and extensive set of tools for interacting with and building on top of these resources. By modeling your application as a set of resources, other tools know exactly how to use them, allowing extensions like AshGraphql and AshJsonApi to provide top tier APIs with minimal configuration. With filtering/sorting/pagination/calculations/aggregations, pub/sub, policy authorization, rich introspection, and much more built-in, and a comprehensive suite of tools to allow you to build your own extensions, the possibilities are endless.

For those familiar with Phoenix, you can think of Ash as a declarative application modeling layer designed to replace your Phoenix contexts.

Ash Framework 2.0

Ash Framework 2.0 has been released! This begins the official stable release cycle (although it was already quite stable). Thanks to everyone in the community who helped make this possible, from the contributors, the curious, to those already using Ash in prod. I'm eternally grateful for all of your support.

Additionally, I'd like to thank Alembic, who have brought me on to work on Ash full time. Alembic is building complex software with small teams in record time by leveraging tools like Ash Framework and Phoenix LiveView.

Along with the 2.0 release of core, the AshPostgres, AshPhoenix and AshArchival packages have had 1.0 version released as well. AshGraphql is next up, and should be released in the next few weeks. Feel free to dive in to it before then, though :).

Is Ash an alternative to X?

Ash is not meant to be an alternative to Phoenix, Ecto, or Absinthe. Ash uses Ecto under the hood, AshGraphql uses Absinthe. Phoenix is absolutely the recommended way to build web interfaces on top of your Ash application (there is a whole package dedicated to it, AshPhoenix). Ash is not meant to be the only way that you ever interact with your data, so it is almost a certainty that you will need to use Ecto in some cases. For instance, Ash does not currently support bulk actions or atomic updates. For this reason, you can implement custom actions for things that can be encapsulated in your resource, and you have all of Elixir at your disposal to implement custom behavior outside of your resources, with a wide array of escape hatches in between.

Contributors

Ash is made possible by its excellent community!

Become a contributor