Hello Drome!

Today is the day when I can introduce my first open source project: Drome — JavaScript task runner. You may ask, what about Gulp, Grunt or good old NPM scripts? Well… Drome is my answer.

Minimal abstraction

I’m developer and I’m lazy guy (that’s why I started new project). Maybe I like learning new things but if new tool push me to learn new abstraction especially for this one usage, I’m discouraged.

Grunt uses configs, Gulp uses streams. When you try to switch between them, you have to change also abstraction for your tasks. Of course you can use npm scripts but I feel that sometimes we need something more that simple scripts which allows only limited conditionality. That’s why Drome uses command line statements (JavaScript string type) and JavaScript functions for definition of tasks.

module.exports = () => {
return {
tasks: {
commandLineTask: "node -v",
functionTask: () => console.log('My sync task')
}
}
}

Functions or command line are not new for us — JavaScript developers. We know they well. We know how to play with them. Config created by JS function also allows to use environment variables and other stuff to run tasks conditionaly.

Sky is the limit! Oh… We are in a rocket so… There is no limit.

Zero dependencies

I love NodeJS projects but one thing scary me — projects size bloat. It’s of course related with dependencies used by specific project but those dependencies have their own dependencies which have dependencies etc…

When I started work on Drome, one of my goals was creating tool without any dependency which is not strictly related with the project. I did that — for now Drome size is something around 10kb. Of course the task runner is not stable yet (at this moment in NPM you can see 0.3.0 version with all main functionality) and size of package may change but still — I believe thatDrome will be the smaller and still powerful between old players like Grunt or Gulp.

What’s more… Project without dependencies in some way means safety. Do you remember that big issue caused by developer who removed his package from NPM repository? Yeah… Drome is safe when it comes to situations like that. Also, project don’t have to wait for dependencies update or fix.

Plugins? No thanks.

What of the most problematic part of work with Gulp or Grunt is plugin system. Not really plugin system but the way plugins are updated.

When you are working with Grunt or Gulp (or other tool based on plugins), then for specific task you have to install package responsible for that (e.g. CSS preprocessor) and plugins which will allow you to do specific job in Grunt/Gulp way.

It’s not a bad thing at all but when you try to update task runner, then sometimes you have to wait also for plugin update to fit new part of API or something. Also when you need new version of tool, then also you probably need to wait a little bit for update of the plugin. It might be annoying.

That’s why Drome doesn’t have plugin system. Every time when you need to to use some tool, lets say… node-sass, then you need to only run command line task:

/*...*/
tasks: {
sass: "node-sass style.scss"
}
/*...*/

Or define task by JavaScript function and node-sass package:

/*...*/
tasks: {
sass: next => {
sass.render({
file: "style.scss",
[, options..]
}, function(err, result) {
next();
});
}
}
/*...*/

Every time when you need to upgrade some of your tools, you can do it without fear of updating Drome — task runner should be only platform to run your task.

Drome? What’s that mean?

I tried to find short and catchy name for this project. After few days of looking into names related with animals, professions or people names, I started to search between word related with space missions.

I thought that rocket or space shuttle could be in logo of project. Somewhere in dictionary I found “cosmodrome”. After that I’ve checked what “-drome” appendix mean in Wiktionary:

From Ancient Greek δρόμος (drómos, “running; racetrack”).

Cosmo- is hidden inspace shuttle icon and “-dromo” appendix is project name. That’s it!

What’s next?

At this moment I’m working on stabiliby, usability and documentation of the Drome. There are lots of things to do like logs or check if the task runner can work with CI. It’s my first serious open source project, so I believe that there are also features which I didn’t realize that are “must have” at this moment.

I’m open to discussion about features and Drome’s way of development. That why I’d like to ask you about help, contribution and click star button for this project on GitHub.

I’d really like to achieve first stable version in next few months.