PHPackages                             guilhermegeek/ken - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. guilhermegeek/ken

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

guilhermegeek/ken
=================

Build automation tool for Hacklang projects

0.0.1(10y ago)05[1 issues](https://github.com/guilhermegeek/ken/issues)MITHack

Since May 4Pushed 10y ago1 watchersCompare

[ Source](https://github.com/guilhermegeek/ken)[ Packagist](https://packagist.org/packages/guilhermegeek/ken)[ Docs](https://github.com/guilhermegeek/ken)[ RSS](/packages/guilhermegeek-ken/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (1)Dependencies (4)Versions (3)Used By (0)

Ken
===

[](#ken)

Ken is a project automation tool in Hacklang and can be used as a general build tool as well.

Ken exists because of [Bob](https://github.com/CHH/bob), a great PHP tool it's based on. I haven't forked because the project changed too much.

How it works
------------

[](#how-it-works)

Ken doesn't use XML/JSON for task files. Instead, tasks are registered with the PHP language itself using the [TaskLibraryInterface](src/Ken/Interfaces/TaskLibraryInterface.php) or configuration files.

[Application](src/Ken/Application.php) is the core object used by developers to register task files or libraries.

The tasks are created by [TaskFactory](src/Ken/TaskFactory.php).

Getting Started
---------------

[](#getting-started)

If not specified, the default configuration file is loaded from ken\_config.php

If the folder ken\_tasks exists, then all files inside it are threated as configuration files.

A configuration file is required at runtime and uses 2 functions:

- task(name, dependencies, action) - register a new task ..+ task(name, dependencies) ..+task(name, action) ..+task(action)
- desc(text) - provides the description for the next task defined

The configuration file has also a global instance of [Application](src/Ken/Application.php) that can be accesed outside the task closure, internally know as **action**.

```
desc('Concat clientside code');
task('concat', function(Application $app) {
	// concat files
});

desc('Minify clientside code');
task('minify', function(Application $app) {
	// minify files
});

task('default', ['concat', 'minify'])
```

To provide a better OOO approach, you can define tasks instead with **TaskLibraryInterface**.

Libraries are registered in **Application** with:

```
register(TaskLibraryInterface $taskLib, array $parameters = array())
```

To create a new library you must implement the **TaskLibraryInterface**. For an example, check the [ComposerLibrary](src/Ken/Library/ComposerLibrary.php) which manage composer packages.

Client Interfaces
-----------------

[](#client-interfaces)

The [ClientInterface](src/Ken/Interfaces/ClientInterface.php) represents the entry point for developers to use the **Ken** library.

For now there're two implementations for **ClientInterface**:

- Cli: The CLI implementation to be used with HHVM client
- Host: An implementation to be used inside another framework or existing project (you're able to execute tasks from inside your code easily)

While the CLI is used to execute tasks directly from the command line, the Host is used to be consumed inside other code.

Both Cli and Host initialize the client dependencies creating a new **Application** then the method **run** is invoked.

### Cli

[](#cli)

The CLI is pretty straightford and you can access it through `bin/ken`.

When called the **run** method, the Cli executes the tasks.

### Host

[](#host)

The Host client must be **run** at Application Startup, before any consumption to **Ken** is done. To execute the tasks, the developer invokes the **task** method.

Install
-------

[](#install)

### Pre Requesites

[](#pre-requesites)

Ken needs at least **hhvm 3.8** to run.

### Composer

[](#composer)

Add the `guilhermegeek/ken` package to the `require-dev` section in your composer

```
{
	"require-dev": {
		"guilhermegeek/ken": "master"
	}
}
```

Then run `composer install -dev`

You can invoke ken with:

```
hhvm bin/ken

```

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

3705d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f0a1999121d701c941ca37577796d4b81fe2345088199f3d466adffc29290438?d=identicon)[guilhermegeek](/maintainers/guilhermegeek)

---

Top Contributors

[![gui-com-pt](https://avatars.githubusercontent.com/u/303894?v=4)](https://github.com/gui-com-pt "gui-com-pt (1 commits)")

---

Tags

automationbuild

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/guilhermegeek-ken/health.svg)

```
[![Health](https://phpackages.com/badges/guilhermegeek-ken/health.svg)](https://phpackages.com/packages/guilhermegeek-ken)
```

###  Alternatives

[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.6k38.2k](/packages/matomo-matomo)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

749284.3k35](/packages/civicrm-civicrm-core)[spatie/laravel-export

Create a static site bundle from a Laravel app

672139.5k6](/packages/spatie-laravel-export)[cognesy/instructor-php

The complete AI toolkit for PHP: unified LLM API, structured outputs, agents, and coding agent control

318117.1k1](/packages/cognesy-instructor-php)[jakubkulhan/chrome-devtools-protocol

Chrome Devtools Protocol client for PHP

185970.8k3](/packages/jakubkulhan-chrome-devtools-protocol)[illuminate/process

The Illuminate Process package.

44813.9k96](/packages/illuminate-process)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
