
Ash framework adds AshJsonApi, AshGraphQL, AshTypescript
Ash released three extensions—AshJsonApi, AshGraphQL, and AshTypescript—that auto-generate REST, GraphQL, and typed RPC interfaces from Elixir resources, cutting boilerplate by up to 80% [DevTo][AshDocs].
Ash's three new extensions—AshJsonApi, AshGraphQL, and AshTypescript—enable automatic generation of REST, GraphQL, and TypeScript RPC interfaces from Elixir resources [DevTo]. AshJsonApi adds a json_api block to any Ash.Resource and a matching json_api block to the domain. A single mix igniter.install ash_json_api command injects the extension, after which six CRUD endpoints appear automatically [AshDocs].
AshGraphQL follows the same pattern but registers a GraphQL schema via use AshGraphql. After mix igniter.install ash_graphql, the domain’s graphql block maps resources to queries, mutations, and optional subscriptions. The generated SDL file updates on every mix ash.codegen run, keeping the schema in lockstep with the underlying actions [DevTo].
AshTypescript goes a step further by emitting TypeScript RPC stubs (ash_rpc.ts) and Zod validation schemas from the same resource definitions. A single mix ash_typescript.codegen call produces a typed client that can call listLessons(), createLesson(), etc., without hand-written HTTP wrappers [AshDocs]. The author reports up to an 80% reduction in client-side boilerplate and immediate compile-time type errors when server fields change.
All three extensions share a single source of truth: the resource’s actions. Changing an action automatically propagates to every contract layer, eliminating the classic drift between REST docs, GraphQL schemas, and client SDKs [DevTo].
By collapsing the API-generation step into a few mix commands, teams can ship a production-ready backend in hours instead of days. This translates directly into reduced engineering cost and faster iteration cycles. The unified contract model also cuts downstream bugs that typically surface during client integration testing [AshDocs]. Ash now offers a full-stack, language-agnostic API layer that rivals Phoenix LiveView + Absinthe setups while keeping the front-end in pure TypeScript.
Subscribe to the broadcast.
Daily digest of the day's most important tech news. No fluff. Engineering signal only.
// delivered via substack · double-opt-in confirmation


