diff --git a/README.rst b/README.rst
index 7224cbfb32c7b1a59c542e5720a7a79ab721f192..9136dd3d9809a6e8a4eaf1ee5dc07fa66f7426e5 100644
--- a/README.rst
+++ b/README.rst
@@ -1,15 +1,17 @@
 .. vim: set fileencoding=utf-8 :
-.. Thu 30 Jan 08:46:53 2014 CET
+.. Tue 27 Feb 2018 09:06:28 CET
 
-.. image:: http://img.shields.io/badge/docs-stable-yellow.png
+.. image:: https://img.shields.io/badge/docs-stable-yellow.svg
    :target: https://www.idiap.ch/software/bob/docs/bob/bob.buildout/stable/index.html
-.. image:: http://img.shields.io/badge/docs-latest-orange.png
+.. image:: https://img.shields.io/badge/docs-latest-orange.svg
    :target: https://www.idiap.ch/software/bob/docs/bob/bob.buildout/master/index.html
 .. image:: https://gitlab.idiap.ch/bob/bob.buildout/badges/master/build.svg
    :target: https://gitlab.idiap.ch/bob/bob.buildout/commits/master
+.. image:: https://gitlab.idiap.ch/bob/bob.buildout/badges/master/coverage.svg
+   :target: https://gitlab.idiap.ch/bob/bob.buildout/commits/master
 .. image:: https://img.shields.io/badge/gitlab-project-0000c0.svg
    :target: https://gitlab.idiap.ch/bob/bob.buildout
-.. image:: http://img.shields.io/pypi/v/bob.buildout.png
+.. image:: https://img.shields.io/pypi/v/bob.buildout.svg
    :target: https://pypi.python.org/pypi/bob.buildout
 
 
@@ -18,157 +20,17 @@
 ===================================
 
 This package is part of the signal-processing and machine learning toolbox
-Bob_. It contains a number of ``zc.buildout`` recipes for simplifying builds of
-Bob_ packages.
-
-
-C++/Python Extension
---------------------
-
-This extension allows you to compile C/C++ extensions that depend on each other
-using a buildout. It assures that eggs living in both ``develop-eggs`` and
-``eggs`` are on your path before building the packages in the ``develop``
-section. By using this extension you can drop the use of the local recipe
-``bob.buildout:develop``, which should be considered deprecated.
-
-
-Supported Options
-=================
-
-verbose
-
-  If set, buildout it will output the compilation commands while compiling the
-  module.
-
-prefixes
-
-  A list of directories where this recipe will look for installed software,
-  such as compiled libraries and header files. It is the same as setting the
-  environment variable ``BOB_PREFIX_PATH`` to a list of paths containing
-  externally installed software. As a side-effect, setting ``BOB_PREFIX_PATH``
-  also sets, internally, ``PKG_CONFIG_PATH`` to a list of directories following
-  where to search for pkg-config files.
-
-debug
-
-  If set, the module will be compiled with debugging symbols and with
-  optimization turned off. If ``debug`` is set to ``true``, this is equivalent
-  to appending the environment variables ``CFLAGS`` and ``CXXFLAGS`` with ``-O0
-  -g``. If it is set to ``false``, it is the same as appending ``-O3 -g0``
-  instead.
-
-environ
-
-  The name of a section on your configuration file that contains the names and
-  values of environment variables that should be used through the build. This
-  section is named, by default, ``environ``.
-
-  If a section named ``environ`` exists, it is read and the environment
-  variables are set **before** the specified eggs are developed. You can use
-  variable substitution on this section. Here is an an example::
-
-    [environ]
-    CFLAGS = '-O0 -g -DNDEBUG'
-    CXXFLAGS = ${CFLAGS}
-
-  Notice there is some functionality overlap between the previous flags and the
-  use of section ``environ``. While it is more flexible, you must understand
-  the consequences of setting both ``prefixes`` and ``debug``, together with
-  ``environ``. The rule is simple: values set on the ``environ`` section have
-  **precedence** to ``debug`` and ``prefixes``. If you set ``debug`` and
-  ``CFLAGS`` (or ``CXXFLAGS``) in the ``environ`` section, for example, then
-  the values on the final ``CFLAGS`` variable would be ``-O0 -g`` followed by
-  ``environ``'s ``CFLAGS`` settings. Analogously, the paths defined by
-  ``environ``'s ``BOB_PREFIX_PATH`` and ``PKG_CONFIG_PATH`` are **prepended**
-  to those listed in ``prefixes``, if that is also set.
-
-
-Multi-Script Installer
-----------------------
-
-This recipe installs **all** most used scripts and interpreter proxies for your
-package. It will look at the ``buildout`` section entry called ``prefixes``,
-that potentially lists prefixes that should be **prepended** to the default
-python environment. In these prefixes, it will look for standard python
-directories. If one or more are found, these paths are **prepended** into
-the resulting scripts generated by this recipe and eggs will be searched on
-those locations prioritarily.
-
-By default, this recipe will use the eggs defined at the ``buildout`` section
-called ``eggs``, but that can be overriden locally. It generates these scripts:
-
-python
-  A pre-configured python interpreter
-
-gdb-python
-  A pre-configured python interpreter, prefixed with ``gdb`` to make debugging
-  easier. Use it like you use ``python``.
-
-nosetests
-  A test runner called ``nosetests`` will be created on the bin directory of
-  buildout.
-
-coverage
-  A test coverage application called ``coverage`` will be created on the bin
-  directory of buildout.
-
-sphinx
-  Several sphinx utilities will be created on the bin directory of buildout.
-
-package scripts
-  Package scripts will be created taking into account the ``prefixes``
-  established for this section or globally (as a second priority).
-
-To use this recipe, you just have to simply do::
-
-  [scripts]
-  recipe = bob.buildout:scripts
-
-
-Common Supported Options
-========================
-
-The recipe supports the following options:
-
-prefixes
-  A list of directories where this recipe will look for subdirectories with
-  the stem ``lib/python*/site-packages``. All directories matching this
-  condition are appended to the search paths. If not given, the value of this
-  property defaults to ``buildout.prefixes``. Both can be empty, which makes
-  this recipe default to using standard available paths.
-
-eggs
-  The eggs option specifies a list of eggs to use for **building** this
-  package. Each string must be given on a separate line. If not given, the
-  value of this property defaults to ``buildout.eggs``.
-
-dependent-scripts
-  If set to the string ``true``, scripts will be generated for all required
-  eggs in addition to the eggs specifically named.
-
-interpreter
-  The name of a script to generate that allows access to a Python interpreter
-  that has the path set based on the eggs installed. If you don't specify
-  anything, the default value ``python`` will be used.
-
-extra-paths
-  Extra paths to be appended in a generated script. To prepend, using the
-  ``prefixes`` entry.
-
-nose-flags
-  These are extra flags that are **appended** to the given ``nosetests``
-  command line, automatically. Use this to preset arguments you like running
-  all the time like ``-v``, for example.
+Bob_. It contains a number of ``zc.buildout`` recipes for simplifying
+development of Bob_ packages.
 
 
 Installation
 ------------
 
