# `Ash.Extension`
[🔗](https://github.com/ash-project/ash/blob/v3.27.8/lib/ash/extension.ex#L5)

A behavior of additional callbacks that extensions can implement, specific to Ash.

It is not necessary to adopt this behavior, but it is recommended to do so if you want to define these
functions on your extension. These functions are invoked when their relevant Mix task is run.

# `argv`

```elixir
@type argv() :: [String.t()]
```

# `igniter`

```elixir
@type igniter() :: Igniter.t()
```

# `codegen`
*optional* 

```elixir
@callback codegen(argv()) :: term()
```

# `install`
*optional* 

```elixir
@callback install(
  igniter(),
  module :: module(),
  type :: Ash.Resource.t() | Ash.Domain.t(),
  location :: String.t(),
  argv()
) :: igniter()
```

# `migrate`
*optional* 

```elixir
@callback migrate(argv()) :: term()
```

# `reset`
*optional* 

```elixir
@callback reset(argv()) :: term()
```

# `rollback`
*optional* 

```elixir
@callback rollback(argv()) :: term()
```

# `setup`
*optional* 

```elixir
@callback setup(argv()) :: term()
```

# `tear_down`
*optional* 

```elixir
@callback tear_down(argv()) :: term()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
