This package is not installable via Composer 1.x, please make sure you upgrade to Composer 2+. Read more about our Composer 1.x deprecation policy.

A very simple iteration based task runner

0.3.0 2015-01-30 17:00 UTC

This package is auto-updated.

Last update: 2021-11-24 19:45:31 UTC


Welcome to Fred. Fred will execute tasks that you have described in a fred file.

Fred is not a grown up man at the moment. The steps used in this docs are not yet implemented. Do you help me teach him how to do developer tasks?

Build Status

Why should I use Fred?

  • You don't have to spent time installing NodeJS, NPM on your server just to run tasks;
  • You can work with a syntax you're familiar with;
  • Fred's codebase is very small (just 9 classes) and as flexible as task runners can be.


The best way to install Fred is using Composer:

$ composer global require wouterj/fred:0.*

If you set-up composer's global binary directory correctly, this will give you a new command: fred


You start by creating a fred.php file (the fred file). In this file, you specify the tasks. You do this by calling the task() method of the $fred variable that's available in the file:

$fred->task('build', function () use ($fred) {
    // ... specify the tasks

All tasks begin by opening a file or multiple files and passing a Traversable of these files to load(). The best way to do this is by using the Symfony Finder Component:

use Symfony\Component\Finder\Finder;

$fred->task('build', function () use ($fred) {

You've now opened a Fred step sequence for all files with a .js extension in /web/assets/raw.

Now you can assign as many steps to this sequence as you want:

use Symfony\Component\Finder\Finder;
use WouterJ\Fred\Extension as Ext;

$fred->task('build', function () use ($fred) {
        ->then(new Ext\JsHint())   // Lint the JS code using JsHint...
        ->then(new Ext\Uglify())   // ...minify the JS files using UglifyJS...
        ->then(new Ext\Compact())  // ...and combine all JS files into one file

At last, you have to output the generated code somewhere. This is done with the dist() function:

    ->then(new Ext\JsHint())
    ->then(new Ext\Uglify())
    ->then(new Ext\Compact())

Now, the generated code is dumped in the /web/assets/script.min.js file.

You can run this task by using fred build (where build is the name of the task).


The project is released under the BSD license. See the LICENSE file included in this package for more information.


Of course, all kind of changes are welcome (as long as it doesn't make the Fred more complex), but Fred should have learn the following things before reaching a stable version:

  • Have more tests (that actually test the console app)
  • Have a complete documentation
  • Have more extensions and steps