-Follow our `installation`_ instructions. Then, using the Python interpreter
-provided by the distribution, bootstrap and buildout this package::
+Complete Bob's `installation`_ instructions. Then, to install this package,
+run::
 
-  $ python bootstrap-buildout.py
-  $ ./bin/buildout
+  $ conda install bob.buildout
 
 
 Contact
@@ -180,5 +42,5 @@ development `mailing list`_.
 
 .. Place your references here:
 .. _bob: https://www.idiap.ch/software/bob
-.. _installation: https://gitlab.idiap.ch/bob/bob/wikis/Installation
-.. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/bob-devel
+.. _installation: https://www.idiap.ch/software/bob/install
+.. _mailing list: https://www.idiap.ch/software/bob/discuss
diff --git a/doc/buildout.rst b/doc/buildout.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3f23072ede33e926cb0032e64dad51bade2a8083
--- /dev/null
+++ b/doc/buildout.rst
@@ -0,0 +1,224 @@
+.. bob.buildout.recipes:
+
+
+=======================
+ Extension and Recipes
+=======================
+
+This package is composed of an extension to zc.buildout_ and a recipe. We
+recommend you use both during the creation of your own package-based recipes.
+Here is a typical ``buildout.cfg`` file that can be used to setup the
+development of your own package, and which we normally ship with all
+|project|-based packages:
+
+
+.. code-block:: ini
+
+   [buildout]
+   parts = scripts
+   develop = .
+   eggs = <PACKAGE>
+   extensions = bob.buildout
+   newest = false
+   verbose = true
+
+   [scripts]
+   recipe = bob.buildout:scripts
+
+
+Replace ``<PACKAGE>`` by your package name and you should be ready to run the
+``buildout`` application. If you're curious about zc.buildout_ and how to
+structure your recipe to take full advantage of it, we advise you seek
+documentation on that package on its website or by searching the internet.
+
+The above setup will include all required material for building both simple
+python or python/C/C++ packages from |project|.
+
+By using extension ``bob.buildout`` on the ``buildout`` section of your recipe,
+you ensure the current package will be built taking into consideration all
+required environment/compiler settings required by |project|. This extension is
+strictly required for packages containing C/C++ bindings, but it is harmless to
+include it in Python-only packages.
+
+The section ``scripts`` define a list of scripts that will be installed on the
+``bin`` directory. By default, we make sure all packages listed in
+``buildout.eggs`` are available, as well as typical packages required for
+development such as ``sphinx``, for documentation building, ``nose`` for
+running your test suite and ``coverage``, for code coverage reporting. You may
+augment the ``eggs`` entry on the ``buildout`` section if you'd like further
+packages to be installed on your development environment. It is your call. An
+example package that is often listed there is ``ipdb`` - the iPython based
+python debugger. The syntax of the ``eggs`` entry on the ``buildout`` section
+is one package per line.
+
+The entry ``develop`` on the ``buildout`` section indicates to buildout the
+root directories of packages that it should take, prioritarily, before
+considering potential versions installed on base python (conda) environment. It
+typically says just ``.`` (dot), as we're typically willing to *only* make
+buildout aware of our local checkout. It can include more directories (one per
+line), if we'd like to cross-develop more packages. That is what we do, for
+example, when using the extension ``mr.developer`` (see:
+:ref:`bob.extension` development). For each package listed in ``develop``,
+buildout will run the equivalent of ``cd <dir> && python setup.py develop`` on
+each package **before** trying to resolve the dependencies in ``eggs``. It will
+then consider those locally installed packages in final load-path scheme for
+your applications.
+
+In case you're curious, the ``buildout.newest`` flag is internal to
+zc.buildout_. It instructs the setuptools_ machinery to consider or not
+versions of packages currently installed. If ``newest=true``, then only the
+absolute newest packages in PyPI_ can satisfy the build. By default, we let
+this setting to ``false`` indicating that what is currently installed will be
+sufficient. Only change it if you know the implications. Note, for example, in
+this case, you may not be testing anymore, exclusively, against a
+|project|-agreed set of dependencies.
+
+The remainder flags and options are explained next.
+
+
+Supported extension options
+---------------------------
+
+Here is a list of supported options for the ``bob.buildout``. They should
+appear in the ``buildout`` section of your recipe. They are considered for as
+long as ``bob.buildout`` is listed as an extension.
+
+
+``verbose``
+
+  If set, buildout it will output the compilation commands while compiling the
+  module. This flag should go into the ``buildout`` section of your recipe.
+  Accepted values are ``true`` or ``false``.(the default).
+
+
+``prefixes``
+
+  A list of directories where this recipe will look for installed software,
+  such as compiled libraries and header files. It is important if you're
+  compiling a package that requires external software such as ffmpeg or blitz++
+  header files to be available. It is the same as setting the environment
+  variable ``BOB_PREFIX_PATH`` to a list of paths containing externally
+  installed software. As a side-effect, setting ``BOB_PREFIX_PATH`` also sets,
+  internally, ``PKG_CONFIG_PATH`` to a list of directories following where to
+  search for pkg-config files.
+
+  You typically don't need to set this manually since ``bob.extension`` is
+  smart enough to figure out where to find external libraries. This is even
+  more true if you're using conda-based installations as the bootstrapping
+  environment of your buildout.
+
+
+``debug``
+
+  If set, the module will be compiled with debugging symbols and with
+  optimization turned off. If ``debug`` is set to ``true``, this is equivalent
+  to appending the environment variables ``CFLAGS`` and ``CXXFLAGS`` with ``-O0
+  -g``. By default, the value is ``false``. This setting is advised if you are
+  compiling python C/C++ bindings and would like to debug C/C++ code locally.
+
+
+``environ``
+
+  The name of another section on your configuration file that contains the
+  names and values of environment variables that should be set before any
+  possible build takes place. This section is named, by default, ``environ``.
+  That is, if you provide a section named ``environ`` on your buildout recipe,
+  then you don't need to explicitly specify its name using this flag.
+
+  If a section named ``environ`` (or whatever lists the ``environ`` override on
+  the ``buildout`` section of your recipe) exists, it is read and the
+  environment variables are set **before** the specified packages are built.
+  You can use variable substitution on this section. Here is an an example::
+
+    [environ]
+    CFLAGS = '-O0 -g -DNDEBUG'
+    CXXFLAGS = ${CFLAGS}
+
+  Notice there is some functionality overlap between the previous flags and the
+  use of section ``environ``. While it is more flexible, you must understand
+  the consequences of setting both ``prefixes`` and ``debug``, together with
+  ``environ``. The rule is simple: values set on the ``environ`` section have
+  **precedence** to ``debug`` and ``prefixes``. If you set ``debug`` and
+  ``CFLAGS`` (or ``CXXFLAGS``) in the ``environ`` section, for example, then
+  the values on the final ``CFLAGS`` variable would be ``-O0 -g`` followed by
+  ``environ``'s ``CFLAGS`` settings. Analogously, the paths defined by
+  ``environ``'s ``BOB_PREFIX_PATH`` and ``PKG_CONFIG_PATH`` are **prepended**
+  to those listed in ``prefixes``, if that is also set.
+
+
+The ``scripts`` recipe
+----------------------
+
+By using the recipe ``bob.buildout:scripts`` on one of the sections of your
+recipe, you ensure the scripts generated by the recipe will be built taking
+into consideration all installed packages from your base python environment
+(typically a conda-based installation). If you don't use the
+``bob.buildout:scripts`` recipe, zc.buildout_, by default, assumes no packages
+are availabe on the python installation and may download/recompile all
+dependencies from scratch.
+
+By default, this recipe will use the eggs defined at the ``buildout`` section
+called ``eggs``, but that can be overriden locally. It generates these scripts:
+
+``python``
+  A pre-configured python interpreter taking into consideration all eggs and
+  development packages on your recipe.
+
+``gdb-python`` or ``lldb-python``
+  A pre-configured python interpreter, prefixed with ``gdb`` (or ``lldb`` on a
+  MacOS system) to make debugging easier. Use it like you use ``python``.
+
+``nosetests``
+  A test runner called ``nosetests`` will be created on the bin directory of
+  buildout.
+
+``coverage``
+  A test coverage application called ``coverage`` will be created on the
+  ``bin`` directory of buildout.
+
+``sphinx-build`` and friends
+  Several sphinx utilities will be created on the bin directory of buildout.
+
+Other package scripts
+  Package scripts will be created taking into account the ``prefixes``
+  established for this section or globally (as a second priority).
+
+
+Supported recipe options
+========================
+
+The ``scripts`` recipe supports the following options (mostly for experts -
+read don't use them unless you know what you're doing):
+
+``prefixes``
+  Overrides or sets the list of prefixes in ``buildout.prefixes``.  If not
+  given, the value of this property defaults to ``buildout.prefixes``. Both can
+  be empty, which makes this recipe default to using standard available paths.
+
+``eggs``
+  The eggs option specifies a list of eggs to use for **building** the scripts
+  of this recipe. Each string must be given on a separate line. If not given,
+  the value of this property defaults to ``buildout.eggs``.
+
+``dependent-scripts``
+  If set to the string ``true``, scripts will be generated for all required
+  eggs in addition to the eggs specifically named. By default, it is ``false``
+  to avoid the clutter it may cause on very high-level packages, with numerous
+  dependencies exporting scripts.
+
+``interpreter``
+  The name of a script to generate that allows access to a Python interpreter
+  that has the path set based on the eggs installed. If you don't specify
+  anything, the default value ``python`` will be used.
+
+``extra-paths``
+  Extra paths to be appended in a generated script. To prepend, use the
+  ``prefixes`` entry.
+
+``nose-flags``
+  These are extra flags that are **appended** to the given ``nosetests``
+  command line, automatically. Use this to preset arguments you like running
+  all the time like ``-v``, for example.
+
+
+.. include:: links.rst
diff --git a/doc/conf.py b/doc/conf.py
index 01172471d6f07d3b68b415634acc72e88ce58085..29d406d490c7f26d49d5c37da98be39138da2af1 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -4,6 +4,7 @@
 import os
 import sys
 import glob
