{"id":13513823,"url":"https://github.com/ash-project/ash","last_synced_at":"2026-04-01T20:31:51.879Z","repository":{"id":39578527,"uuid":"212487543","full_name":"ash-project/ash","owner":"ash-project","description":"A declarative, extensible framework for building Elixir applications.","archived":false,"fork":false,"pushed_at":"2026-03-25T17:14:13.000Z","size":29527,"stargazers_count":2364,"open_issues_count":125,"forks_count":373,"subscribers_count":30,"default_branch":"main","last_synced_at":"2026-03-25T21:32:02.730Z","etag":null,"topics":["ash","dsl","elixir","framework"],"latest_commit_sha":null,"homepage":"https://www.ash-hq.org","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ash-project.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSES/MIT.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"ash-framework"}},"created_at":"2019-10-03T03:07:55.000Z","updated_at":"2026-03-25T17:14:18.000Z","dependencies_parsed_at":"2023-10-03T00:39:48.033Z","dependency_job_id":"85428396-d7fc-45ef-9797-a7d25f253263","html_url":"https://github.com/ash-project/ash","commit_stats":{"total_commits":4721,"total_committers":167,"mean_commits":"28.269461077844312","dds":"0.32090658758737556","last_synced_commit":"29f7024dd52992c949859738891534f990a48a6b"},"previous_names":[],"tags_count":858,"template":false,"template_full_name":null,"purl":"pkg:github/ash-project/ash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Fash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Fash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Fash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Fash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ash-project","download_url":"https://codeload.github.com/ash-project/ash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Fash/sbom","scorecard":{"id":211373,"data":{"date":"2025-08-14T18:48:55Z","repo":{"name":"github.com/ash-project/ash","commit":"1df7693f7accbb67ad71c226eeea619c1d28b7fd"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":8.9,"checks":[{"name":"Code-Review","score":7,"reason":"Found 22/29 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/ash-ci.yml:409","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/ash-ci.yml:544","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/ash-ci.yml:637","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/ash-ci.yml:88","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/ci.yml:21","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/ci.yml:24","Info: topLevel 'contents' permission set to 'read': .github/workflows/ash-ci.yml:75","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:11","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:18","Info: topLevel 'contents' permission set to 'read': .github/workflows/test-subprojects.yml:8"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ash-ci.yml:355: update your workflow using https://app.stepsecurity.io/secureworkflow/ash-project/ash/ash-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ash-ci.yml:356: update your workflow using https://app.stepsecurity.io/secureworkflow/ash-project/ash/ash-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ash-ci.yml:291: update your workflow using https://app.stepsecurity.io/secureworkflow/ash-project/ash/ash-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ash-ci.yml:292: update your workflow using https://app.stepsecurity.io/secureworkflow/ash-project/ash/ash-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/ash-project/ash/scorecard.yml/main?enable=pin","Info:  28 out of  31 GitHub-owned GitHubAction dependencies pinned","Info:  38 out of  40 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":10,"reason":"project is fuzzed","details":["Info: ElixirPropertyBasedTesting integration found: test/generator/generator_test.exs:4"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":5,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is not required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Warn: no status checks found to merge onto branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool is not run on all commits -- score normalized to 7","details":["Warn: 19 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/ash-project/.github/SECURITY.md:1","Info: Found linked content: github.com/ash-project/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/ash-project/.github/SECURITY.md:1","Info: Found text in security policy: github.com/ash-project/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"name":"CI-Tests","score":7,"reason":"19 out of 24 merged PRs checked by a CI test -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 44 contributing companies or organizations","details":["Info: found contributions from: CodeWithAloha, HaxeFoundation, Honolulu, Politecnico-Open-unix-Labs, alembic, athena-logistics, canoniq, devall-org, devall-org @reflow-work, elixir-gettext, elixir-korea, elixir-lang, elixir-lsp, elixirsydney, ericsson, erlang ecosystem foundation, erlef, erlef-cna, fbkinfo, feathersjs, graphql-cats, graphql-elixir, graphqlsydney, grug-, heretask, hicapacity, hui-ad, kickplan, moxley data inc, none, quantum-elixir, reintegrate, remotecom, rubynz, rubysherpas, software-mansion, software-mansion-labs, softweb development pty ltd, spandex-project, sustema-ag, talam, team-alembic, witchcrafters, zebbra"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}}]},"last_synced_at":"2025-08-17T00:49:20.551Z","repository_id":39578527,"created_at":"2025-08-17T00:49:20.551Z","updated_at":"2025-08-17T00:49:20.551Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291668,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ash","dsl","elixir","framework"],"created_at":"2024-08-01T05:00:38.295Z","updated_at":"2026-04-01T20:31:51.874Z","avatar_url":"https://github.com/ash-project.png","language":"Elixir","readme":"\u003c!--\nSPDX-FileCopyrightText: 2019 ash contributors \u003chttps://github.com/ash-project/ash/graphs/contributors\u003e\n\nSPDX-License-Identifier: MIT\n--\u003e\n\n![Logo](https://github.com/ash-project/ash/blob/main/logos/cropped-for-header-black-text.png?raw=true#gh-light-mode-only)\n![Logo](https://github.com/ash-project/ash/blob/main/logos/cropped-for-header-white-text.png?raw=true#gh-dark-mode-only)\n\n![Elixir CI](https://github.com/ash-project/ash/workflows/Ash%20CI/badge.svg)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/ash-project/ash/badge)](https://scorecard.dev/viewer/?uri=github.com/ash-project/ash)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/10686/badge)](https://www.bestpractices.dev/projects/10686)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Hex version badge](https://img.shields.io/hexpm/v/ash.svg)](https://hex.pm/packages/ash)\n[![Hexdocs badge](https://img.shields.io/badge/docs-hexdocs-purple)](https://hexdocs.pm/ash)\n[![REUSE status](https://api.reuse.software/badge/github.com/ash-project/ash)](https://api.reuse.software/info/github.com/ash-project/ash)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/ash-project/ash)\n\n# Ash Framework\n\nWelcome! Here you will find everything you need to know to get started with and use Ash. This documentation is best viewed on [hexdocs](https://hexdocs.pm/ash).\n\n## Dive In\n\n- [What is Ash?](documentation/topics/about_ash/what-is-ash.md)\n- [Getting Started Tutorial](documentation/tutorials/get-started.md)\n- [See the roadmap](https://github.com/orgs/ash-project/projects/3)\n\n## About the Documentation\n\nThe [Get Started Livebook](documentation/tutorials/get-started.md) **Tutorial** introduces you to the core concepts of Ash like resources, actions, and relationships. It’s a great place to start if you are a beginner.\n\n---\n\n[**Topics**](#topics) provide a high level overview of a specific concept or feature of Ash. These are **understanding-oriented**, and are perfect for discovering design patterns, features, and tools.\n\n---\n\n[**How-to**](#how-to) guides are **goal-oriented** recipes for accomplishing specific popular tasks. Browse to get an idea of how Ash works and what is possible with it.\n\n---\n\n[**Reference**](#reference) documentation is **information-oriented**, covering every Ash module, function, expression, and DSL. It is produced automatically from our source code. Use the sidebar and the top search\nbar to find relevant reference information. Place the text `dsl` before your search to quickly jump to a particular DSL — e.g. try comparing the results of searching for `name` with the results for `dsl name`.\n\n---\n\n## Topics\n\n### About Ash\n\n- [What is Ash?](documentation/topics/about_ash/what-is-ash.md)\n- [Our Design Principles](documentation/topics/about_ash/design-principles.md)\n- [Contributing to Ash](.github/CONTRIBUTING.md)\n- [Alternatives](documentation/topics/about_ash/alternatives.md)\n\n### Development\n\n- [Project Structure](documentation/topics/development/project-structure.md)\n- [Generators](documentation/topics/development/generators.md)\n- [Testing](documentation/topics/development/testing.md)\n- [Working with LLM Assistance](documentation/topics/development/working-with-llms.md)\n- [Development Utilities](documentation/topics/development/development-utilities.md)\n- [Backwards Compatibility Config](documentation/topics/development/backwards-compatibility-config.md)\n- [Upgrading to 3.0](documentation/topics/development/upgrading-to-3.0.md)\n- [Error Handling](documentation/topics/development/error-handling.md)\n\n### Resources\n\n- [Domains](documentation/topics/resources/domains.md)\n- [Attributes](documentation/topics/resources/attributes.md)\n- [Relationships](documentation/topics/resources/relationships.md)\n- [Calculations](documentation/topics/resources/calculations.md)\n- [Aggregates](documentation/topics/resources/aggregates.md)\n- [Code Interfaces](documentation/topics/resources/code-interfaces.md)\n- [Identities](documentation/topics/resources/identities.md)\n- [Validations](documentation/topics/resources/validations.md)\n- [Changes](documentation/topics/resources/changes.md)\n- [Preparations](documentation/topics/resources/preparations.md)\n- [Embedded Resources](documentation/topics/resources/embedded-resources.md)\n- [Notifiers](documentation/topics/resources/notifiers.md)\n\n### Actions\n\n- [Actions](documentation/topics/actions/actions.md)\n- [Read Actions](documentation/topics/actions/read-actions.md)\n- [Create Actions](documentation/topics/actions/create-actions.md)\n- [Update Actions](documentation/topics/actions/update-actions.md)\n- [Destroy Actions](documentation/topics/actions/destroy-actions.md)\n- [Generic Actions](documentation/topics/actions/generic-actions.md)\n- [Manual Actions](documentation/topics/actions/manual-actions.md)\n\n### Security\n\n- [Actors \u0026 Authorization](documentation/topics/security/actors-and-authorization.md)\n- [Sensitive Data](documentation/topics/security/sensitive-data.md)\n- [Policies](documentation/topics/security/policies.md)\n\n### Advanced\n\n- [Multi-step Actions](documentation/topics/advanced/multi-step-actions.md)\n- [Monitoring](documentation/topics/advanced/monitoring.md)\n- [Multitenancy](documentation/topics/advanced/multitenancy.md)\n- [Reactor](documentation/topics/advanced/reactor.md)\n- [Combination Queries](documentation/topics/advanced/combination-queries.md)\n- [Timeouts](documentation/topics/advanced/timeouts.md)\n- [Manual Installation](documentation/topics/advanced/manual-installation.md)\n- [Writing Extensions](documentation/topics/advanced/writing-extensions.md)\n\n---\n\n## How-to\n\n- [Write Queries](documentation/how-to/write-queries.livemd)\n- [Test Resources](documentation/how-to/test-resources.livemd)\n- [Authorize Access to Resources](documentation/how-to/authorize-access-to-resources.livemd)\n- [Encrypt Attributes](documentation/how-to/encrypt-attributes.livemd)\n- [Prevent Concurrent Writes](documentation/how-to/prevent-concurrent-writes.livemd)\n- [Wrap External APIs](documentation/how-to/wrap-external-apis.livemd)\n- [Define Polymorphic Relationships](documentation/how-to/polymorphic-relationships.livemd)\n\n---\n\n## Reference\n\n- [Ash.Resource DSL](documentation/dsls/DSL-Ash.Resource.md)\n- [Ash.Domain DSL](documentation/dsls/DSL-Ash.Domain.md)\n- [Ash.Reactor DSL](documentation/dsls/DSL-Ash.Reactor.md)\n- [Ash.Notifier.PubSub DSL](documentation/dsls/DSL-Ash.Notifier.PubSub.md)\n- [Ash.Policy.Authorizer DSL](documentation/dsls/DSL-Ash.Policy.Authorizer.md)\n- [Ash.DataLayer.Ets DSL](documentation/dsls/DSL-Ash.DataLayer.Ets.md)\n- [Ash.DataLayer.Mnesia DSL](documentation/dsls/DSL-Ash.DataLayer.Mnesia.md)\n- [Ash.TypedStruct DSL](documentation/dsls/DSL-Ash.TypedStruct.md)\n- [Glossary](documentation/topics/reference/glossary.md)\n- [Expressions](documentation/topics/reference/expressions.md)\n- For other reference documentation, see the sidebar \u0026 search bar\n\n## Packages\n\nThe Ash ecosystem consists of numerous packages, all of which have their own documentation. If you can't find something in this documentation, don't forget to search in any potentially relevant package.\n\n### Data Layers\n\n- [AshPostgres](https://hexdocs.pm/ash_postgres) | PostgreSQL data layer\n- [AshSqlite](https://hexdocs.pm/ash_sqlite) | SQLite data layer\n- [AshCsv](https://hexdocs.pm/ash_csv) | CSV data layer\n- [AshCubdb](https://hexdocs.pm/ash_cubdb) | CubDB data layer\n\n### API Extensions\n\n- [AshJsonApi](https://hexdocs.pm/ash_json_api) | JSON:API builder\n- [AshGraphql](https://hexdocs.pm/ash_graphql) | GraphQL builder\n\n### AI\n\n- [AshAI](https://hexdocs.pm/ash_ai) | Structured Outputs, MCP, Vectorization and more\n\n### Web\n\n- [AshPhoenix](https://hexdocs.pm/ash_phoenix) | Phoenix integrations\n- [AshAuthentication](https://hexdocs.pm/ash_authentication) | Authenticate users with password, OAuth, and more\n- [AshAuthenticationPhoenix](https://hexdocs.pm/ash_authentication_phoenix) | Integrations for AshAuthentication and Phoenix\n\n### Finance\n\n- [AshMoney](https://hexdocs.pm/ash_money) | A money data type for Ash\n- [AshDoubleEntry](https://hexdocs.pm/ash_double_entry) | A double entry system backed by Ash Resources\n\n### Resource Utilities\n\n- [AshOban](https://hexdocs.pm/ash_oban) | Background jobs and scheduled jobs for Ash, backed by Oban\n- [AshArchival](https://hexdocs.pm/ash_archival) | Archive resources instead of deleting them\n- [AshStateMachine](https://hexdocs.pm/ash_state_machine) | Create state machines for resources\n- [AshPaperTrail](https://hexdocs.pm/ash_paper_trail) | Keep a history of changes to resources\n- [AshCloak](https://hexdocs.pm/ash_cloak) | Encrypt attributes of a resource\n\n### Admin \u0026 Monitoring\n\n- [AshAdmin](https://hexdocs.pm/ash_admin) | A push-button admin interface\n- [AshAppsignal](https://hexdocs.pm/ash_appsignal) | Monitor your Ash resources with AppSignal\n\n### Testing\n\n- [Smokestack](https://hexdocs.pm/smokestack) | Declarative test factories for Ash resources\n\n### Examples \u0026 External Resources\n\n- [Ash Real World](https://github.com/team-alembic/realworld) | Ash + Phoenix LiveView codebase containing real world examples (CRUD, auth, advanced patterns, etc)\n","funding_links":["https://opencollective.com/ash-framework"],"categories":["Elixir","Frameworks","Official Resources"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fash-project%2Fash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fash-project%2Fash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fash-project%2Fash/lists"}