freshcrate
Skin:/
Home > Frameworks > igniter

igniter

A code generation and project patching framework.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

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.8.3 ### Bug Fixes: * ensure verbose is passed all the way down by Zach Daniel * properly check `igniter.rms` in `--check` by Zach Daniel * resolve Elixir 1.20 type-check warnings (#387) by Gilbert ### Improvements: * add `Igniter.Libs.Phoenix.web_module_for_router/2` (#393) by James Harton * update to Elixir 1.20 (#391) by ESmithByui * direct users to format command for unless refactor by Zach Daniel High7/26/2026
v0.8.2 ### Bug Fixes: * handle empty list in `configures_key` by Zach Daniel ### Improvements: * Add scoped configure/6 options for runtime env blocks (#385) by RhettPoole * Send issue output to stderr (#384) by daphnerosepurcell * allow remapping modules to their file locations w/ regexes (#378) by aheiner2001 * add --except to igniter.upgrade --all (#383) by febarnett3 * intercept --help for igniter.new and other tasks. (#382) by CaydenLords High6/24/2026
v0.8.1 ### Improvements: * adding hex confirmation for igniter.install (#379) by ESmithByui * accept content-checking function in assert_creates/3 (#291) by Lars Wikman High6/2/2026
v0.8.0 ### Features: * add Igniter.Code.Pattern for ExAST-powered pattern matching (#375) by Danila Poyarkov ### Bug Fixes: * tolerate 3-tuple dep entries in recursively_compose_schema (#372) by Matt Pruitt High5/9/2026
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

saas-builderAI-native SaaS framework that builds full-stack apps using autonomous AI agentsmain@2026-07-26
alefGenerate fully-typed, lint-clean language bindings for Rust libraries across 11 languagesv0.45.0
maestroThe Maestro App Factory: a highly-opinionated multi-agent orchestration tool for app development that emulates the workflow of high-functioning human development teams using AI agentsv1.6.0
tsoa-nextBuild type-safe OpenAPI APIs for Node.js using TypeScript decorators with automatic spec generation and validationtsoa-next@8.3.0
cadwynProduction-ready community-driven modern Stripe-like API versioning in FastAPI7.1.1

More in Frameworks

sglangSGLang is a fast serving framework for large language models and vision language models.
onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator
elizaAutonomous agents for everyone
bamlThe AI framework that adds the engineering to prompt engineering (Python/TS/Ruby/Java/C#/Rust/Go compatible)