+import pkg_resources
 
 
 # -- General configuration -----------------------------------------------------
@@ -27,6 +28,25 @@ extensions = [
     'sphinx.ext.mathjax',
     ]
 
+# Be picky about warnings
+nitpicky = True
+
+# Ignores stuff we can't easily resolve on other project's sphinx manuals
+nitpick_ignore = []
+
+# Allows the user to override warnings from a separate file
+if os.path.exists('nitpick-exceptions.txt'):
+    for line in open('nitpick-exceptions.txt'):
+        if line.strip() == "" or line.startswith("#"):
+            continue
+        dtype, target = line.split(None, 1)
+        target = target.strip()
+        try: # python 2.x
+            target = unicode(target)
+        except NameError:
+            pass
+        nitpick_ignore.append((dtype, target))
+
 # Always includes todos
 todo_include_todos = True
 
@@ -57,14 +77,17 @@ project = u'bob.buildout'
 import time
 copyright = u'%s, Idiap Research Institute' % time.strftime('%Y')
 
+# Grab the setup entry
+distribution = pkg_resources.require(project)[0]
+
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = open('../version.txt').read().strip()
+version = distribution.version
 # The full version, including alpha/beta/rc tags.
-release = version
+release = distribution.version
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -186,14 +209,49 @@ html_favicon = 'img/favicon.ico'
 # Output file base name for HTML help builder.
 htmlhelp_basename = project_variable + u'_doc'
 
