<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="275942" data-post-id="275942">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sergio" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sergio/120/26966_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sergio
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I haven’t tried Ash but reading the docs it looks similar to Lucky Framework for Crystal.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://luckyframework.org/guides/database/saving-records">
  <header class="source">

      <a href="https://luckyframework.org/guides/database/saving-records" target="_blank" rel="noopener nofollow ugc">luckyframework.org</a>
  </header>

  <article class="onebox-body">
    <img width="690" height="690" src="https://luckyframework.fly.dev/assets/images/lucky_og_screenshot-8da8d507.png" class="thumbnail onebox-avatar" alt="">

<h3><a href="https://luckyframework.org/guides/database/saving-records" target="_blank" rel="noopener nofollow ugc">Saving and Updating records</a></h3>

  <p>Lucky is a web framework for the Crystal programming language</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>A lot of macros and remembering the right incantation instead of working with primitives. What happens if I have to go off the beaten path? That’s my main concern with trying to use Lucky and something like Ash.</p>
<p>Has anyone used it in prod for anything? What’s the day to daylike? Where can you cut yourself?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="275942" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-275942" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="275942"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="276016" data-post-id="276016">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wintermeyer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wintermeyer/120/22174_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wintermeyer
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I am in the process of writing a new version of <a href="https://www.mehr-schulferien.de" rel="noopener nofollow ugc">Schulferien Deutschland</a> Webpage (a page with school vacations of some 40,000 German schools) with Ash. I like the whole idea of the clean DSL. It feels like a one stop shop to me. I only have to take care of one thing and get a lot of things for free (e.g. the <a href="https://github.com/ash-project/ash_json_api" rel="noopener nofollow ugc">RESTful JSON</a> and the <a href="https://github.com/ash-project/ash_graphql" rel="noopener nofollow ugc">graphql API</a>).</p>
<p>I hope so save a lot of time in future projects by using Ash. Right now I am not there yet. It is a bumpy ride. <a class="mention" href="/u/zachdaniel" rel="nofollow">@zachdaniel</a> is very responsive on Discord but I have trouble with some documentation.</p>
<p>Bottom line: I think Ash has the potential to become a game changer. Faster and more secure development.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276016" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-276016" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276016"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="276018" data-post-id="276018">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="talhaazeem-invozone" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  talhaazeem-invozone
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Does <code>mix phx.gen.auth</code> supports Ash resources?<br>
How can we handle authentication?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276018" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-276018" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276018"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="276020" data-post-id="276020">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="zachdaniel" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/zachdaniel/120/31980_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  zachdaniel
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Ash</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If you don’t want to use <code>ash_authentication</code> then your best bet is to use <code>mix phx.gen.auth</code> and then adapt it to work with your resources. Alternatively, you can just use mix phx.gen.auth with ecto schemas and use the produced user as the “actor”.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276020" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-276020" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276020"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="276033" data-post-id="276033">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="frankdugan3" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/frankdugan3/120/39210_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  frankdugan3
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I use it for a proprietary ERP we’re developing in house (LiveView and GraphQL API), and for numerous personal LiveView projects, some of which will eventually be open-sourced.</p>
<p>I’ve been using it for a few years, closely following the development. It is indeed a massive project, can be intimidating at first, but it’s not necessary to understand the full capability of the project to start leveraging it, and it’s certainly worthwhile!</p>
<p>Right off the bat, I have to say that the Discord community on the Ash server is very active, several devs that use it in prod keep an eye on things and jump in w/ help in addition to Zach. There’s lots of help if you get stuck or aren’t sure how to do something in Ash.</p>
<p>Very hard to do an elevator pitch, but here’s an attempt:</p>
<p>Instead of working with tooling (like Ecto, Absinthe) directly, you define resources with a DSL.</p>
<p>A resource is both a definition for a struct of data, as well as a place to configure all extensions for that data (APIs, auth policies, DB config, etc.). A short list of polished, official extensions/features you get (opt-in) out of the box:</p>
<ul>
<li>Ecto schemas</li>
<li>Postgres datalayer w/ migration generation</li>
<li>Attribute and schema-based multi-tenancy (including DB migration tooling!)</li>
<li>CSV datalayer</li>
<li>ETS datalayer</li>
<li>Internal Elixir API (w/ pagination, sorting, filtering)</li>
<li>JSON API (w/ pagination, sorting, filtering)</li>
<li>GraphQL API (w/ pagination, sorting, filtering)</li>
<li>Calculated fields (supporting sorting and filtering)</li>
<li>Aggregate fields (supporting sorting and filtering)</li>
<li>Dead-simple soft-delete</li>
<li>Custom validations, can be action-specific</li>
<li>Can join relationships across different datalayer types (e.g. CSV &amp; postgres – uses dataloader pattern for efficiency)</li>
<li>Very smart notifications for PubSub, and custom stuff like Emails</li>
<li>Powerful authorization policies that work w/ Internal, JSON and GraphQL APIs (has an expression language)</li>
<li>You can set authorization rules on an API like:<pre data-code-wrap="elixir"><code class="lang-elixir"># This prevents the footgun of forgetting to authorize an API call.
# To bypass authz, you will have to explicitly set authorize?: false in the call.
# Other options are available to fit your requirements.
authorization do
  authorize :by_default
  require_actor? true
