Open-source project
itamae-kitchen/itamae avatar
itamae-kitchen/itamae

Itamae is a Chef-shaped configuration tool with most of Chef removed

Configuration management tool inspired by Chef, but simpler and lightweight. Formerly known as Lightchef.

1,134 stars117 forksRubyMIT

At a glance

What is it?
Itamae is a Ruby configuration management tool inspired by Chef, with a DSL that is deliberately not Chef compatible, a recipes-only scope, and idempotent resources. A recipe installs a package and enables a service in a dozen lines, and the same file is applied to a local machine, to a host over SSH, or to a Vagrant VM.
Who is it for?
Itamae is a good fit for a team that likes the Chef shape, wants idempotent resources rather than a pile of shell scripts, and does not need attributes, environments or the wider Chef ecosystem, since the DSL is small enough to learn in an afternoon and the recipes are readable.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 19 days ago.
What is it written in?
Mainly Ruby, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 25, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The concept is four lines, and they are the whole pitch

Itamae is described as a simple and lightweight configuration management tool inspired by Chef, and the concept section is where the design is stated. There is a Chef-like DSL, but not compatible with Chef. It is simpler and lighter weight than Chef. It has only recipes. And it is idempotent. Each of those is a subtraction rather than an addition, and taken together they describe a tool for a specific situation, a team that has looked at Chef, liked the model, and found the full tool heavy. The word lightweight is doing real work in that list, because Chef's surface area is where most of its complexity lives, and dropping the parts a small team does not use is the whole design. The project is also worth noting for its history. It was formerly known as Lightchef, it lives in the itamae-kitchen organisation alongside the ecosystem tools, and it is MIT licensed with a LICENSE.txt at the root, with a gem published as itamae and the documentation in a GitHub wiki rather than in the repository.

A recipe is a list of resources with actions

The DSL borrows Chef's shape, and the smallest useful example is short. A recipe file named recipe.rb contains resources, each with a name, a type and an action:

ruby
package 'nginx' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
end

The package resource installs a package, and the service resource with an array of actions enables the service at boot and starts it now, which shows that a resource can take several actions in one declaration. The block form is what gives the DSL its consistency, because every resource is a name, a type, a block and an action list, and there is nowhere for a recipe to drift into a bespoke shape. The idempotence claim then means something specific, that running the same recipe twice leaves the system in the same state, which is the property that lets a configuration tool be re-run on a schedule without fear. The user facing output reflects the same idea, since it reports the action and the state transition, and the log shows the transition, such as installed changing from 'false' to 'true'.

One file, three targets

Applying a recipe is a single command, and the target changes the transport rather than the recipe. For a local machine:

bash
itamae local recipe.rb

For a remote host over SSH:

bash
itamae ssh --host host001.example.jp recipe.rb

And for a Vagrant VM, where the host is the Vagrant machine rather than a hostname:

bash
itamae ssh --vagrant --host vm_name recipe.rb

The run output is deliberately plain, and it reads like a log of what changed rather than a stack trace:

text
 INFO : Starting Itamae...
 INFO : Recipe: /home/user/recipe.rb
 INFO :    package[nginx]
 INFO :       action: install
 INFO :          installed will change from 'false' to 'true'
 INFO :    service[nginx]
 INFO :       action: enable
 INFO :       action: start

The fact that the same recipe file is used for all three cases is the design that matters. A configuration tool that needs one recipe for a laptop and a different one for a server is a tool that has failed at its job, and the local, ssh and vagrant modes are the same program reaching the machine three different ways.

Testing means Vagrant, and that is the heaviest part