+
 # -- Post configuration --------------------------------------------------------
 
+# Included after all input documents
+rst_epilog = """
+.. |project| replace:: Bob
+.. |version| replace:: %s
+.. |current-year| date:: %%Y
+""" % (version,)
+
 # Default processing flags for sphinx
 autoclass_content = 'class'
 autodoc_member_order = 'bysource'
 autodoc_default_flags = [
   'members',
   'undoc-members',
-  'inherited-members',
   'show-inheritance',
   ]
+
+# For inter-documentation mapping:
+intersphinx_mapping = {
+    'python':        ('https://docs.python.org/%d.%d/' % sys.version_info[:2], None),
+    'six':           ('https://six.readthedocs.io', None),
+    'setuptools':    ('https://setuptools.readthedocs.io/en/latest/', None),
+    'bob.extension': ('http://www.idiap.ch/software/bob/docs/bob/bob.extension/stable/', None),
+    }
+
+# We want to remove all private (i.e. _. or __.__) members
+# that are not in the list of accepted functions
+accepted_private_functions = ['__array__']
+
+def member_function_test(app, what, name, obj, skip, options):
+  # test if we have a private function
+  if len(name) > 1 and name[0] == '_':
+    # test if this private function should be allowed
+    if name not in accepted_private_functions:
+      # omit privat functions that are not in the list of accepted private functions
+      return skip
+    else:
+      # test if the method is documented
+      if not hasattr(obj, '__doc__') or not obj.__doc__:
+        return skip
+  return False
+
+def setup(app):
+  app.connect('autodoc-skip-member', member_function_test)
diff --git a/doc/development.rst b/doc/development.rst
new file mode 100644
index 0000000000000000000000000000000000000000..c5c14d9378b0cd4aef687106e6a6663343753059
--- /dev/null
+++ b/doc/development.rst
@@ -0,0 +1,101 @@
+.. _bob.buildout.dev:
+
+=========================
+ Developing bob.buildout
+=========================
+
+You can quickly test this package by running the following commands:
+
+.. code-block:: sh
+
+   $ buildout
+   $ ./bin/nosetests -sv
+
+Testing is limited to certain internal functionality. If you want to do an
+extensive test and make sure changes are operating when you use this package to
+create an environment for *another* package, please read on.
+
+
+Cross-developing with another package
+-------------------------------------
+
+This is a chicken-and-egg problem as developing another package with a *new*
+version of this package requires a working installation of ``bob.buildout``. In
+order to break the loop, you'll need to first buildout with a simplified
+version of ``buildout.cfg``, to tell buildout ``bob.buildout`` is being
+developed alongside the test package. As an example, we'll develop
+``bob.buildout`` in a ``bob.extension`` checkout:
+
+.. code-block:: sh
+
+   $ git clone https://gitlab.idiap.ch/bob/bob.extension
+   $ cd bob.extension
+   # create the file first.cfg with the following contents:
+   $ cat first.cfg
+   [buildout]
+   parts =
+   develop = src/buildout
+   $ mkdir src
+   $ git clone https://gitlab.idiap.ch/bob/bob.buildout src/bob.buildout
+
+Setup your base conda-environment as usual and the, run ``buildout -c
+first.cfg``:
+
+
+.. code-block:: sh
+
+   $ buildout -c first.cfg
+
+
+The previous command should not download anything from PyPI_ and will create a
+symbolic egg link in ``develop-eggs`` called ``bob.buildout.egg-link``. To make
+sure your ``first.cfg`` bootstrap procedure worked, check there. Now, slightly
+modify ``buildout.cfg`` from ``bob.extension`` to include a new line in the
+``buildout.develop`` entry before ``.``, so the new buildout will also take the
+bootstrapped buildout into consideration. It should look like this:
+
+
+.. code-block:: sh
+
+   $ cat buildout.cfg
+   [buildout]
+   parts = scripts
+   develop = src/bob.buildout
+             .
+   eggs = bob.extension
+   extensions = bob.buildout
+   newest = false
+   verbose = true
+
+   [scripts]
+   recipe = bob.buildout:scripts
+   dependent-scripts = true
+
+
+Now run buildout normally, against the modified ``buildout.cfg``:
+
+.. code-block:: sh
+
+   $ buildout
+   ...
+
+
+This last step should provide you with a setup as performed by the
+bleeding-edge version of bob.buildout you have checked-out on the ``src``
+directory. You can modify it and re-run ``buildout`` until everything looks in
+order.
+
+
+Releasing bob.buildout
+----------------------
+
+This is a standard |project| package and therefore you **must** follow the
+standard releasing procedure using ``bob_new_version.py`` or any more recent
+script available for such purpose.
+
+You may create a ``bob.extension``-based environment for such as per
+instructions above or start from a pure conda-based install which contains
+``bob.extension`` and run that script from it.
+
+
+.. include:: links.rst
diff --git a/doc/guide.rst b/doc/guide.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b21092a92fccba75ffe84e3784c6626a55924696
--- /dev/null
+++ b/doc/guide.rst
@@ -0,0 +1,218 @@
+.. bob.buildout.guide:
+
+=========================================
+ Local development of |project| packages
+=========================================
+
+Very often, developers of |project| packages are confronted with the need to
+clone repositories locally and develop installation/build and runtime code.
+While it is possible to use conda_ for such, the use of `zc.buildout`_ offers
+an quick and easy alternative to achieve this. It allows the creation of
+isolated, directory-based python development environments that can be modulated
+based on the development needs of the current package(s) one needs to work on.
+
+The steps involved in creating a development environment are the following:
+
+1. Checkout from gitlab_ the package the user wants to develop
+2. Create a conda installation containing base packages that the current
+   package being developed requires
+3. *Optionally*, create a buildout configuration that allows the
+   cross-development of packages
+4. Run the application ``buildout`` to set-up the desired development
+   environment
+
+This guide is a step-by-step guide in performing these.
+
+
+Checking out |project| package sources
+--------------------------------------
+
+|project| packages are developed through Gitlab_. In order to checkout a
+package, just use git_:
+
+
+.. code-block:: sh
+
+   $ git clone https://gitlab.idiap.ch/bob/<package>
+
+
+Where ``<package>`` is the package you want to develop. Various packages exist
+in |project|'s gitlab_ instance.
+
+
+Create a base conda-installation
+--------------------------------
+
+The base conda installation should contemplate all packages that you want to
+develop against. This is typically listed in the package's
+``requirements.txt``, but may also include test dependencies listed in
+``test-requirements.txt`` depending on the package. The file
+``conda/meta.yaml`` should be considered the canonical source for information
+concerning package installation and deployment. After following `Bob's
+installation`_ instructions, install all packages listed on the ``meta.yaml``
+file using a single conda installation command.
+
+For example, if the package one needs to develop lists build dependencies
+``A``, ``B`` and ``C`` and test dependencies ``T`` and ``U``, the following
+command-line should suffice once you followed `Bob's installation`_
+instructions:
+
+
+.. code-block:: sh
+
+   $ cd <package>
+   $ cat conda/meta.yaml #inspect contents and decide what to install
+   ...
+   $ conda create -n dev A B C T U bob.buildout
+   ...
+   $ source activate dev #ready to develop your package
+
+
+**Optional** Use of not-yet-released conda packages
+===================================================
+
+When developing and testing new features, one often wishes to work against the
+very latest, *bleeding edge*, available set of changes on dependent packages.
+If that is the case, consider adding our `conda beta channel`_ alongside conda
+channels available for download in your condarc_ file.
+
+The location of ``.condarc`` is configurable, but it is often set in
+``${HOME}/.condarc``. Read about condarc_ online if you are in doubt.
+
+After our `conda beta channel`_ is included on your configuration, proceed as
+above to create an environment with the latest dependencies instead of the
+latest *stable* versions of each package.
+
+
+**Optional** Automated environment creation
+===========================================
+
+It is possible to automate the above procedure using a script that tries to
+automatically parse build and test requirements in ``conda/meta.yaml`` and
+create the required development environment from scratch. This script lives in
+the package ``bob.admin``. The first step is to checkout ``bob.admin``
+alongside the package you're developing:
+
+
+.. code-block:: sh
+
+   $ cd ..
+   $ ls
+   <PACKAGE>
+   $ git checkout https://gitlab.idiap.ch/bob/bob.admin
+   $ ls
+   <PACKAGE>
+   bob.admin
+   $ cd <PACKAGE>
+
+
+.. note::
+
+   If you already have checked out ``bob.admin``, make sure to update it with
+   ``git pull``. We're constantly making improvements to this package.
+
+
+Once ``bob.admin`` is available alongside your package, make sure both
+``conda`` and ``conda-build`` are installed **and updated** on the root
+environment of your conda_ installation. The automated script requires conda_
+version 4.4 or above and ``conda-build`` version 3 or above. It also requires
+the package ``pyyaml`` to be installed on the root of your conda installation.
+Follow this recipe to get all up-to-date and ready:
+
+
+.. code-block:: sh
+
+   $ conda update -n root conda conda-build
+   ...
+   $ conda install -n root pyyaml
+   ...
+
+
+.. note::
+
+   Notice the application ``conda`` is in my ``${PATH}`` and therefore the
+   shell can find it easily. **Make sure you do the same**.
+
+
+Now that you're all set, just call the script
+``bob.admin/conda/conda-bootstrapy`` and pass the name of the resulting
+environment you'd like to create:
+
+
+.. code-block:: sh
+
+   $ cd <PACKAGE>
+   $ ../bob.admin/conda/conda-bootstrap.py dev
+   ...
+
+
+This will parse the conda recipe from your package and create a new conda
+environment on your conda installation called ``dev``. The environment ``dev``
+contains all build *and* test dependencies required for your package. Activate
+this environment and you're ready.
+
+.. note::
+
+   By default, our script **will include** our `conda beta channel`_ while
+   creating your environment. You may modify the file
+   ``bob.admin/conda/build-condarc`` if you'd like to include or remove
+   channels.
+
+   In this setup, we bypass your own condarc_ setup and use a stock version
+   provided with ``bob.admin``.
+
+
+Running buildout
+----------------
+
+The last step is to create a hooked-up environment so you can quickly test
+local changes to your package w/o necessarily creating a conda-package. This
+step is the easiest:
+
+
+.. code-block:: sh
+
+   $ cd <PACKAGE> #if that is not the case
+   $ source activate dev
+   $ buildout
+   ...
+
+zc.buildout_ works by modifying the load paths of scripts to find the correct
+version of your package sources from the local checkout. After running,
+buildout creates a directory called ``bin`` on your local package checkout. Use
+the applications living there to develop your package. For example, if you need
+to run the test suite:
+
+
+.. code-block:: sh
+
+   $ ./bin/nosetests -sv
+
+
+A python interpreter clone can be used to run interactive sessions:
+
+
+.. code-block:: sh
+
+   $ ./bin/python
+
+
+**Optional** Cross-development of dependencies
+----------------------------------------------
+
+From time to time, you may wish to cross-develop multiple projects at once. For
+example, you may wish to develop ``bob.bio.face``, while *also* making
+modifications to ``bob.bio.base``. In this case, you'll need to create a
+buildout recipe (i.e., a new ``.cfg``) file that instructs buildout to also
+checkout the sources for ``bob.bio.base`` while setting up the local structure
+for ``bob.bio.face``. Follow our development guide from ``bob.extension`` at
+:ref:`bob.extension` for more instructions on this step. Once your new ``.cfg``
+is ready, use it like this setup:
+
+
+.. code-block:: sh
+
+   $ buildout -c newrecipe.cfg
+
+
+.. include:: links.rst
diff --git a/doc/index.rst b/doc/index.rst
index 38da2a77d6c039258529a4b41020b1a182645134..c2a3590b9f239d7191bfaa6f3ec4f7c7f65546f8 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,19 +1,57 @@
 .. vim: set fileencoding=utf-8 :
