Header

fuel

An open-source* general-purpose object serialization framework developed in Pharo Smalltalk environment.

*: Developed under the MIT license.

Goals

Concrete
We don't aspire to have a dialect-interchange format. This enables us to serialize special objects like contexts, block closures, exceptions, compiled methods and classes. Although there are ports to other dialects, Fuel development is Pharo-centric.
Flexible
Depending on the context, there could be multiple ways of serializing the same object. For example, a class can be considered either a global or a regular object. In the former case, it will be encoded just its name; in the latter case, the class will be encoded in detail, with its method dictionary, etc.
Fast
We worry about to have the best performance. We developed a complete benchmark suite to help analyse the performance with diverse sample sets, as well as compare against other serializers. Our pickling algorithm allows outstanding materialization performance, as well as very good serialization performance too.
Object-Oriented Design
From the beginning it was a constraint to have a good object-oriented design and to do not need any special support from the VM. In addition, Fuel has a complete test suite, with a high coverage. We also worry about writing comments on classes and methods.

Features

  • Is a fast, concrete, general-purpose and flexible binary serializer.
  • Object-Oriented design.
  • No special VM-support needed.
  • Modular (clear division in packages).
  • Can serialize/materialize not only plain objects but also classes, traits, methods, closures, contexts, packages, etc.
  • Support for global references.
  • Very customizable: ignore certain instance variables, substitute objects by others, pre and post serialization and materialization actions, etc.
  • Supports class rename and class reshape.
  • Good test coverage (almost 600 unit tests).
  • Large suite of benchmarks.

Presentations and publications

These slides show the pickle format and the serialization algorithm main idea with an example.

We presented Fuel at ESUG International Workshop on Smalltalk Technologies 2011. You can watch the presentation either in YouTube or mp4. You can also get the slides either in pdf or slideshare.

In proceedings of the mentioned workshop we published a paper which includes detailed description and benchmarks: Clustered Serialization with Fuel (Martin Dias, Mariano Martinez Peck, Stéphane Ducasse and Gabriela Arévalo)

We also wrote an extended version of the workshop paper and it that was accepted in the journal Software Practice and Experience (under submission process). This paper paper is much better than the previous one. If you are interested in learning about Fuel's internals, its differences with other serializers, etc, we invite you to read it.

In addition, Fuel has received the 1st prize at the ESUG Innovation Technology Awards 2011.

We also presented the project at Smalltalks 2011. You can see the slides.

In 2012, Martin Dias presented his Master thesis based on this project.

At the PharoConf in April 2013 in Bern, Switzerland, Max Leske showed demos of Fuel and Tanker. The screencast of the demo (recorded previously) is available here and the live recording of the demo session can be found here: <youtube url to come>.

Documentation

Installation
First steps with Fuel.
Getting Started
Some examples help to show the basic interface.
Managing Globals
What objects are treated as globals is configurable in Fuel. Learn about this with this guide.
Customizing the Graph
This guide explains how to store your objects in the right way when default behavior doesn't fit well.
Errors
The list of exceptions thrown during serialization and materialization. We provide also an explanation for them.
Migration
Classes change along time, and you can configure Fuel for loading old instances.
Format Migration
Each Fuel version has its own stream format. Furthermore, each version is not compatible with the others. This is a guide useful for upgrading Fuel.
Debugging
In this guide we explain about Fuel internals and show some debugging and visualization tools.
Built-in Header Support
Add extra objects and actions as the header of the stream.
Overview of Packages
A description of available packages that extend the core ones.
Overview of Packages
A description of available packages that extend the core ones.
What to do for each Fuel release (internal for developers)
A guide for releasing a new fuel version.

News

You can follow us through the official blog.

Stable Versions

Software using Fuel

We gather together a list of users in Software using Fuel. If you are a Fuel user we are not aware of, please let us know!

Blog posts, screencasts and videos

Besides from our official Blog, you can read interesting articles about Fuel in Mariano's blog.

We truly appreciate James Robertson's screencast that shows how to download and try Fuel. In addition, James explains in another screencast how to use Fuel Package Loader to export and import all seaside packages.

In this video, Pavel Krivanek shows how he can export PharoCore with Fuel and materialize it in 15 seconds in a PharoKernel image.

Development

Some links

Collaborators

  • Martin Dias - tinchodias (at) gmail (dot) com (Developer)
  • Mariano Martinez Peck - marianopeck (at) gmail (dot) com (Developer)
  • Max Leske (Developer)
  • Pavel Krivanek (Developer)
  • Tristan Bourgois (Past Developer)
  • Stephane Ducasse (Promotor and financer)