New release - Pijul 0.8

Thursday, September 14, 2017

We’re proud to announce a new release of Pijul: version 0.8.

This version is a major step for us, in terms of stability, usability, and documentation. This post is a short summary of the things we have improved.

A manual

Pijul now has a manual. It’s far from perfect, but contains a tutorial to get started with Pijul and the Nest, and a full reference of all the commands.

Comments welcome! The repository for the manual itself is on the Nest, at


We’ve improved a lot on stability, especially with respect to conflicts. A number of major bugs were fixed in libpijul, in particular:

  • Unrecord was going into an infinite loop when the graph had cycles. This had received little testing before because cycles are impossible to produce with the current Pijul, but there was another bug that produced them sometimes.

  • That other bug was caused by unrecord leaving edges sometimes in some special cases, and flipping the direction of some other edges.

  • Unrecording the concurrent replacement of edge labels had another bug, where previous versions would get inserted even if the repository still had a patch that deleted them.

  • Another bug, which caused the reverse dependencies to be incomplete (and therefore allow otherwise forbidden unrecords), was fixed.

I am planning on writing a few more blog posts with war stories about how I noticed and fixed these.


We have improved on portability, after getting feedback from users of FreeBSD, of various Linux distributions, of OSX and Windows.

In particular, terminal input and output has been through more tests and cases, and has been improved, for instance by using a pager on commands with potentially long outputs, and detecting whether the output is a pseudo-terminal.

Improvements of the Nest

The Nest has also changed completely since our last release: we’ve abandoned the pull request model, because patches are more flexible than that.

Since my last blog post, I’ve also dropped the “tokio hyper ersatz” way of handling HTTP, and am now using Hyper. It is super pleasant to use (past the initial setup part, which wasn’t too easy, since I wanted to run different servers on the same event loop, i.e. on the same thread).

Last minute bonus: a new release of Thrussh

As part of the Pijul project, I wrote Thrussh about a year ago, and updated it to use tokio in a hackish way in the end of 2016.

I just completed a new release, using tokio-io, and a more idiomatic use of tokio everywhere. The code has also been cleaned, and should be able to cope better with asynchronous problems when combining it with other protocols (like we do in the Nest).