Bonobo is a data-processing toolkit for python 3.5+

Write atomic data transformations using simple python callables.
Connect them in a directed graph.
Execute.
Get startedLearn more

What is Bonobo?

Bonobo is a lightweight Extract-Transform-Load (ETL) framework for Python 3.5+.

It provides tools for building data transformation pipelines, using plain python primitives, and executing them in parallel.

Bonobo is the swiss army knife for everyday's data.
Extract
Extract ...

Use built-in extractors (CSV, JSON, XML, XLS, ...), official add-ons (SQL), or write your own.

Transform
Transform ...

Apply changes using simple python, or provided transformation classes.

Load
Load ...

Use our built-in writers (CSV, JSON, XML, XLS, ...) or connect to your custom services.

Simple
... in a Simple

Tired of learning new APIs?
You'll be up and running in 10 minutes, if you know some python.

Atomic
... Atomic

Each transformation has a specific, unique, small and scoped purpose (think UNIX), enhancing testability and ease of maintenance.

Pythonic
... and Pythonic way!

It's just python ! We worked hard to provide a clean API, using the standard data structures you already know.

Show me !

Bonobo in action!

Simple example with Bonobo (Python ETL)

It's just Python!

The smallest building blocks of Bonobo scripts are plain old python objects. Anything callable (or iterable) can be used as a node.

Bonobo provides the tools to combine the nodes in graphs, visualize the structure and execute them efficiently.

Graph of simple example with Bonobo (Python ETL)
Bonobo execution with live and detailed statistics.

Run your job, sit back, relax.

Bonobo processes the data as streams of independent rows.

Each node handles one line at a time, but the nodes run in parallel.

Use the command line interface and watch live and detailed statistics.

Simple example with Bonobo, enhanced with a fork.

Enhance your graph!

It's easy to design your graph according to your business requirements.

Graph of simple example with Bonobo, enhanced with a fork.
Create a custom configurable class using Bonobo, the Python ETL.

Build your own library...

Bonobo is just a minimalistic toolkit to help you build ETL jobs.

Use bonobo.config to create parametrizable classes that will get configured at runtime with options and service dependencies, or use built-in transformations to work with usual file formats and operations.

Clean, readable and easy to test!

Use your own ETL libraries using Bonobo, the Python ETL.

... and use it on your graph!

You just built your first reusable block, now just create instances of this class in your graphs, eventually overriding some parameters.

Once again, it's just python so you can bundle your blocks in modules or packages, as you would do with the rest of your codebase.

Graph with your own ETL libraries using Bonobo, the Python ETL.
Let's get started!More examples...

Features and Resources

Bonobo aims at being minimalistic, yet featureful. All basic formats and operations are included within the main library. Optional dependencies are bundled as extensions, usually installable using an "extra" (pip install bonobo[sqlalchemy], for example)
Europython 2017

(jump to 9 minutes to skip the intro)

SQL

Official bonobo-sqlalchemy extension, still in alpha/preview, allows to connect, extract and load data from and into popular SQL databases.

Work with SQL databases

Notebooks

Bonobo uses plugins to display status of an ETL job while and after it runs. It will autodetect if you're working in a Jupyter Notebook and use an HTML widget to display live status.

Jupyter Notebooks

Graphviz

Although Bonobo is a code-as-configuration framework, you can use the built-in inspector to output a graphviz description to visualize and/or document your ETL jobs.

Bonobo Inspector

Format Converter

The simplest transformations are conversions from one to another format. Bonobo's CLI bundles a convert command that does just that.

Convert a CSV to JSON
Convert a JSON to CSV

Docker

The official bonobo-docker extension can be used to build and run ETL jobs within Docker containers.

Run an ETL job in docker

Read the Docs

Announcements

We'll get in touch soon!

Now open your inbox and click the subscription link, so we know you're the real owner of this address.

Oops! Something went wrong while submitting the form. And we're not even able to tell you what... Maybe your e-mail was invalid?

Low volume list with only major releases and important announcements, no spam with your ham. I'm serious.

Latest news

Bonobo ETL v.0.6

Bonobo ETL v.0.6.0 is now available. You should upgrade your projects as soon as possible. A migration guide is available for backward incompatible changes.

Bonobo ETL v.0.5

Bonobo ETL v.0.5.0 is now available. As always, you should upgrade your projects as soon as possible and give feedback if anything goes wrong.

EuroPython 2017

A little summary of the apes' invasion in Rimini, for the amazing EuroPython conference. Including slides, videos of the talk, general thoughts, sprint sessions and thanks to all the amazing people that were there.

Bonobo ETL v.0.4

Bonobo ETL v.0.4.0 is now available. Amongst a lot of new features, there is now good integration with python logging facilities, better console handling, better command line interface and more exciting, the first preview releases of the bonobo-docker extension, that allows to build images and run ETL jobs in containers. As always, you should upgrade your projects as soon as possible, and of course make feedback if anything goes wrong.

Bonobo ETL will be at PyParis 2017

We're glad to announce that our talk about Bonobo ETL has been accepted to PyParis 2017, a conference gathering users and developers of the Python programming language.

Bonobo v.0.3.2

Minor maintenance release for the 0.3 branch.

Bonobo v.0.3

Just released Bonobo 0.3. Lots of new features, stability enhancements, better internal plumbery... You should upgrade your projects as soon as possible, and of course make feedback if anything goes wrong.

Bonobo v.0.3.1

Minor maintenance release for the 0.3 branch. Also, docker extension got a big bump forward and there is now a simple process to build the images.