-.. Andre Anjos <andre.anjos@idiap.ch>
 .. Mon 17 Mar 09:23:45 2014 CET
-..
-.. Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland
 
 .. _bob.buildout:
 
-====================
- Bob Buildout Rules
-====================
+==============
+ Bob Buildout
+==============
 
-.. todolist::
+This package includes an extension and a recipe to make it easy to create
+local, directory-based complete development environments for |project|
+packages. While |project| packages are distributed as conda-based installable
+packages, the use of zc.buildout_ may greaty shorten development cycles as it
+avoids the conda-build step, which can be somewhat lengthy (e.g. for packages
+with C/C++ bindings).
 
+zc.buildout_, unlike conda_, can *not* handle non-python-based packages. It is
+therefore a tool to quickly create deployments or test changes on
+**python-based distributable packages**. It follows that, in order to use
+zc.buildout_, packages *need* to be python-based packages. Luckily, most of
+|project| packages fit in this category, besides also being conda_ packages, so
+zc.buildout_ can be used for development purposes in this context. Although
+zc.buildout_ supports deployment, it is currently **not** used for this purpose
+in the context of |project|. Our dependence list goes beyond Python-only
+packages (e.g. ffmpeg or blitz++) and a full-stack software deployment cannot
+be easily achieved relying only on this python development tool.
 
