freshcrate
Home > Frameworks > igniter

igniter

A code generation and project patching framework.

Description

A code generation and project patching framework.

README

Logo Light

Logo Dark

CI License: MIT Hex version badge Hexdocs badge REUSE status Ask DeepWiki

Igniter

Igniter is a code generation and project patching framework.

There are two audiences for Igniter:

  • End-users:
    • Provides tasks like mix igniter.install to automatically add dependencies to your project
    • Provides upgraders to upgrade your deps and apply codemods at the same time
    • Provides refactors like mix igniter.refactor.rename_function to refactor your code automatically
  • Library authors and platform teams: Igniter is a toolkit for writing smarter generators that can semantically create and modify existing files in end-user's projects (e.g. codemods)

For end-users

Installers

Igniter provides mix igniter.install, which will automatically add the dependency to your mix.exs and then run that library's installer if it has one.

Upgraders

The mix igniter.upgrade mix task is a drop-in replacement for mix deps.update but it will additionally run any upgrade patchers defined in the target package (if there are any).

See the upgrades guide guide for more.

Refactors

In addition to providing tools for library authors to patch your code, common operations are available to use as needed.

  • mix igniter.refactor.rename_function - Rename a function in your application, along with all references to it. Optionally it can also mark the previous function as deprecated.

Others

  • mix igniter.update_gettext - Use this to update gettext if your version of gettext is lower than 0.26.1 and you are seeing a compile warning about gettext backends.

Installation

Igniter requires Elixir 1.15+, but 1.17+ is recommended for full compatibility.

Standard Installation for end-users

Add Igniter to an existing elixir project by adding it to your dependencies in mix.exs:

{:igniter, "~> 0.6", only: [:dev, :test]}

Note: If you only want to use mix igniter.install to add dependencies to your project then you can install the archive instead of adding Igniter to your project.

Installing globally via an archive

First, install the archive:

mix archive.install hex igniter_new

Then you can run mix igniter.new to generate a new elixir project

mix igniter.new app_name --install ash

Creating a new mix project using Igniter

If you want to create a new mix project that uses ash and ecto you can run a command like:

mix igniter.new app_name --install ash,ecto

You can also combine an Igniter install command with existing project generators (e.g. mix phx.new) by specifying the mix task name with the --with flag. If you want to pass arguments to the existing project generator/task you can pass them with --with-args:

mix igniter.new app_name --install ash --with phx.new --with-args="--no-ecto --no-html"

For library authors and platform teams

Igniter is a toolkit for writing smarter generators that can semantically create and modify existing files.

Installing for library authors

For library authors, add Igniter to your mix.exs with optional: true:

{:igniter, "~> 0.6", optional: true}

optional: true ensures that end users can install as outlined above, and :igniter will not be included in their production application.

Patterns

Mix tasks built with Igniter are both individually callable, and composable. This means that tasks can call each other, and also end-users can create and customize their own generators composing existing tasks.

Installers

Igniter will look for a task called <your_package>.install when the user runs mix igniter.install <your_package>, and will run it after installing and fetching dependencies.

To create your installer, use mix igniter.gen.task <your_package>.install

Generators/Patchers

Generators created with Igniter can be run like any other mix task, or composed together. For example, lets say that you wanted to have your own Ash.Resource generator, that starts with the default mix ash.gen.resource task, but then adds or modifies additional files:

To create your generator, use mix igniter.gen.task <your_package>.task.name

# in lib/mix/tasks/my_app.gen.resource.ex
defmodule Mix.Tasks.MyApp.Gen.Resource do
  use Igniter.Mix.Task

  @impl Igniter.Mix.Task
  def igniter(igniter) do
    [resource | _] = igniter.args.argv

    resource = Igniter.Code.Module.parse(resource)
    my_special_thing = Module.concat([resource, SpecialThing])
    location = Igniter.Code.Module.proper_location(my_special_thing)

    igniter
    |> Igniter.compose_task("ash.gen.resource", igniter.args.argv)
    |> Igniter.Project.Module.create_module(my_special_thing, """
      # this is the special thing for #{inspect()}
    """)
  end
end

Upgrading to 0.4.x

You may notice an issue running mix igniter.upgrade if you are using 0.3.x versions. you must manually upgrade Igniter (by editing your mix.exs file or running mix deps.update) to a version greater than or equal to 0.3.78 before running mix igniter.upgrade. A problem was discovered with the process of Igniter upgrading itself or one of its dependencies.

In any case where Igniter must both download and compile a new version of itself, it will exit and print instructions with a command you can run to complete the upgrade. For example:

