RSS Amplifier

Ash Chronicle · Apr 13, 2026

Ash Chronicle: Issue #26

0
Sign in to vote or save

Zach Daniel · Ash Chronicle

Welcome to Ash Chronicle — your quick, informal digest of what’s new and notable in the world of Ash Framework. Got something cool? Drop it in the #showcase channel on Discord!


Support us by Buying the book! or contributing to our Open Collective

Seeing as its been 7 months since the last issue, it only makes sense to rebrand this newsletter. I’ll still post here, but not weekly. Just don’t have the time anymore. But we’ll keep it going at a slower pace 😎

There are a lot of things that were launched that I only announced on my twitter/bluesky. I don’t have time to go dig up all those photos and messages, so if you’d like to know about all this stuff I’d suggest going back through those accounts history!

The changelog here is huge, and don’t forget that it doesn’t even include bug fixes. I also didn’t have time to clean them up for better human consumption like I normally do.

Attachment and file management that slots directly into your resources.

I haven’t had time to get it polished and published, hoping the community will help pick up the slack!

Take a look on GitHub!

Ash now has an unofficial Credo extension to bring a whole host of useful lint rules to your Ash applications!

  • Remember Me Strategy (v4.10.0 — Sep 2025) Persistent session tokens — users stay signed in across browser sessions with configurable lifetimes. Cookie-based with a dedicated remember_me field.

  • Audit Logging Add-on (v4.12.0 — Oct 2025) AshAuthentication.AuditLogResource — logs all auth actions (successes/failures). Enables account lockout after N failed attempts, inactive account detection, compliance auditing — all queryable as Ash resources.

  • TOTP / 2FA Strategy (v5.0.0-rc.0 — Jan 2026) Full first-class TOTP support: standalone or as a second factor after password, two-step setup flow, QR code generation, replay attack prevention, brute force protection, AshCloak support for encrypted secrets.

  • Recovery Code Strategy (v5.0.0-rc.2 — Apr 2026) One-time backup codes for when primary MFA is unavailable. Codes are single-use, hashed at rest.

  • Extra JWT Claims (v5.0.0-rc.0 — Jan 2026) Custom claims in JWT tokens at both DSL and action level — embed roles, tenant IDs, session types, etc.

  • Microsoft OAuth Strategy (v5.0.0-rc.2 — Apr 2026) First-party Microsoft OAuth with full tutorial/DSL, handling Microsoft-specific quirks.

  • Ash now supports a through option on has_many and has_one relationships by Kenneth Kostrešević (#2567)

  • add eager_validate? option to manage_relationship/4 (#2663) by @nallwhy (#2663)

  • steer usage rules towards code interface and actions (#2672) by Kenneth Kostrešević (#2672)

  • support operator overloads that rewrite to custom expressions by @zachdaniel

  • add init/1 callback to Ash.Policy.Check (#2655) by @nallwhy (#2655)

  • add pipelines DSL for reusable action logic composition (#2652) by @nallwhy (#2652)

  • Add resource metadata to Ash.NotLoaded struct (#2653) by @nallwhy (#2653)

  • add batch_validate callback to Ash.Resource.Validation (#2650) by @RylandBangerter85

  • validate many callback returns (#2645) by celeste-wahlquist (#2645)

  • add paginate_by_default? option to read actions (#2648) by Juan Martin (#2648)

  • support structs in type inference by Zach Daniel

  • support :auto type in calculations (#2643) by @zachdaniel (#2643)

  • support calculations that don't add struct fields by @zachdaniel

  • resolve expr aggregate types (#2644) by @Torkan (#2644)

  • add --domain option to ash.gen.gettext for merging into existing pot files (#2640) by @nallwhy (#2640)

  • add required! expression shorthand (#2636) by dallingson (#2636)

  • add mix ash.gettext.extract for i18n support (#2615) by @nallwhy (#2615)

  • Add attribute_always_select? option to belongs_to relationships (#2627) by @emadshaaban92 (#2627)

  • redact sensitive values in built-in validation errors w/ backwards compatibility flag (#2608) by @nallwhy (#2608)

  • Allow marking actions as internal to prevent exposing them via APIs #1271 (#2629) by Dgoz101 (#2629)

  • expand gettext i18n support to types, changes, and changeset (#2637) by @nallwhy (#2637)

  • add filename and content_type functions to Ash.Type.File by @zachdaniel

  • use bulk actions for managed relationship actions by @zachdaniel

  • more informative errors on ash.setup failures (#2595) by celeste-wahlquist (#2595)

  • add generate/1 and bingenerate/1 accepting a DateTime to Ash.UUIDv7 (#2609) by @nallwhy (#2609)

  • add a member name transformer for Ash.Filter.parse_input by @zachdaniel

  • Allow dumping and casting instance_of union types (#2597) by @Munksgaard (#2597)

  • make enum label/description overridable (#2594) by Hannes Wüthrich (#2594)

  • add touch_update_defaults? option to bulk_create (#2590) by Michael Bärtschi (#2590)

  • add new trace types for bulk actions by @zachdaniel

  • Add offset option to has_one and has_many relationships (#2584) by @nallwhy (#2584)

  • add InvalidStoredData error for safe ETS cast failures by @mikaelweiss (#2570)

  • add support for data layers with partial success in bulk_create (#2576) by @rbino (#2576)

  • add pre_flight_authorization() builtin validation for conditional checks during Ash.can? (#2587) by @emadshaaban92 (#2587)

  • Add error messages to cast_stored and dump_to_native (#2570) by @mikaelweiss (#2570)

  • Enhance Ash.Type.NewType custom constraints to support arrays (#2578) by Christopher Bonhage (#2578)

  • Add context to read actions in cascade changes (#2582) by @stevebrambilla (#2582)

  • add embedded & embedded casting to Duration type by @zachdaniel

  • add support for notifier load statements by @zachdaniel

  • add support for declaring a type for notifiers by @zachdaniel

  • add support for per-publication load statements by @zachdaniel

  • make event an optional positional argument (and support atoms) by @zachdaniel

  • add not_found_error? to Ash.get to bring it in-line with actions (#2572) by StephanH90 (#2572)

  • include bread crumbs and standardize generic action errors by @zachdaniel

  • Allow Ash.Type.NewType to apply its own constraints (#2575) by Christopher Bonhage (#2575)

  • Split up usage rules into sub-rules (#2561) by @mylanconnolly (#2561)

  • calculations: Add multitenancy bypass options to calculations (#2552) by @shahryarjb (#2552)

  • manual relationship via list (#2546) by zackattackz (#2546)

  • support create_atomics and atomic_set for create atomics by @zachdaniel

  • make ignored managed relationships not break atomicity by @zachdaniel

  • support parent exprs in relationships for all data layers by @zachdaniel

  • support from and to options in changing validation by @zachdaniel

  • Add bulk_destroy step to AshReactor. (#2500) by wjrtz (#2500)

  • add load and loading? functions to ActionInput (#2511) by zackattackz (#2511)

  • Upgrade Splode to 0.3.0 for stacktrace filtering by @zachdaniel

  • Re-enables regex as mfa to improve regex speed (#2516) by sezaru (#2516)

  • add is_distinct_from and is_not_distinct_from functions (#2497) by @jechol (#2497)

  • add is_distinct_from and is_not_distinct_from operators by @jechol (#2497)

  • optimize is_distinct_from operators when NULL is impossible by @jechol (#2497)

  • create: Add multitenancy bypass options to create actions (#2495) by @shahryarjb (#2495)

  • Support :allow_global in bulk multitenancy actions by @shahryarjb (#2495)

  • update: Add multitenancy bypass options to update actions (#2494) by @shahryarjb (#2494)

  • destroy: Add multitenancy bypass options to destroy actions (#2477) by @shahryarjb (#2477)

  • support operator overloads returning casting overrides by @zachdaniel

  • aggregates: add multitenancy bypass option for aggregates (#2427) by @shahryarjb (#2427)

  • aggregates: add multitenancy bypass option for aggregates by @shahryarjb (#2427)

  • raise better error when passing Ash.Query to Ash.load (#2459) by StephanH90 (#2459)

  • raise better error when passing Ash.Query to Ash.load (#2459) by StephanH90 (#2459)

  • allow update actions for undo in reactor create steps (#2387) by @barnabasJ (#2387)

  • calculation verifier (#2439) by @barnabasJ (#2439)

  • add verifier to warn if load is used with expr calc by @barnabasJ (#2439)

  • don’t squish code interface double newlines by @zachdaniel

  • significantly optimize code interface generation by @zachdaniel

  • Allow overriding Ash.Type.NewType cast_input_array/2 (#2438) by Christopher Bonhage (#2438)

  • use regexes again now that otp 28.1 is out by @zachdaniel

  • keep tenant in query when using :bypass and :bypass_all (#2429) by @Malian (#2429)

  • tenant_from_attribute dsl option (#2412) by @barnabasJ (#2412)

  • Add preserve_nil_values? to map and struct types (#2414) by @Malian (#2414)

  • enable configuring match v4 uuids for v7 uuids (#2416) by Kenneth Kostrešević (#2416)

  • Simplify forbidden_due_to_strict_policy check (#2400) by @maennchen

  • Refactor SAT Solver into crux (#2375) by @maennchen

  • optimize Ash.Resource.Igniter.list_resources and Ash.Domain.Igniter.list_domains for large codebases (#2371) by Elliot Bowes

  • optimize list_resources and list_domains for large codebases by Elliot Bowes

  • Improve SatSolver.simplify_expression/1 (#2367) by @maennchen

  • Policy Refactoring (#2365) by @maennchen

  • Improve selection of atomic validation attribute, including resource-level option (#2356) by @stevebrambilla

  • data_one_of validation (#2358) by @barnabasJ

  • add Ash.transact/3 (#2341) by @barnabasJ

  • add can? callback for return_skipped_upsert? for bulk by @barnabasJ

  • add bulk_create for Ash.DataLayer.Mnesia (#2336) by Dan Wanek

  • return errors from calculations with invalid expressions by @zachdaniel

  • add source locations to a whole bunch of errors by @zachdaniel

  • add location to primary key verifier by @zachdaniel

  • add location for multitenancy verifier by @zachdaniel

  • add location information for manage relationship transformer by @zachdaniel

  • add location info for reserved field names transformer by @zachdaniel

  • add location info for primary action transformer by @zachdaniel

  • add location info for unique action name transformer by @zachdaniel

  • implemented ‘has’ and ‘intersects’ functions (#2324) by Abdessabour Moutik

  • use delay_task for mix ash.setup by @zachdaniel

  • add --setup flag to ash.install to run ash.setup by @zachdaniel

  • Improve performance of mix tasks that load extensions (#2332) by drtheuns

  • better error message on invalid relationship paths in exists by @zachdaniel

  • add any builtin validation by @zachdaniel

  • detect types in get_path expressions by @zachdaniel

  • Hard cutover to ReqLLM: remove LangChain runtime and migrate chat generator (#177) by mikehostetler (#177)

  • add mcp_ui_resource for MCP Apps spec (#173) by @nallwhy (#173)

  • For gen.chat task make all tools available by default (#176) by Kenneth Kostrešević (#176)

  • Support --provider, --route and --live-component (#175) by Kenneth Kostrešević (#175)

  • add strict? option, change how filters behave under it by @zachdaniel

  • Hard cutover from LangChain to ReqLLM for all LLM access paths.

  • Removed AshAi.setup_ash_ai/2, AshAi.functions/1, and LangChain-based AshAi.iex_chat/2.

  • Added ReqLLM-first orchestration APIs:

    • AshAi.list_tools/1

    • AshAi.build_tools_and_registry/1

    • AshAi.ToolLoop.run/2

    • AshAi.ToolLoop.stream/2

    • AshAi.iex_chat/1

  • prompt/2 now uses ReqLLM model specs ("provider:model", ReqLLM tuples, or functions returning them).

  • Prompt actions keep tools: support via AshAi.ToolLoop.

  • mix ash_ai.gen.chat now generates ReqLLM-based chat code and runtime config (config :req_llm, ...).

  • Runtime does not include Jido integration.

  • prompt actions: default tool-loop max_iterations to :infinity (unless explicitly set)

  • prompt actions: return tool-loop failures as action errors with reason details

  • prompt actions: support verbose? tool-loop lifecycle logging

  • prompt actions: use permissive schema for unconstrained :map returns

  • ash_ai.gen.chat: preserve and preview tool call arguments in both LiveView and LiveComponent templates

  • ash_ai.gen.chat: collapse generated tool UI helpers into AshAi.ChatUI.Tools.extract/1 with one-time warning flash on malformed tool data

  • docs: add legacy compatibility notes for adapter mapping and embedding return tuple behavior

  • Add ChatOpenAiResponses support (#163) by sezaru (#163)

  • Add ChatOpenAiResponses support by sezaru (#163)

  • Use StructuredOutput for ChatOpenAiResponses by sezaru (#163)

  • Add support for modifying the chain in prompt (#142) by @Munksgaard (#142)

  • Handle anonymous function in tool load definition (#157) by josh-brainbox (#157)

  • add arguments to tools by josh-brainbox (#157)

  • Added _meta field to tools MCP (#140) by @C-Sinclair (#140)

  • Add MCP resources support with action descriptions (#138) by @C-Sinclair (#138)

  • langchain 0.4 (#132) by @barnabasJ (#132)

  • update ash_oban to 0.5 by @zachdaniel

  • allow multiple full text definitions in vectorize section (#125) by Abdessabour Moutik (#125)

  • don’t install usage rules as part of installing ash ai by @zachdaniel

  • Support LangChain 0.4 (#124) by Arjan Scherpenisse (#124)

  • manifest: add valibot entries to JSON manifest by @Torkan

  • codegen: add typed sort fields with SortString utility type and array support by @Torkan

  • codegen: add isNil operator, expand aggregate filters, generate filter field arrays by @Torkan

  • valibot by @directormac

  • add valibot to resolver and orchestrator by @directormac

  • valibot generators by @directormac import_into_generated and typed_controller_import_into_generated file paths are now project-root-relative (e.g., “assets/js/hooks.ts”) instead of JS-relative import paths (e.g., “./hooks”)

  • codegen: exclude calculations with field?: false from generated types by @Torkan

  • typed-channel: auto-derive payload types from calculation transforms by @Torkan

  • rpc: verify actions and relationship read actions are public? by @Torkan

  • rpc: add machine-readable JSON manifest generation by @Torkan

  • typed-channel: detect payload type name conflicts across channels by @Torkan

  • typed-channel: add config accessors and orchestrator integration by @Torkan

  • typed-channel: add DSL, verifier, and codegen for typed channel event subscriptions by @Torkan

  • add typed_controller_base_path config for route URL prefixing by @Torkan

  • add HTTP verb shortcuts and positional method arg to typed controller DSL by @Torkan

  • add controller namespace support and simplify codegen orchestration by @Torkan

  • add multi-file codegen architecture and typed controller enhancements by @Torkan

  • add typed_controller_mode config for paths_only generation by @Torkan

  • generate query params and typed path helpers for TypedController routes by @Torkan

  • validate that path params have matching DSL arguments by @Torkan

  • typed-controller: validate route and argument names for TypeScript compatibility by @Torkan

  • add TypedController as standalone Spark DSL with argument extraction and type casting by @Torkan

  • controller-resource: normalize camelCase request params to snake_case by @Torkan

  • codegen: integrate controller resource route generation into mix task by @Torkan

  • add TypeScript route codegen with router introspection by @Torkan

  • add ControllerResource DSL extension with controller generation by @Torkan

  • codegen: add always_regenerate config to skip diff check by @Torkan

  • config: add developer experience configuration options by @Torkan

  • mix: handle multi-file output and manifest generation by @Torkan

  • codegen: add multi-file namespace output support by @Torkan

  • codegen: add markdown manifest generator by @Torkan

  • codegen: add JSDoc generator with configurable tags by @Torkan

  • codegen: add namespace resolution and domain grouping by @Torkan

  • dsl: add namespace, description, deprecated, and see options by @Torkan

  • rpc: generate restricted schemas for allowed_loads actions by @Torkan

  • rpc: support first aggregates returning embedded resources and unions by @Torkan

  • rpc: add allowed_loads and denied_loads options for rpc_action by @Torkan

  • rpc: add enable_filter? and enable_sort? options for rpc_action by @Torkan

  • All field mapping dsls and callbacks now require strings instead of atoms.

  • Fields requested from calculations without arguments no longer need to be wrapped in {fields: [...]}

  • add VerifyActionTypes and VerifyUniqueInputFieldNames verifiers by @Torkan

  • add ResourceFields helper and extend Introspection by @Torkan

  • add FieldSelector for unified type-driven field selection by @Torkan

  • add ValueFormatter for unified type-aware value formatting by @Torkan primaryKey input field for update & destroy rpc actions are now replaced by the more flexible identities-field

  • identities: add compile-time identity verification by @Torkan

  • identities: add identity-based record lookup for update/destroy actions by @Torkan

  • codegen: generate TypeScript types for get? and get_by actions by @Torkan

  • rpc: add compile-time verification for get options by @Torkan

  • rpc: implement get? and get_by runtime execution by @Torkan

  • rpc: add get?, get_by, and not_found_error? DSL options by @Torkan

  • codegen: generate TypeScript types for get? and get_by actions by @Torkan

  • rpc: add compile-time verification for get options by @Torkan

  • rpc: implement get? and get_by runtime execution by @Torkan

  • rpc: add get?, get_by, and not_found_error? DSL options by @Torkan

  • add FieldExtractor module for unified tuple/keyword/map extraction by @Torkan

  • preserve TypedStruct instance_of for field name mappings by @Torkan

  • standardize RPC error structure with vars, path, fields, details by @Torkan

  • use bulk actions for update/destroy by @zachdaniel (#17)

  • support read_action configuration by @zachdaniel (#17)

  • better error handling & struct field selection in RPC by @zachdaniel (#17)

  • add configurable warnings for RPC resource discovery and references by @Torkan

  • add resource scanner for embedded resource discovery by @Torkan

  • rpc: implement lifecycle hooks in TypeScript codegen by @Torkan

  • rpc: add lifecycle hooks configuration API by @Torkan

  • codegen: add configurable untyped map type by @Torkan

  • rpc: add custom error response handler support by @Torkan

  • rpc: add support for dynamic endpoint configuration via imported TypeScript functions by @Torkan

  • rpc: add typed query field verification at compile time by @Torkan

  • add type_mapping_overrides config setting by @Torkan

  • codegen: warn when resources have extension but missing from domain by @Torkan

  • add action metadata support with field name mapping by @Torkan

  • add precise pagination type constraints to prevent misuse by @Torkan

  • add VerifierChecker utility for Spark verifier validation by @Torkan

  • support typescript_field_names callback in codegen by @Torkan

  • add map field name validation for custom types by @Torkan

  • add field_names & argument_names for mapping invalid typescript names to valid ones by @Torkan

  • Properly handle map without constraints, both as input and output. by @Torkan

  • add unique type_name verifier for AshTypescript.Resource by @Torkan

  • remove redundant path-tracking & cleanup of code in formatters. by @Torkan

  • remove redundant cast_input in color_palette.ex by @Torkan

  • run npm install automatically on installation by Zach Daniel

  • add igniter install notices. by Torkild Kjevik

  • add igniter installer by Torkild Kjevik

  • add rpc routes & basic react setup in installer by Torkild Kjevik

  • use String.contains? for checking if rpc routes already exist by Torkild Kjevik

  • Set default config in config.exs by Torkild Kjevik

  • include sub_rules by default instead of on selection or :all by Zach Daniel

  • Fix examples in error outputs and docs

  • regexes in usage rule deps, add examples by Zach Daniel

  • use refernece files for all usage rules by Zach Daniel

  • reference mode for skill deps by Zach Daniel

  • make package inlining configured per-dep, clean ups by Zach Daniel

  • rebuild usage rules to be config-driven and support agent skills by Zach Daniel

  • Impl supports_umbrella? (#33) by Wigny

  • Add ability to extract one or more usage rules to folder without modifying any files. (#29) by olivermt

  • check compiled manifest and simple defmodule patterns early by Zach Daniel

  • add and manage a module index cache by Zach Daniel

  • error messages for task compilation (#364) by celeste-wahlquist

  • error messages for task compilation (#364) by celeste-wahlquist

  • Add more context to umbrella error message (#358) by José Valim

  • Add support for SiteEncrypt.Phoenix.Endpoint detection (#339) by Herman verschooten

  • add delay_task to run tasks at the end by Zach Daniel

  • sort persisters using before/after callbacks (#264) by Torkild Gundersen Kjevik

  • Builder API for Sections and Entities (#253) by leonqadirie

  • add singleton_entity_keys to sections by Zach Daniel

  • add new {:function, ... type by Zach Daniel

  • Add {:and, subtypes} option type. (#246) by James Harton

  • add Spark.Docs.redirects_for/2 to generate DSL doc redirects by Zach Daniel

  • add :regex builtin type by Zach Daniel

  • only compile on uncompiled extension in formatter by Zach Daniel

  • only store source location if :debug_info enabled (#222) by Jonatan Männchen

    • Note: you will potentially need to update your DSL tests. See the anno guide for more.

  • check spark_metadata presence in nested entities (#220) by Jonatan Männchen

  • Add DSL entity validation and transformation (#218) by marot

  • add setting for skipping diagnostic warnings by Zach Daniel

  • warn and error on transformer errors by Zach Daniel

  • cleaner warnings on dsl errors by Zach Daniel

  • Record Source Annotations (#216) by Jonatan Männchen

  • add traverse_errors/2 callback and function to Splode by Zach Daniel

  • warn on using reserved splode fields by Zach Daniel

  • support filtering stacktrace modules in Splode errors by Zach Daniel

  • add error_class? flag to Splode.ErrorClass structs by Zach Daniel

  • support field?: false calculations in graphql by @zachdaniel

  • support Ash’s new public? action option by @zachdaniel

  • include builtin predicate functions in GraphQL filter schema (#413) by @nallwhy (#413)

  • support per-field operator allowlists in filterable_fields (#407) by @nallwhy (#407)

  • validate cross-field dependencies in graphql DSL options at compile time (#416) by @nallwhy (#416)

  • validate field references in graphql DSL options at compile time (#415) by @nallwhy (#415)

  • raise at compile time when related resource’s domain is missing from schema (#414) by @nallwhy (#414)

  • Split up usage rules (#404) by @mylanconnolly (#404)

  • Add GraphQL tracer integration for AppSignal monitoring by @lukegalea

  • support mapping join resource keys to meta (#419) by lincolnhuls (#419)

  • support field? :false calculations by @zachdaniel

  • handle Reactor.Error.Invalid.RunStepError in error conversion (#424) by @Torkan (#424)

  • support the new public? option on actions by @zachdaniel

  • add dedicated calculation argument transformer by @zachdaniel

  • add builtin transformers :camelize and :dasherize by @zachdaniel

  • add field mapping utilities by @zachdaniel

  • add config to use correct object type for filter schemas by olivermt (#413)

  • add an error_handler option by @zachdaniel

  • Add pagination support for included relationships (#392) by srikanthkyatham

  • support mapping join resource keys to meta (#419) by lincolnhuls (#419)

  • support field? :false calculations by @zachdaniel

  • handle Reactor.Error.Invalid.RunStepError in error conversion (#424) by @Torkan (#424)

  • support the new public? option on actions by @zachdaniel

  • add dedicated calculation argument transformer by @zachdaniel

  • add builtin transformers :camelize and :dasherize by @zachdaniel

  • add field mapping utilities by @zachdaniel

  • add config to use correct object type for filter schemas by olivermt (#413)

  • add an error_handler option by @zachdaniel

  • Add pagination support for included relationships (#392) by srikanthkyatham

  • Paginated Relationships - Add support for paginating included relationships via included_page query parameter

  • add recovery code authentication strategy (#1135) by adamtharani

  • add microsoft strategy (#1136) by MikaelFangel

  • move Phoenix concerns out of AA igniters (#1145) by James Harton

  • split igniter generators into per-strategy and per-add-on tasks (#1143) by James Harton

  • add grace_period option to TOTP strategy (#1134) by James Harton

  • add remember_me to password sign-in strategy by default (#1131) by Zach Daniel

  • propagate sender failures as action errors (#1126) by James Harton

  • propagate sender failures as action errors by James Harton

  • convert request actions from read to generic action (#1125) by James Harton

  • change token revoked action from read to generic action (#1124) by James Harton

  • Add TOTP authentication strategy. (#1086) by James Harton

  • add TOTP authentication components and routes by James Harton

  • totp: add read_secret_from option for AshCloak support by James Harton

  • add support for extra JWT claims (#1122) by James Harton

  • make auto signout possible in AshAuthentication.Phoenix (#1070) by Abdessabour Moutik

  • added options to allow for the specification of the endpoints + a template function for the live socket id by Abdessabour Moutik

  • consolidate audit log code and remove redundant nil checks by James Harton

  • properly configure remember_me strategy in installer by Zach Daniel

  • add return_error_on_invalid_magic_link_token? config by Robert Graff

  • Add MaybeGenerateTokenChange for remember me support in create actions (#1093) by weljoda

  • Openid configuration uri type change (#1095) by andreas-ementio

  • add return_error_on_invalid_magic_link_token? config by Robert Graff

  • Add MaybeGenerateTokenChange for remember me support in create actions (#1093) by weljoda

  • Openid configuration uri type change (#1095) by andreas-ementio

  • Audit Logging add-on. (#1074) by James Harton

  • Audit logging add-on. by James Harton

  • enhance error messages in hash_password_change.ex (#1058) by pupdogg

  • remember me strategy (#1016) by Robert Graff

  • allow setting extra context on magic links (#1081) by Zach Daniel

  • more conventional action result status by James Harton

  • add allowlist for actions and strategies by James Harton

  • Add warning message when logging sensitive fields by James Harton

  • audit_log: add IP address privacy options with configurable truncation masks by James Harton

  • default confirm action name to add-on name by James Harton

  • add support for AshEvents.Events.ReplayChangeWrapper in validate_action_has_change (#1066) by Torkild Gundersen Kjevik

  • pass magic link request source context to mail sender (#1048) by marcnnn

  • Audit Logging add-on. (#1074) by James Harton

  • enhance error messages in hash_password_change.ex (#1058) by pupdogg

  • add Phoenix integration for recovery code strategy (#724) by @jimsynz

  • add convention-named Phoenix strategy tasks for auth integration (#719) by @jimsynz

  • add TOTP authentication components and routes (#706) by James Harton

  • prevent logout CSRF by replacing GET sign-out with confirmation page by @jimsynz

  • After user sign out all other tabs will disconnect (#662) by Abdessabour Moutik

  • After user sign out all other tabs will disconnect by Abdessabour Moutik

  • final implementation hopefully we can put this to rest by Abdessabour Moutik

  • add TOTP authentication components and routes by James Harton

  • Allow filtering auth routes (#696) by Andrés

  • add TOTP authentication components and routes (#706) by @jimsynz

  • After user sign out all other tabs will disconnect (#662) by Abdessabour Moutik

  • After user sign out all other tabs will disconnect by Abdessabour Moutik

  • final implementation hopefully we can put this to rest by Abdessabour Moutik

  • add TOTP authentication components and routes by @jimsynz

  • Allow filtering auth routes (#696) by Andrés (#696)

  • prevent logout CSRF by replacing GET sign-out with confirmation page by @jimsynz

  • make flash overridable (#702) by aidalgol (#702)

  • Add remember_me checkbox field to magic link forms (#693) by Matt Van Horn (#693)

  • Add support for custom extra components in authentication forms (#689) by @benjaminjacobberg (#689)

  • Add support for custom extra components in authentication forms by @benjaminjacobberg (#689)

  • Add support for remember me (#625) by Robert Graff (#625)

  • added token validation on socket mount by Abdessabour Moutik (#666)

  • add icon_src override by Dawid Danieluk (#660)

  • Deprecate Router.auth_routes_for/2..3 (#653) by @jimsynz (#653)

  • install with daisyUI overrides if using daisyUI (#650) by pikdum (#650)

  • Add remember_me checkbox field to magic link forms (#693) by Matt Van Horn (#693)

  • Add support for custom extra components in authentication forms (#689) by @benjaminjacobberg (#689)

  • Add support for custom extra components in authentication forms by @benjaminjacobberg (#689)

  • Add support for remember me (#625) by @rgraff (#625)

  • added token validation on socket mount by Abdessabour Moutik (#666)

  • add icon_src override by Dawid Danieluk (#660)

  • Deprecate Router.auth_routes_for/2..3 (#653) by James Harton (#653)

  • install with daisyUI overrides if using daisyUI (#650) by pikdum (#650)

  • relationship through (#686) by Kenneth Kostrešević

  • add support for :identity types (#715) by Jatanasio

  • add native_in/2 function for SQL IN (...) syntax (#728) by jkreddy020203

  • Drop tables on missing resources & table name change handling (#713) by obviouslyweb

  • Add required!/1, ash_required/1, and ash_required!/2 (issue #261) (#707) by dallingson

  • add --use_fragments option to resource generator | Closes #437 (#709) by henryzhan013

  • support offset option in lateral join queries (#700) by Jinkyou Son

  • support touch_update_defaults? option to skip update_default fields on upsert by Michael Bärtschi

  • read touch_update_defaults? from options instead of changeset context (#701) by Michael Bärtschi

  • Split up usage rules into sub-rules (#691) by Mylan Connolly

  • fix for atomic create support

  • support atomic creates by Zach Daniel

  • Update AshFunctions, remove timestamp_from_uuid_v7 (#676) by Matt Savoia

  • Update MigrationGenerator to use uuidv7 when available (#674) by Matt Savoia

  • add create_table_options for partitioned tables and more (#664) by Robert Graff

  • add generator to tsvector type (#655) by Jesse Williams

  • verify check constraint attributes at compile time by Zach Daniel

  • update deps for bug fixes by Zach Daniel

  • remove unused bulk operation metadata function & update ash by Zach Daniel

  • implement combination_acc/1 by Zach Daniel

  • leverage new aggregate loading optimization by Zach Daniel

  • Add immutable version of ash_raise_error function to support extensions like Citus (#620) by Steve Brambilla

  • location in spark errors and migration generator fixes by Zach Daniel

  • use default constraint of ‘now()’ for AshPostgres.Timestamptz (#621) by siassaj

  • support relationship through (#212) by Kenneth Kostrešević (#212)

  • support offset option in relationship joins (#214) by @nallwhy (#214)

  • don’t cast integer/string equality check unnecessarily by @zachdaniel

  • do manual rel subquery regardless of no_attributes for aggregates (#213) by zackattackz (#213)

  • support atomics as insert values via subqueries by @zachdaniel

  • add support for is_distinct_from and is_not_distinct_from functions (#200) by @jechol (#200)

  • add SQL generation for is_distinct_from operators by @jechol (#200)

  • add support for is_distinct_from and is_not_distinct_from functions by @jechol (#200)

  • update Ash to 3.7 and fix deprecated calls by @zachdaniel

  • support combination_acc/1 function to get current combination accumulator by @zachdaniel

  • support massive aggregate optimization by @zachdaniel

  • Support calling immutable version of ash_raise_error (#175) by @stevebrambilla (#175)

  • add immutable_errors? to sql behaviour by @stevebrambilla (#175)

  • implemented the SQL translation for Has/Intersects functions (#176) by Abdessabour Moutik (#176)

  • support positional name argument in generate_migrations by Zach Daniel

  • read touch_update_defaults? from options instead of changeset context (#208) by Michael Bärtschi

  • support nils_distinct? in identities by Zach Daniel

  • raise clearer error on unsupported foreign key drops in SQLite migrations by Zach Daniel

  • update to use bulk refs from latest ash by Zach Daniel

  • use NimbleCSV (#15) by Jatanasio

  • completely rework the UI w/ dark mode by Zach Daniel

  • completely rework the UI w/ dark mode by Zach Daniel

  • rework json and markdown editors for CSP compliance by Zach Daniel

  • add forbidden banner by Zach Daniel

  • support typeahead/pills for many cardinality relationships by Zach Daniel

  • add list_tenants logic by Zach Daniel

  • Redo of Cinder integration (#380) by sevenseacat

  • incoporate sevenseacat theme into cinder table for consistent styling and enhanced features by Zach Daniel

  • Add :datetime_step form field configuration (#376) by capoccias

  • allow gettext ~> 1.0 (#368) by Aleksandr Lossenko

  • support actor_load option by Zach Daniel

  • extract single errors for much clearer AppSignal reporting by Zach Daniel

  • make rate limiter backend-pluggable with configurable lifecycle hooks (#62) by adamtharani

  • make rate limiter backend-pluggable with configurable lifecycle hooks by adamtharani

  • add hammer dep to igniter installer and create upgrade task by James Harton

  • add generic action support. (#56) by wjrtz

  • Adding support for igniter install (#48) by srikanthkyatham

  • Adding support for igniter install by srikanthkyatham

  • don't encrypt attributes not in action accept list by Zach Daniel

  • implement generator for Money type (#156) by Scott Bennett

  • support scope in AshOban.run_trigger by Zach Daniel

  • deprecate shared_context? in favor of shared_context by Zach Daniel

  • add new test helpers for triggers & schedulers by Zach Daniel

  • add support for snoozing and cancelling Oban jobs from actions by Zach Daniel

  • validate that on_error action exists by Zach Daniel

  • support setting tags in DSL by Zach Daniel

  • set job into context to allow for better logging and error handling by Zach Daniel

  • experiment with new chunk worker logic by Zach Daniel

  • Split up usage rules into sub-rules (#214) by Mylan Connolly

  • support list_tenants for scheduled actions by Zach Daniel

  • Better formatting for error messages (#208) by DVSLabs

  • use new oban 2.20 state groups (#201) by Barnabas Jovanovics

  • use new oban 2.20 state groups by Barnabas Jovanovics

  • Disable peer leadership when plugins are disabled (#202) by Parker Selbert

  • set tenant from record in case of attribute multitenancy (#195) by Barnabas Jovanovics

  • add use_tenant_from_record? DSL flag by Barnabas Jovanovics

  • add verifier for use_tenant_from_record? consistency by Barnabas Jovanovics

  • add oban-level use_tenant_from_record? default by Barnabas Jovanovics

  • use cancel & oban’s native batch inserting by Zach Daniel

  • use shared context for ash_oban? interaction if shared_context? DSL option is set (#194) by Barnabas Jovanovics

  • added stream_with option (default: :keyset) (#193) by paugramming

  • error message on attribute that violates one_of constraint (#139) by Travis Simon

  • Make read_transfers pagination optional (required?: false) (#159) by olivermt

  • Add multitenancy to and create consistency between gen.html and gen.live (#459) by aVikingTrex (#459)

  • add --resource-plural-for-routes to gen tasks by @zachdaniel

  • allow dynamic subscriptions in keep_live by @zachdaniel

  • Split up usage rules into sub-rules (#458) by @mylanconnolly (#458)

  • add AshPhoenix.AshEnum by sevenseacat (#413)

  • soft deprecate page_from_params/3 and introduce params_to_page_opts/3 (#422) by hy2k (#422)

  • add AshPhoenix.AshEnum by Aidan Gauland (#413)

  • destroy: add soft delete support and comprehensive tests by @Torkan

  • add store_sensitive_attributes dsl option by @Torkan Post to linkedin

No posts

Read the original on ashchronicle.substack.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.