-.. todo:: Write documentation of this package
+zc.buildout_ uses Python setuptools_ to create a directory structure that
+contains scripts and dependencies which can defined in a *buildout recipe*.
+Once a buildout recipe is interpreted, zc.buildout_ will make sure all listed
+dependencies are satisfied and automatically instantiate scripts with changed
+load paths that take in consideration all python packages. In order to satistfy
+dependencies, zc.buildout_ may download missing python-based packages from
+PyPI_, the Python Package Index. In the context of |project|-based package
+development, we seldomly use this feature though.
+
+Because zc.buildout_ is used for |project| package development since quite
+sometime, most packages in the |project| ecosystem include a file called
+``buildout.cfg`` that can be used by zc.buildout_ to build a quick,
+*throw-away* development environment for the current package. A common
+misconception is that one must checkout a |project| package in order to run
+buildout. That is **not** true.  zc.buildout_ is an independent development
+tool that just deployes a python-based software stack based on a *recipe*. If
+the *recipe* mentions the code of a package on the current directory, the setup
+will include this. If it doesn't, then it won't. We typically don't use
+zc.buildout_ to create deployments for |project| packages - we normally defer
+this task to conda_ as it can handle non-pythonic dependencies in a much better
+and uniform way. That said, it is possible to create python-only based
+deployments using zc.buildout_ *without* being necessarily in the root
+directory of a |project| package.
+
+This document explains how to use zc.buildout_ and ``bob.buildout``'s recipe
+and extension to construct development environments for your |project|
+packages.
 
 
 Documentation
