# `PhoenixKit.Install.MissingIgniter`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v2.13.8/lib/phoenix_kit/install/missing_igniter.ex#L1)

Stand-in for the `mix phoenix_kit.*` tasks that cannot exist without igniter.

Igniter is an optional dependency (see `mix.exs`), and every task that drives
it is wrapped in `if Code.ensure_loaded?(Igniter.Mix.Task)`. Without a
fallback the guard's `else` branch defines nothing at all, so the task simply
vanishes and Mix reports:

    ** (Mix) The task "phoenix_kit.update" could not be found

which names neither PhoenixKit nor igniter, and leaves a host stranded on an
old schema with nothing to search for. This module defines a task that exists
purely to explain the situation and print the one line to add.

## Why the dep is optional at all

A stock `mix phx.new` app declares `{:igniter, "~> 0.6", only: [:dev, :test]}`.
A non-optional dep here resolves for all environments, and Mix refuses to
converge the two — which broke `mix igniter.install phoenix_kit` on every
freshly generated project. Optional means the host's own declaration wins.

The cost is this case: a host that never declared igniter itself was getting
it transitively, and an upgrade drops it. That is what the message covers.

# `__using__`
*macro* 

Defines the body of a stand-in task. The caller supplies its own
`@moduledoc` — generating one from here would hide it from static analysis.

# `message`

```elixir
@spec message(String.t()) :: String.t()
```

The guidance printed when a task is invoked without igniter available.

---

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