Ranked in these QuestionsQuestion Ranking
Pro Configurations are easy to write
Grunt emphasizes configuration over code. As such grunt configurations are easy to write. Writing them does not require knowledge of streams, promises, concurrency, or asynchronous tasks to set up.
Pro Has tons of plugins
Pro Plugins configured out of the box
The default behaviors for most plugins is normally what you want, so if you just use a plugin without configuring it, it will work for most use cases.
Pro A GUI front-end via spock
Pro Choice of using it as a config file or writing your own functions
Pro Grunt v1.0 alpha uses Orchestrator for maximum concurrency
Grunt version 1 alpha, aka grunt-next, the upcoming next major release of Grunt, uses Orchestrator to sequence and execute tasks and dependencies with maximum concurrency, potentially bringing it up to speed with Gulp in term of performance.
Pro An API that makes writing and using of plugins extremely easy
The API is built in such a way that if you write a Grunt task that is useful for someone else out there or would be useful for future projects, it can be easily made into a grunt plugin and then shared using npm.
Pro Shell commands inside Grunt
There is a Grunt plugin called grunt-exec which allows developers to execute shell commands inside their Grunt files. This is extremely easy if a developer is developing only in Node and constantly getting out of Node environment to run something like a git command can become frustrating.
Con Large bloated configuration files
To configure Grunt, developers need to basically write large files and configure JSON objects. While it's very powerful, the sheer complexity of it's configuration file may be a large obstacle for newcomers and developers that have not used any automation tools before. This may push them to search for simpler alternatives.
Con The need to track creation/movement of files
Debugging and augmenting grunt pipelines are much harder than other build systems that clearly show the pipelines in the code.
Grunt works on files so you must track where each task puts files and try and intercept that in a task if you want to add something in the middle of a build pipeline.
Con Grunt compatibility issues
Changes in different versions in grunt are not always backwards-compatible.