@@ -22,6 +60,11 @@ Documentation
 .. toctree::
    :maxdepth: 2
 
+   guide
+   buildout
+   development
+   py_api
+
 
 Indices and tables
 ------------------
diff --git a/doc/links.rst b/doc/links.rst
index 4884a0e927c6a2a088d808a2f344f75d628be256..0a638af018ab4121f9532773e7d945748111f07b 100644
--- a/doc/links.rst
+++ b/doc/links.rst
@@ -1,23 +1,25 @@
 .. vim: set fileencoding=utf-8 :
-.. Andre Anjos <andre.anjos@idiap.ch>
-.. Tue 20 Mar 2012 08:57:32 CET
-..
-.. Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland
+.. Tue 27 Feb 2018 09:11:11 CET
 
 .. _bob's website: https://www.idiap.ch/software/bob
 .. _bob: https://www.idiap.ch/software/bob
+.. _bob's installation: https://www.idiap.ch/software/bob/install
+.. _bob packages: https://www.idiap.ch/software/bob/packages
 .. _c++: http://www2.research.att.com/~bs/C++.html
+.. _conda: https://conda.io
+.. _conda channel: https://www.idiap.ch/software/bob/conda/
+.. _conda beta channel: https://www.idiap.ch/software/bob/conda/label/beta
+.. _condarc: https://conda.io/docs/user-guide/configuration/use-condarc.html
 .. _distutils: http://docs.python.org/distutils/
 .. _git: http://git-scm.com/
