When comparing Gulp vs Lineman, the Slant community recommends Lineman for most people. In the question“What are the best workflow wrappers for front-end development?” Lineman is ranked 3rd while Gulp is ranked 5th. The most important reason people chose Lineman is:
Lineman integrates a powerful test runner - Test'em. By default it will test against PhantomJS and output in TAP13 format.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro Large plugin ecosystem
Currently gulp offers a selection of 1000+ plugins and it is growing rapidly.
Pro Focuses on code instead of configuration
This depends on your style, but gulp is closer to the code, the actual execution isn't hidden by multiple layers and it's much easier to customize the build system without writing bloated modules. This also brings rather small configuration files.
Pro Allows creating task dependencies
Any task can be set to have other tasks as dependencies. The dependencies are specified through piping streams, and tasks run concurrently if they do not block in dependencies.
Pro It is possible to use projects that use streams without plugins
Since Gulp just uses streams at its core, you don't actually need a plugin wrapper to use a project that uses streams. If you use this approach, the you don't even have to worry about plugin maintenance at all, and get the bleeding edge updates as soon as they come out even if the plugin hasn't been updated. It also means if a project happens to not have a plugin, you don't need to write a new one, you can just use it as is.
Pro Streaming build system makes it easier to apply code transformations
In gulp, it's easy to pipe multiple steps together which you commonly need with build systems. For example, you may need to compile the javascript source files, then package them together, and then minify it. The streaming system makes this much easier.
Additionally, it improves performance since all operations are done in memory (compared to I/O operations) and avoids the need of unnecessarily compiling files (compared to Grunt that has to compile all files even if just one has changed).
Pro Chaining API that's simple and elegant
In Gulp, the transforms are performed through chains which makes it easier to understand the order of operations, and easier to modify it.
Pro Concurrency allows for high-speed perfomance
Because streams in Gulp use pipes to establish dependency order, they are parallel by default without having to rely on plugins or hacks.
Pro Minimizes disk operations for improved performance
Because Gulp is built using streams, it can store intermediate transformations in memory and defer writing to disk until the very end. This improves performance by not requiring expensive blocking disk operations for task dependencies.
Pro The configuration file is easily readable
Gulp's configuration file is actually very readable because it's actual JavaScript instead of a large file of JSON objects. The entry barrier is very low for developers who have never used a task runner before and it's API is very simple, with only 4 methods.
Pro Gulp modules are usable without Gulp
Because Gulp is built on top of the streaming API, you don't actually need gulp to use them. This could be helpful if you want to re-use those modules outside of gulp, possibly for testing, and using the same modules would be more consistent.
Pro Gulp tasks run from terminal
Pro Comes with a full-featured test runner
Lineman integrates a powerful test runner - Test'em. By default it will test against PhantomJS and output in TAP13 format.
Pro Opinionated workflow
While Lineman is hands off when it comes to what you do on the client side, the workflow and tools used around it are opinionated, which means there's less to set up, the tools picked are fine tuned to work together, and you can get up and running faster without having to decide between dozens of tools. While it means less flexibility with the tools you use, it also means that advanced features are built in and available from the start, and you can focus on building the client side, without worrying about the tools around it.
Pro Intelligent defaults
Although Lineman is fully configurable, it comes with well tuned defaults and a built in scaffold so you can get up and running with advanced features quickly with things like continuous integration and live reloading with less or no configuration.
Pro Client-side framework agnostic
Lineman prides itself on avoiding assumptions on how things should be done and allows for greater freedom in tool choice. It generates a skeletal app, with no example code. Yet if you choose, you can get templates for Backbone, Ember, Angular and other frameworks.
Pro Provides project structure without code generation
Lineman is designed against code generation, which is a good thing as generated code requires more maintenance to keep library code in sync with the generated code, and is dangerous to use if you don't fully understand what the generated code is doing.
Pro Flexible build system with Grunt
While the tools Lineman uses are opinionated, the build process is not as it uses Grunt, so you can get the benefits of a well tuned workflow while still being able to use whatever compiled languages and build process you want. Also, since Lineman handles the tasks outside of compilation and file transformation for you, you can keep your gruntfile simpler and easier to maintain as it would be dedicated to just the build system, and not other task management.
Pro Update your tools without breaking the configuration
Pro Free and open source
Licensed under MIT.
Cons
Con Dead
Gulp is dead, hasn't been updated in 4 years.
Con Rapidly changing API
While it's good that the gulp maintainers want the api to be as good as possible, it comes at the expense of stability. The upcoming gulp 4.0 release has another update to the way dependency management works which will require everyone to update their build scripts.
It also makes it hard to look up information on best practices as the best practices keep changing, making a lot of the blog posts and questions about gulp out of date.
Con You need to know some limitations that are not very intuitive
There are some features in Gulp which may not be very intuitive, or that otherwise should have been the default features instead of having to implement them through arguments. For example, to keep the correct folder structure when you are copying a file, you have to add {base: "lib/"}
as an argument.
Con No incremental building
Con Not suited for big and complex apps
Writing gulpfile for complex app which consists of many source types is very cumbersome and flawy process. You'll know when you want to move to webpack.
Con By trying it do everything by itself it has become a monolithic software
Lineman tries to minimize the work that the developer has to do but in doing so, it has become a complicated monolith of a software built on top of Grunt tasks. It would be easier and more minimalistic and maintainable for a developer to just create the Gruntfile themselves.