.. _roadmap:

===================
Development roadmap
===================

IPython is an ambitious project that is still under heavy development.
However, we want IPython to become useful to as many people as possible, as
quickly as possible. To help us accomplish this, we are laying out a roadmap
of where we are headed and what needs to happen to get there. Hopefully, this
will help the IPython developers figure out the best things to work on for
each upcoming release.

Work targeted to particular releases
====================================

Release 0.11
------------

* Full module and package reorganization (done).

* Removal of the threaded shells and new implementation of GUI support
  based on ``PyOSInputHook`` (done).

* Refactor the configuration system (done).

* Prepare to refactor IPython's core by creating a new component and 
  application system (done).

* Start to refactor IPython's core by turning everything into configurables
  (mostly done).

Release 0.12
------------

* Continue to refactor IPython's core by turning everything into configurables.

* Merge draft html notebook (started).

* Add two-process Terminal frontend using ZMQ architecture.


Major areas of work
===================

Refactoring the main IPython core
---------------------------------

During the summer of 2009, we began refactoring IPython's core. The main
thrust in this work was to make the IPython core into a set of loosely coupled
components. The base configurable class for this is
:class:`IPython.core.configurable.Configurable`. This section outlines the
status of this work.

Parts of the IPython core that have been turned into configurables:

* The main :class:`~IPython.core.interactiveshell.InteractiveShell` class.
* The aliases (:mod:`IPython.core.alias`).
* History management (:mod:`IPython.core.history`).
* Plugins (:mod:`IPython.core.plugin`).
* The display and builtin traps (:mod:`IPython.core.display_trap` and
  :mod:`IPython.core.builtin_trap`).
* The prefilter machinery (:mod:`IPython.core.prefilter`).

Parts of the IPython core that still need to be Configurable:

* Magics.
* Prompts.
* Tab completers.
* Exception handling.
* Anything else.

Process management for :mod:`IPython.parallel`
--------------------------------------------

A few things need to be done to improve how processes are started
up and managed for the parallel computing side of IPython:

* Improve the SSH launcher so it is at least back to the levels of 0.10.2
* We need to add support for other batch systems (LSF, Condor, etc.).


Porting to 3.0
==============

Dropping 2.5 support was a major step towards working with Python 3 due to
future syntax support in 2.6.  IPython 0.11 requires 2.6 now, so 0.10.2 will
be the last IPython release that supports Python 2.5.

We currently have a `separate repo <https://github.com/ipython/ipython-py3k>`_
tracking IPython development that works with Python 3. The core of IPython does
work, but the parallel computing code in :mod:`IPython.parallel` does not yet
work in Python 3, though the only major dependency of the parallel code, pyzmq,
does work on Python 3.