end
</code></pre>
</li>
<li>Phoenix tooling w/ incredibly powerful and simple API for dealing w/ nested forms.</li>
<li>A (new) authentication extension (customizable) as an alternative to <code>phx.gen.auth</code></li>
<li>Many of these features have strong compile-time validations for config</li>
<li>DSL formatter, customizable so you can pick the order of the DSL sections!</li>
<li>Elixir LS integration – does lots of smart auto-complete!</li>
<li>Any extension you want to write on your own</li>
</ul>
<p>I’d compare it to Tailwind in a way: It has patterns and tooling that can be easily used to create bespoke apps. It creates a tremendous amount of consistency across your app and API, and allows you add features later that don’t break your API. For example, if you start out without using authorization, pagination, filtering or sorting, then add it later, no problem! Those arguments are additional opts to pass, so you don’t break anything by enabling it later.</p>
<p>It’s hard to get a feel from examples in the docs, but it really does NOT nail you down to a formulaic CRUD pattern. You can have any number of actions. There are basic action types (<code>:create</code>, <code>:read</code>, <code>:update</code>, <code>:destroy</code>), but no limit on how many of each type, and they can have different args and/or accepted attributes. There are also tons of escape hatches that give you multiple levels of intervention if the OOTB options aren’t cutting it for your needs. For example, in API actions, you have access to <code>before_action</code> and <code>after_action</code> hooks to manipulate the changeset before it hits the DB, or you can do a fully manual action and handle persistence on your own. Another example, in calculated fields, you can use an expression syntax and even use SQL fragments:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">calculations do
  calculate :name_full,
            :ci_string,
            expr(
              fragment(
                "concat_ws(' ', ?, ?, ?, ?, ?)",
                name_title,
                name_first,
                name_middle,
                name_last,
                name_suffix
              )
            )
end
</code></pre>
<p>As an example of how far you can go, I’ve been using my own extension that adds a <code>user_interface</code> section to the DSL which allows you to define how forms/tables/cards should be generated for LiveView (e.g. custom classes, how to group fields in forms, etc) and some smart components that can derive the forms based on what resource you pass it. I hope to open source this somewhat soon, BTW. <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>This really just scratches the surface. There’s a ton to learn about Ash, but you can start very simple and build your knowledge/usage over time.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276033" data-batch-url="/posts/batch_likers">
                        25
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-276033" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276033"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="276052" data-post-id="276052">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="frankdugan3" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/frankdugan3/120/39210_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  frankdugan3
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As an addendum to drive home the point that this is not like other frameworks w/ lock in, before settling on Ash, I tried and rejected:</p>
<ul>
<li>GraphCool/Prisma</li>
<li>Postgraphile</li>
<li>Hasura</li>
</ul>
<p>Ash it far, far less restrictive than all of those options. (Which is of course not to cast shade on them – they’re pretty cool too, especially Postgraphile!) With each of those, I ended up feeling boxed in, not to mention they required the SPA route. With Ash, I’ve been able to develop for LiveView without feeling too boxed in, then later added in a GraphQL API very easily (just adding one section to the DSL and setting up the Absinthe entry point/routes) later for 3rd party use</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276052" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-276052" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276052"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="276053" data-post-id="276053">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Benjamin-Philip" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Benjamin-Philip/120/34651_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Benjamin-Philip
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m thinking of writing a commenting system with LiveView or LiveState with Ash for fun and for my blog (mainly for fun. There are already very good options available in this space like isso)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276053" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-276053" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276053"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="276126" data-post-id="276126">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="frankdugan3" data-post="16" data-topic="53401">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/frankdugan3/48/39210_2.png" class="avatar"> frankdugan3:</div>
<blockquote>
<p>Many of these features have strong compile-time validations for config</p>
</blockquote>
</aside>
<p>I’m sold. Any example I can look at?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276126" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-276126" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276126"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="276128" data-post-id="276128">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="barnabasJ" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/barnabasJ/120/29318_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  barnabasJ
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Ash Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>We started using Ash right around the time the 2.0 Release hit. To be honest, I was quite sceptic at first. After using NestJS in Node for the backend before, I did not want to have a Framework that would make it hard to do things differently than the Framework creator had envisioned.<br>
But Ash allowed us to get started really fast, just declaring our Resources and exposing them, using AshGraphql. The Support I received in Discord was immensely helpful and often made my day at work.<br>
After Starting with writing your own actions/changes/calculations to keep the code clean, you can go further into extensions and data layers later on, giving you a lot of potential to extract out common functionality and separate those by concern. The way Ash works, it was always possible to jump in at some point in the process and do additional work or just do some custom work with ash still handling stuff like argument validation for you.</p>
<p>So far, Ash has helped us greatly with reducing boring work, while not feeling restrictive in how you can do things.</p>
<p>10/10 would recommend <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276128" data-batch-url="/posts/batch_likers">
                        10
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-276128" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276128"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="276159" data-post-id="276159">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="frankdugan3" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/frankdugan3/120/39210_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  frankdugan3
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If you’re wanting to see examples of the compile-time validations, you can check the Ash Core source. Right <a href="https://github.com/ash-project/ash/tree/main/lib/ash/resource/transformers" rel="noopener nofollow ugc">here</a> are a few files named <code>validate_*</code>, those are some of the post-DSL-compile checks, in this folder specifically for relationship configs. E.g. for relationships, it checks that the specified related resource exists, and that it has the attributes expected/specified, etc.</p>
<p>If you want examples of using Ash, <a href="https://github.com/brettkolodny/todoish" rel="noopener nofollow ugc">Todoish</a> and the <a href="https://github.com/ash-project/ash_hq" rel="noopener nofollow ugc">AshHQ</a> are the best I can think of off the top of my head.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="276159" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/have-you-used-or-are-thinking-about-using-the-ash-framework/53401/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-276159" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="276159"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/53401/load_more?page=3">Load more posts (7 remaining)</a>
</div></template></turbo-stream>