Recki what?

If you don’t know what Recki-CT is, see @ircmaxell’s original post or the repo, we won’t go into depth here. This quick tip will merely show you how to install it on a Homestead Improved box, much like we did with other software before.

Step 1 – Homestead Improved

First and foremost, get a Homestead Improved instance up and running.

Give it a new virtual host like so:

- map:
  to: /home/vagrant/Code/recki

Boot the VM and vagrant ssh into it.

Step 2 – JitFu

Recki-CT needs JitFu to be installed.

As per instructions, run the following commands in order while you’re in the VM.

sudo apt-get install bison flex texinfo

git clone git:// libijt-fu
cd libjit-fu
./configure --prefix=/opt
sudo make install

git clone
cd jitfu
./configure --with-jitfu=/opt
sudo make install

sudo su
echo "" >> /etc/php5/fpm/conf.d/20-jitfu.ini
echo "" >> /etc/php5/cli/conf.d/20-jitfu.ini

sudo service nginx restart
sudo service php5-fpm restart

To see if we installed it successfully:

cd ~/Code
git clone recki
mv recki/public/index.php recki/
touch recki/recki.php

Open recki.php and paste the following content inside it:

use JITFU\Context;
use JITFU\Type;
use JITFU\Signature;
use JITFU\Func;
use JITFU\Value;

$context = new Context();

$integer   = Type::of(Type::int);

$function = new Func($context, new Signature($integer, [$integer]), function($args) use($integer) {
    $zero     = new Value($this, 0, $integer);
    $one      = new Value($this, 1, $integer);
    $two      = new Value($this, 2, $integer);

    /* if ($arg == 0) return 0; */
        $this->doEq($args[0], $zero),
        function() use ($zero) {

    /* if ($arg == 1) return 1; */
        $this->doEq($args[0], $one),
        function() use($one) {

    /* return $function($arg-1) + $function($arg-2); */
            $this->doCall($this, [$this->doSub($args[0], $one)]),
            $this->doCall($this, [$this->doSub($args[0], $two)]))); 


var_dump($function(40)); /* __invoke with magicalness */

If you go to now, you should see JitFu support enabled in the PHPInfo screen. If you go to, you should get int 102334155 as output rather quickly.

Step 3 – Clone and Compose

Next up, we’ll need to clone the Recki repo, and download dependencies with Composer.

cd ~/Code
rm -rf recki
git clone recki
cd recki
composer install

Step 4 – Test

To see if it works, just run the examples via the command line:

php examples/01-basic-usage.php

or through the browser:

That’s all there is to it. Now you can focus on brutal optimizations of your PHP code in certain parts without having to replace the entire PHP engine your app is spinning on.

Bruno is a coder from Croatia with Master’s Degrees in Computer Science and English Language and Literature. He’s the editor of SitePoint’s PHP channel and a developer evangelist for He avoids legacy code like the plague and when picking projects makes sure they’re as cutting edge as possible. He’s a treadmill desk enthusiast and active (board)gamer who sometimes blogs.

Get your free chapter of Level Up Your Web Apps with Go

Get a free chapter of Level Up Your Web Apps with Go, plus updates and exclusive offers from SitePoint.

  • Yosmany García Alfonso

    Great info to keep us up to date! Just need to fix the ircmaxell’s link.

    • Bruno Skvorc

      Done, thanks!

  • ermagerhd

    it’s PRE ALPHA QUALITY how come there’s no red warning for newbies?

    • Bruno Skvorc

      This being a mere installation guide for Ubuntu, I figure if someone is interested enough to give it a go, they’ll actually read the post to see what it’s about, and notice the warning.

Related books & courses
Available now on SitePoint Premium

Preview for $1