# Why NAnt?

[This is preliminary documentation and subject to change.]

NAnt is different. Instead of a model where it is extended with shell-based commands, NAnt is extended using task classes. Instead of writing shell commands, the configuration files are XML-based, calling out a target tree where various tasks get executed. Each task is run by an object that implements a particular Task interface.

Granted, this removes some of the expressive power that is inherent in being able to construct a shell command such as 'find . -name foo -exec rm {}', but it gives you the ability to be cross-platform - to work anywhere and everywhere. And hey, if you really need to execute a shell command, NAnt has an `<exec>` task that allows different commands to be executed based on the OS it is executing on.

For more information on why Ant and NAnt were developed read the Ant Introduction.