Hammer your code into shape

About

Build tools that require a lot of explicit/declarative instructions are distracting. Anvil is a build system with an extension-based architecture that prefers convention over configuration. There are a lot of great ways to add new features or change almost any behavior as needed.

This Site

This site is a group effort to document the features and some of the extensions to Anvil. The source to the site itself is hosted here. If you so desire, you can submit pull requests to add documentation for your extensions or for things about the system you'd like to see covered.

Basic Features

All parts of the build process are implemented as extensions (specifically as build plugins). Some extensions ship along with anvil's source so that it can do _something_ out of the box. Most of the interesting features will likely be extensions that you install.

A baseline install can do the following:

Frequently Asked Questions

Q. How is this different from Grunt?

A. Vastly, they are very different approaches to building projects.

Let us count the ways:

Imperative vs. Declarative

Convention over Configuration

Extensions

Another way to think about it is; Grunt can technically do anything but requires more effort to get common things done. Anvil's conventions and concepts satisfy a lot of common use cases with little effort and also provide several ways to extend the system.

Q. How is this different from Yeoman?

A. Yeoman is far more opinionated.

Yeoman and Anvil are similar in that they pull together many excellent open source libraries in order to help you with your project workflow. Yeoman is different in that it is very opinionated and has been built to use specific libraries for specific features; the end result is a very polished user experience but it comes at the expense of tight coupling to dependencies. Anvil has been designed to be so flexible that you can easily replace any behavior or feature with your own extension using a different set of open source libraries and get exactly the behavior you want. Feel like something's missing? You can add entirely new features and abilities (or even new types of extensions) to Anvil.

Q. Why does Anvil install globally?

A. Convenience, simplicity, speed.

Less setup effort on a per project basis means less time fiddling with a build system and more time spent on your project. Most of Anvil's extensions that aren't considered "core" to the build are opt-in or non-intrusive so you don't have to worry about a globally installed extension ruining your day. An additional advantage of a global plugins is that Anvil can manage keeping them up-to-date with one simple console command: anvil update. No need to worry about updating individual extensions on a per project basis.

Contributors

Special thanks to the following individuals who have contributed source code or ideas to help make anvil less buggy and more useful: