{"id":13468339,"url":"https://github.com/lukeed/taskr","last_synced_at":"2025-05-14T06:13:53.867Z","repository":{"id":34381062,"uuid":"38307496","full_name":"lukeed/taskr","owner":"lukeed","description":"A fast, concurrency-focused task automation tool.","archived":false,"fork":false,"pushed_at":"2020-12-21T17:09:00.000Z","size":1173,"stargazers_count":2540,"open_issues_count":15,"forks_count":72,"subscribers_count":54,"default_branch":"master","last_synced_at":"2025-05-12T21:47:57.951Z","etag":null,"topics":["bluebird","coroutines","generators","lightweight","nodejs","parallel","performance","task-runner","tasks"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukeed.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-30T12:19:00.000Z","updated_at":"2025-05-08T15:22:24.000Z","dependencies_parsed_at":"2022-09-18T15:21:08.838Z","dependency_job_id":null,"html_url":"https://github.com/lukeed/taskr","commit_stats":null,"previous_names":["brj/fly"],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeed%2Ftaskr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeed%2Ftaskr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeed%2Ftaskr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukeed%2Ftaskr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukeed","download_url":"https://codeload.github.com/lukeed/taskr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254057707,"owners_count":22007545,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluebird","coroutines","generators","lightweight","nodejs","parallel","performance","task-runner","tasks"],"created_at":"2024-07-31T15:01:09.067Z","updated_at":"2025-05-14T06:13:53.572Z","avatar_url":"https://github.com/lukeed.png","language":"JavaScript","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"/logo.png\" alt=\"Taskr\" width=\"128\"\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003eTaskr\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://npmjs.org/package/taskr\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/v/taskr.svg\" alt=\"NPM Version\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/lukeed/taskr\"\u003e\n    \u003cimg src=\"https://img.shields.io/travis/lukeed/taskr.svg\" alt=\"TravisCI\"/\u003e\n  \u003c/a\u003e\n  \u003c!-- \u003ca href=\"https://codecov.io/github/lukeed/taskr\"\u003e --\u003e\n    \u003c!-- \u003cimg src=\"https://img.shields.io/codecov/c/github/lukeed/taskr/master.svg\" alt=\"Test Coverage\"/\u003e --\u003e\n  \u003c!-- \u003c/a\u003e --\u003e\n  \u003ca href=\"https://ci.appveyor.com/project/lukeed/taskr/branch/master\"\u003e\n    \u003cimg src=\"https://ci.appveyor.com/api/projects/status/jjw7gor0edirylu5/branch/master?svg=true\" alt=\"AppVeyor\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://npmjs.org/package/taskr\"\u003e\n    \u003cimg src=\"https://img.shields.io/npm/dm/taskr.svg\" alt=\"NPM Downloads\"/\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003eA fast, concurrency-focused task runner.\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\u003cstrong\u003eFasten your seatbelt. :rocket:\u003c/strong\u003e\u003c/div\u003e\n\n\u003cbr /\u003e\n\nTaskr is a highly performant task runner, much like Gulp or Grunt, but written with concurrency in mind. With Taskr, everything is a [coroutine](https://medium.com/@tjholowaychuk/callbacks-vs-coroutines-174f1fe66127#.vpryf5tyb), which allows for cascading and composable tasks; but unlike Gulp, it's not limited to the stream metaphor.\n\nTaskr is extremely extensible, so _anything_ can be a task. Our core system will accept whatever you throw at it, resulting in a modular system of reusable plugins and tasks, connected by a declarative [`taskfile.js`](https://github.com/lukeed/taskr/tree/master/packages/taskr#taskfiles) that's easy to read.\n\n```js\nconst src = 'src/{admin,client}';\nconst dist = 'build';\n\nmodule.exports = {\n  *lint(task) {\n    yield task.source(`${src}/*.js`).xo({ esnext:true });\n  },\n  *scripts(task) {\n    yield task.source(`${src}/*.js`).babel({ presets:['es2015'] }).target(`${dist}/js`);\n  },\n  *styles(task) {\n    yield task.source(`${src}/*.sass`).sass().autoprefixer().target(`${dist}/css`);\n  },\n  *build(task) {\n    yield task.parallel(['lint', 'scripts', 'styles']);\n  }\n}\n```\n\n## History\n\n\u003e **TL;DR** This is the continuation of and successor to [Fly](https://www.npmjs.com/package/fly)!\n\nFly's original author, [Jorge Bucaran](https://github.com/JorgeBucaran), has shifted focus to other exciting projects. Before leaving, he chose to guarantee Fly's future by transferring the project to [Luke Edwards](https://github.com/lukeed), who was one of the first and most enthused contributors.\n\nTo reflect this milestone, Fly has been renamed to Taskr and has a stable, exciting future ahead! :tada:\n\nFor existing Fly users, `taskr@1.0.x` is equivalent to `fly@2.0.6` -- with a few exceptions:\n\n1. The `flyfile.js` has been renamed to `taskfile.js`;\n2. The `fly` key inside `package.json` has been renamed to `taskr`. (See [Local Plugins](#https://github.com/lukeed/taskr/tree/master/packages/taskr#local-plugins))\n\nAt this point, the Fly \u0026 [Taskr ecosystems](#packages) are fully interchangeable, which means that you can install `taskr` and use any `fly-*` or `taskr-*` plugins of your choosing. That said, most plugins have _already_ been ported over to the new namespace!\n\nLastly, Taskr will maintain a list of [official plugins](#official-packages). Don't forget to check 'em out!\n\n\n## Core Features\n\n- **lightweight:** with `6` dependencies, installation takes seconds\n- **minimal API:** Taskr only exposes a couple methods, but they're everything you'll ever need\n- **performant:** because of [Bluebird](https://github.com/petkaantonov/bluebird/), creating and running Tasks are quick and inexpensive\n- **cascadable:** sequential Task chains can cascade their return values, becoming the next Task's argument\n- **asynchronous:** concurrent Task chains run without side effects \u0026 can be `yield`ed consistently\n- **composable:** chain APIs and Tasks directly; say goodbye to `pipe()` x 100!\n- **modular:** easily share or export individual Tasks or Plugins for later use\n- **stable:** requires Node `\u003e= 4.6` to run (LTS is `6.11`)\n\n## Docs\n\nThe main documentation can be found in [`taskr`](/packages/taskr), our core package.\n\nEach `@taskr/*` or `taskr-*` plugin will also include its own documentation, too!\n\n## Packages\n\nThe Taskr repo is managed as a monorepo that is composed of its many _official_ packages.\n\n\u003e **Important:** The core package is `taskr` and must be installed before using any additional plugins.\n\n### Official Packages\n\nThese npm packages are officially released and maintained by the Taskr team.\n\nIf you can't find what you need, be sure to check out the [community list](#community-plugins) or browse for all [taskr-related plugins on `npmjs.com`](https://www.npmjs.com/browse/keyword/taskr-plugin), too!\n\nIf you're still missing something, open a ticket so that the team \u0026 community can try to help you... or create \u0026 share your own Taskr plugin! We have an awesome [Yeoman generator](https://github.com/lukeed/generator-taskr) to help speed up the process.\n\n| Package | Version | Dependencies | Description |\n|--------|-------|------------|-----------|\n| [`taskr`](/packages/taskr) | [![npm](https://img.shields.io/npm/v/taskr.svg?maxAge=86400)](https://www.npmjs.com/package/taskr) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/taskr)](https://david-dm.org/lukeed/taskr?path=packages/taskr) | Core package. _Required_ |\n| [`@taskr/babel`](/packages/babel) | [![npm](https://img.shields.io/npm/v/@taskr/babel.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/babel) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/babel)](https://david-dm.org/lukeed/taskr?path=packages/babel) | Babel plugin for Taskr |\n| [`@taskr/browserify`](/packages/browserify) | [![npm](https://img.shields.io/npm/v/@taskr/browserify.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/browserify) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/browserify)](https://david-dm.org/lukeed/taskr?path=packages/browserify) | Browserify plugin for Taskr |\n| [`@taskr/buble`](/packages/buble) | [![npm](https://img.shields.io/npm/v/@taskr/buble.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/buble) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/buble)](https://david-dm.org/lukeed/taskr?path=packages/buble) | Bublé plugin for Taskr |\n| [`@taskr/clear`](/packages/clear) | [![npm](https://img.shields.io/npm/v/@taskr/clear.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/clear) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/clear)](https://david-dm.org/lukeed/taskr?path=packages/clear) | Remove one or more directories |\n| [`@taskr/coffee`](/packages/coffee) | [![npm](https://img.shields.io/npm/v/@taskr/coffee.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/coffee) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/coffee)](https://david-dm.org/lukeed/taskr?path=packages/coffee) | CoffeeScript plugin for Taskr |\n| [`@taskr/concat`](/packages/concat) | [![npm](https://img.shields.io/npm/v/@taskr/concat.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/concat) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/concat)](https://david-dm.org/lukeed/taskr?path=packages/concat) | Concatenate files with optional source maps. |\n| [`@taskr/esnext`](/packages/esnext) | [![npm](https://img.shields.io/npm/v/@taskr/esnext.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/esnext) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/esnext)](https://david-dm.org/lukeed/taskr?path=packages/esnext) | Allows `async`/`await` syntax within `taskfile.js` |\n| [`@taskr/flatten`](/packages/flatten) | [![npm](https://img.shields.io/npm/v/@taskr/flatten.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/flatten) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/flatten)](https://david-dm.org/lukeed/taskr?path=packages/flatten) | Flatten source files to a max of sub-dirs. |\n| [`@taskr/gzip`](/packages/gzip) | [![npm](https://img.shields.io/npm/v/@taskr/gzip.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/gzip) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/gzip)](https://david-dm.org/lukeed/taskr?path=packages/gzip) | Gzip plugin for Taskr |\n| [`@taskr/htmlmin`](/packages/htmlmin) | [![npm](https://img.shields.io/npm/v/@taskr/htmlmin.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/htmlmin) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/htmlmin)](https://david-dm.org/lukeed/taskr?path=packages/htmlmin) | Minify HTML with Taskr |\n| [`@taskr/jest`](/packages/jest) | [![npm](https://img.shields.io/npm/v/@taskr/jest.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/jest) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/jest)](https://david-dm.org/lukeed/taskr?path=packages/jest) | Jest plugin for Taskr |\n| [`@taskr/less`](/packages/less) | [![npm](https://img.shields.io/npm/v/@taskr/less.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/less) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/less)](https://david-dm.org/lukeed/taskr?path=packages/less) | Compile LESS to CSS with Taskr |\n| [`@taskr/postcss`](/packages/postcss) | [![npm](https://img.shields.io/npm/v/@taskr/postcss.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/postcss) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/postcss)](https://david-dm.org/lukeed/taskr?path=packages/postcss) | PostCSS plugin for Taskr |\n| [`@taskr/prettier`](/packages/prettier) | [![npm](https://img.shields.io/npm/v/@taskr/prettier.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/prettier) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/prettier)](https://david-dm.org/lukeed/taskr?path=packages/prettier) | Prettier plugin for Taskr |\n| [`@taskr/rev`](/packages/rev) | [![npm](https://img.shields.io/npm/v/@taskr/rev.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/rev) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/rev)](https://david-dm.org/lukeed/taskr?path=packages/rev) | Version/Hash assets for cache-busting |\n| [`@taskr/sass`](/packages/sass) | [![npm](https://img.shields.io/npm/v/@taskr/sass.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/sass) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/sass)](https://david-dm.org/lukeed/taskr?path=packages/sass) | Compile SASS to CSS with Taskr |\n| [`@taskr/shell`](/packages/shell) | [![npm](https://img.shields.io/npm/v/@taskr/shell.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/shell) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/shell)](https://david-dm.org/lukeed/taskr?path=packages/shell) | Execute shell commands with Taskr |\n| [`@taskr/stylus`](/packages/stylus) | [![npm](https://img.shields.io/npm/v/@taskr/stylus.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/stylus) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/stylus)](https://david-dm.org/lukeed/taskr?path=packages/stylus) | Compile Stylus to CSS with Taskr |\n| [`@taskr/typescript`](/packages/typescript) | [![npm](https://img.shields.io/npm/v/@taskr/typescript.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/typescript) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/typescript)](https://david-dm.org/lukeed/taskr?path=packages/typescript) | Compile Typescript with Taskr |\n| [`@taskr/uglify`](/packages/uglify) | [![npm](https://img.shields.io/npm/v/@taskr/uglify.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/uglify) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/uglify)](https://david-dm.org/lukeed/taskr?path=packages/uglify) | UglifyJS plugin for Taskr |\n| [`@taskr/unflow`](/packages/unflow) | [![npm](https://img.shields.io/npm/v/@taskr/unflow.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/unflow) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/unflow)](https://david-dm.org/lukeed/taskr?path=packages/unflow) | Remove Flow type annotations with Taskr |\n| [`@taskr/watch`](/packages/watch) | [![npm](https://img.shields.io/npm/v/@taskr/watch.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/watch) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/watch)](https://david-dm.org/lukeed/taskr?path=packages/watch) | Watch files \u0026 Execute specified tasks on change |\n| [`@taskr/zip`](/packages/zip) | [![npm](https://img.shields.io/npm/v/@taskr/zip.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/zip) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/zip)](https://david-dm.org/lukeed/taskr?path=packages/zip) | ZIP compress files with Taskr |\n| [`generator-taskr`](https://github.com/lukeed/generator-taskr) | [![npm](https://img.shields.io/npm/v/generator-taskr.svg?maxAge=86400)](https://www.npmjs.com/package/generator-taskr) | [![Dependency Status](https://david-dm.org/lukeed/generator-taskr.svg)](https://david-dm.org/lukeed/generator-taskr) | Official Yeoman generator |\n\n### Community Plugins\n\n| Package | Version | Dependencies | Description |\n|--------|-------|------------|--------------|\n| [`taskr-autoprefixer`](https://github.com/lukeed/taskr-autoprefixer) | [![npm](https://img.shields.io/npm/v/taskr-autoprefixer.svg?maxAge=86400)](https://www.npmjs.com/package/taskr-autoprefixer) | [![Dependency Status](https://david-dm.org/lukeed/taskr-autoprefixer.svg)](https://david-dm.org/lukeed/taskr-autoprefixer) | CSS Autoprefixer plugin for Taskr |\n| [`taskr-nunjucks`](https://github.com/lukeed/taskr-nunjucks) | [![npm](https://img.shields.io/npm/v/taskr-nunjucks.svg?maxAge=86400)](https://www.npmjs.com/package/taskr-nunjucks) | [![Dependency Status](https://david-dm.org/lukeed/taskr-nunjucks.svg)](https://david-dm.org/lukeed/taskr-nunjucks) | Render Nunjucks templates with Taskr |\n| [`taskr-precache`](https://github.com/lukeed/taskr-precache) | [![npm](https://img.shields.io/npm/v/taskr-precache.svg?maxAge=86400)](https://www.npmjs.com/package/taskr-precache) | [![Dependency Status](https://david-dm.org/lukeed/taskr-precache.svg)](https://david-dm.org/lukeed/taskr-precache) | Cache assets for offline use via service worker |\n| [`taskr-svelte`](https://github.com/lukeed/taskr-svelte) | [![npm](https://img.shields.io/npm/v/taskr-svelte.svg?maxAge=86400)](https://www.npmjs.com/package/taskr-svelte) | [![Dependency Status](https://david-dm.org/lukeed/taskr-svelte.svg)](https://david-dm.org/lukeed/taskr-svelte) | Compile Svelte components with Taskr\n| [`taskr-xo`](https://github.com/lukeed/taskr-xo) | [![npm](https://img.shields.io/npm/v/taskr-xo.svg?maxAge=86400)](https://www.npmjs.com/package/taskr-xo) | [![Dependency Status](https://david-dm.org/lukeed/taskr-xo.svg)](https://david-dm.org/lukeed/taskr-xo) | XO plugin for Taskr\n| [`taskr-standard`](https://github.com/elmasse/taskr-standard) | [![npm](https://img.shields.io/npm/v/taskr-standard.svg?maxAge=86400)](https://www.npmjs.com/package/taskr-standard) | [![Dependency Status](https://david-dm.org/elmasse/taskr-standard.svg)](https://david-dm.org/elmasse/taskr-standard) | Standard plugin for Taskr\n| [`template-taskr`](https://github.com/adamkiss/template-taskr) | [![npm](https://img.shields.io/npm/v/template-taskr.svg?maxAge=86400)](https://www.npmjs.com/package/template-taskr) | [![Dependency Status](https://david-dm.org/adamkiss/template-taskr.svg)](https://david-dm.org/adamkiss/template-taskr) | Unofficial SAO generator\n\n## License\n\nMIT © [Luke Edwards](https://lukeed.com) and [Jorge Bucaran](https://github.com/JorgeBucaran)\n\n\u003c!--\n  [`@taskr/eslint`](/packages/eslint) | [![npm](https://img.shields.io/npm/v/@taskr/eslint.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/eslint) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/eslint)](https://david-dm.org/lukeed/taskr?path=packages/eslint)\n  [`@taskr/flow`](/packages/flow) | [![npm](https://img.shields.io/npm/v/@taskr/flow.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/flow) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/flow)](https://david-dm.org/lukeed/taskr?path=packages/flow)\n  [`@taskr/rollup`](/packages/rollup) | [![npm](https://img.shields.io/npm/v/@taskr/rollup.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/rollup) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/rollup)](https://david-dm.org/lukeed/taskr?path=packages/rollup)\n  [`@taskr/webpack`](/packages/webpack) | [![npm](https://img.shields.io/npm/v/@taskr/webpack.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/webpack) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/webpack)](https://david-dm.org/lukeed/taskr?path=packages/webpack)\n  | --\u003e\n","funding_links":[],"categories":["JavaScript","nodejs","Packages"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukeed%2Ftaskr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukeed%2Ftaskr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukeed%2Ftaskr/lists"}