-.. _github: http://github.com/
+.. _gitlab: https://gitlab.idiap.ch/bob/
 .. _idiap: http://www.idiap.ch
 .. _ipython: http://ipython.scipy.org
 .. _nose: https://nose.readthedocs.org/en/latest/
 .. _pep 386: http://www.python.org/dev/peps/pep-0386/
 .. _python: http://www.python.org
 .. _pypi: http://pypi.python.org
-.. _satellite packages: https://github.com/idiap/bob/wiki/Satellite-Packages
-.. _setuptools: http://trac.edgewall.org/wiki/setuptools
+.. _setuptools: https://setuptools.readthedocs.io
 .. _sphinx: http://sphinx.pocoo.org
 .. _zc.buildout: http://pypi.python.org/pypi/zc.buildout/
 
diff --git a/doc/nitpick-exceptions.txt b/doc/nitpick-exceptions.txt
new file mode 100644
index 0000000000000000000000000000000000000000..58a8167371ee718c6c9e9bd6083246f7725b3265
--- /dev/null
+++ b/doc/nitpick-exceptions.txt
@@ -0,0 +1 @@
+py:class zc.recipe.egg.egg.Scripts
diff --git a/doc/py_api.rst b/doc/py_api.rst
new file mode 100644
index 0000000000000000000000000000000000000000..d7724473ec709ee6ce705649b5ea9a4fdcd7b6cc
--- /dev/null
+++ b/doc/py_api.rst
@@ -0,0 +1,33 @@
+.. _bob.buildout.api:
+
+============
+ Python API
+============
+
+This section includes information for using the Python API of ``bob.buildout``.
+
+
+Extension
+---------
+
+.. automodule:: bob.buildout.extension
+
+
+Recipe
+------
+
+.. automodule:: bob.buildout.scripts
+
+
+Other Modules
+-------------
+
+.. automodule:: bob.buildout.envwrapper
+
+.. automodule:: bob.buildout.tools
+
+.. automodule:: bob.buildout.script
+
+.. automodule:: bob.buildout.python
+
+.. automodule:: bob.buildout.dbpy