IPython provides a rich architecture for interactive computing with powerful interactive shells (terminal and Qt-based); a browser-based notebook with support for code, text, mathematical expressions, inline plots, and other rich media; support for interactive data visualization and use of GUI toolkits; flexible, embeddable interpreters to load into your own projects; and easy-to-use high-performance tools for parallel computing.
While the focus of the project is Python, our architecture is designed in a language-agnostic way to facilitate interactive computing in any language. An interactive kernel speaks to clients, such as the terminal or web notebook, via a well-specified protocol, and all features of a kernel are available to all clients. We ship the official IPython kernel, but kernels for other languages, such as Julia and Haskell, are actively developed and used. Additionally, the IPython kernel supports multi-language integration, letting you, for example, mix Python code with Cython; R; Octave; and scripting in Bash, Perl, or Ruby.