Ash Framework

Build APIs in minutes. Ash is a declarative, resource-oriented application framework for Elixir.

Use the AshGraphql and AshJsonApi extensions to easily produce high quality APIs from your resources.

All extensions have the full power of Ash behind them, allowing your validation, authorization, and customizations to be unified across all usages of your resources.

Carousel imageCarousel imageCarousel image


Use existing extensions, or write your own.

Using the built-in Extension tooling, you can easily extend the DSL to add configuration that is unique to your use case. This method of modeling your business logic as static configuration will make it very easy to understand how and why your application works the way that it does. If the existing Ash extensions don't work for your use case, you can use Ash as a foundation for statically declaring the behavior of your application.

The Ash Doctrine

Configuration over convention means creating a framework that encourages understanding how your application behaves.

Declarative over procedural means leveraging declarative design to create smarter systems. There are enormous benefits of building our applications with two main components: a declaration (the what) and an engine (the how). It makes it easier to talk about and understand change, easier to write systems that are context-aware, and easier to understand what your application does.

Extend over customize means not fooling ourselves into thinking that we can write a framework that covers all possible use cases. Instead, we should focus on having a powerful toolchain around extending Ash, so that you can leverage the core concepts while writing fully custom applications. This has the added benefit of enabling a rich ecosystem of extensions.

Derive over handwrite allows us to write reliable systems that age well. For example, a vast majority of the documentation for ash is derived from the same data structures that power the functionality. This means that a change to that functionality is automatically reflected in the documentation.