mix igniter.apply_upgrades igniter:0.4.0:0.5.0 package:0.1.3:0.1.4

Release History

VersionChangesUrgencyDate
v0.7.9 ### Bug Fixes: * use beam index not private manifest to initialize module index by Zach Daniel Medium4/11/2026
v0.7.8 ### Improvements: * check compiled manifest and simple defmodule patterns early by Zach Daniel * add and manage a module index cache by Zach Daniel Medium4/11/2026
v0.7.7 ### Bug Fixes: * handle `children = [...] ++ expr` in `add_new_child` (#368) by James Harton Medium3/24/2026
v0.7.6 ### Bug Fixes: * run tasks with `Mix.shell().cmd/1` to avoid state issues by Zach Daniel Low3/15/2026
v0.7.5 Low3/15/2026
v0.7.4 ### Improvements: * error messages for task compilation (#364) by celeste-wahlquist Low3/10/2026
v0.7.3 ### Improvements: * error messages for task compilation (#364) by celeste-wahlquist Low3/4/2026
v0.7.2 ### Bug Fixes: * don't fail on missing `.formatter.exs` by Zach Daniel Low1/28/2026
v0.7.1 ### Improvements: * Add more context to umbrella error message (#358) by José Valim Low1/21/2026
v0.7.0 ### Features: * Add support for SiteEncrypt.Phoenix.Endpoint detection (#339) by Herman verschooten ### Bug Fixes: * `put_in_map`/`set_map_key` not setting keys properly (#348) by Nick Krichevsky * don't pass `--no-git` onto installers by Zach Daniel * `modify_config_code` twice with keyword values (#332) by grzuy Low11/5/2025
v0.6.30 ### Bug Fixes: * don't silently ignore certain errors during spinners by Zach Daniel * don't display "temporarily adding igniter" when we aren't by Zach Daniel Low9/25/2025
v0.6.25 ### Bug Fixes: * remove another enumeration of the rewrite by Zach Daniel Low7/23/2025
v0.6.24 ### Bug Fixes: * iterate over sources, not rewrite, in one more place by Zach Daniel Low7/23/2025
v0.6.23 ### Bug Fixes: * remove case where we iterate a rewrite by Zach Daniel Low7/23/2025
v0.6.22 ### Bug Fixes: * handle `:error` coming from alias updater by Zach Daniel * add :error case clause in modify_existing_alias by Zach Daniel Low7/22/2025
v0.6.21 ### Bug Fixes: * properly detect deps location by Zach Daniel ### Improvements: * don't enumerate `igniter.rewrite` by Zach Daniel Low7/19/2025
v0.6.20 ### Bug Fixes: * handle non-tty inputs on tasks that aren't installers by Zach Daniel ### Improvements: * add a nicer error on `:eof` response from `yes?` by Zach Daniel Low7/18/2025
v0.6.15 ### Bug Fixes: * vendor `Path.relative_to` to get 1.18.4 behavior by Zach Daniel * assume Kernel is imported in older Elixir versions by Zach Daniel Low7/13/2025
v0.6.14 ### Bug Fixes: * a slew of fixes for config, code modification, deps addition, keywords by Zach Daniel Low7/9/2025
v0.6.12 ### Bug Fixes: * properly encode values added to mix project by Zach Daniel Low7/9/2025
v0.6.11 ### Improvements: * when stdin is not a tyy, treat that as --yes by Zach Daniel Low7/6/2025
v0.6.10 ### Improvements: * make `Igniter.exists?` support directories by Zach Daniel Low7/2/2025
v0.6.9 ### Improvements: * Implement removal of configuration (#309) by Benjamin Milde * add `required?` option to `Igniter.update_elixir_file/3` by Benjamin Milde Low6/25/2025

Dependencies & License Audit

Loading dependencies...

Similar Packages

cadwynProduction-ready community-driven modern Stripe-like API versioning in FastAPI6.2.2
alefGenerate fully-typed, lint-clean language bindings for Rust libraries across 11 languagesv0.5.1
claudekit🛠️ Accelerate your Python and JavaScript development with Claude Kit's toolkit, featuring specialized agents, slash commands, and advanced context management.main@2026-04-21
claude-code-agents-wizard-v2🧠 Orchestrate complex software projects with Claude Code's specialized agents for streamlined management and mandatory human oversight.main@2026-04-21
workspace-architectWorkspace Architect is a zero-friction CLI tool that provides curated collections of specialized agents, instructions, and prompts to supercharge your GitHub Copilot experience.main@2026-04-20