The test instructions are short, and they name their requirement. Running the tests requires Vagrant, and the command is bundle exec rake spec, with the spec/ directory at the root and a .rspec file configuring the RSpec run, and a Rakefile providing the task. That requirement is worth understanding before you commit to the tool, because it means the feedback loop is not a unit test. A configuration tool's behaviour is the state of a machine after a recipe runs, so the honest way to test it is to provision a machine, apply the recipe, and assert on the result, which is what a Vagrant-based suite does. The cost is that every change is a virtual machine lifecycle, and a CI job that runs the suite is slower and heavier than one running unit tests. The repository layout is otherwise conventional Ruby, with a Gemfile, an itamae.gemspec, a bin/ directory for the executable, lib/ for the code, tasks/ for Rake tasks, a CHANGELOG.md and a .github/ directory with the test workflow.

The ecosystem around it, and the Japanese lineage

The project is part of a wider family, and the organisation name says so, itamae-kitchen, which also hosts the logos repository. The documentation lives in the Itamae Wiki rather than in a docs/ directory, and there is a Slack team for support and discussion, plus the usual issue tracker and a change log linked from the README. The history is worth knowing about because it explains the audience. The presentations and articles listed in the README are Japanese, including a talk on infrastructure as code from the Japanese community, a Cookpad developer blog post on server provisioning, and a multi-part series in the Japanese technical press. That tells you where the tool has been used and who maintains it, and it explains the small scope, because a tool built by one team for its own fleet has no reason to grow a compatibility layer with the whole of Chef. The releases reflect the same steady pace, with v1.14.2 on 2025-12-20 and v1.15.0 on 2026-08-07, and the last push was on 2026-10-06.

When to pick it and when not to

The case for Itamae is a team that has decided against Chef but not against the model. The resources are declarative, the run is idempotent, the output tells you what changed, and there is a single file that works on a laptop, a server and a Vagrant box. The case against is when your fleet has structure that recipes cannot express, since the only-recipes scope is a deliberate reduction. The DSL is also not Chef compatible, so an existing Chef cookbook does not port, and if your team already knows Chef you have to weigh the value of the smaller tool against the cost of the new syntax. The third case is where the platform already has a solution, because a single team with ten servers is often better served by a small shell script, and Itamae earns its keep when the same recipe has to be applied to many machines in a uniform way. Its portability comes from Ruby, so it runs wherever Ruby runs, and its output format is plain enough to parse in a pipeline.

Editorial conclusion

Itamae is a good fit for a team that likes the Chef shape, wants idempotent resources rather than a pile of shell scripts, and does not need attributes, environments or the wider Chef ecosystem, since the DSL is small enough to learn in an afternoon and the recipes are readable. It is the wrong tool for a large fleet with a complicated node taxonomy, since the recipes-only scope is a deliberate reduction, and the wrong tool if you need Chef compatibility, which the project explicitly does not offer. Before adopting it, read the wiki for the resource list rather than assuming Chef's, check that the resources you need exist, and remember that the test suite requires Vagrant, so the feedback loop in CI is heavier than a unit test would be.

Frequently asked questions

Is Itamae compatible with Chef?

No. The concept section states that Itamae has a Chef-like DSL but not compatible with Chef, and that it is simpler and lighter weight, with only recipes and idempotence. Existing Chef cookbooks do not port directly.

How do I install and run Itamae?

Install the gem with gem install itamae, then apply a recipe with itamae local recipe.rb for a local machine, itamae ssh --host host001.example.jp recipe.rb for a remote host over SSH, or itamae ssh --vagrant --host vm_name recipe.rb for a Vagrant VM.

What do Itamae recipes look like?

They are Ruby files containing resources, each with a name, a type and an action, such as a package resource with action :install and a service resource with action [:enable, :start]. The run prints the action and the state transition for each resource.

How do I run the Itamae test suite?

The requirement is Vagrant, and the command is bundle exec rake spec, with the specs in the spec/ directory and the RSpec configuration in .rspec. Because the tool's behaviour is the state of a machine after a recipe, the tests are heavier than unit tests.

Official sources

  1. itamae-kitchen/itamae on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/itamae-kitchen-itamae.svg)](https://hysenlabs.com/projects/itamae-kitchen-itamae)

Was this useful?