IPython

IPython began in 2001 as a side project by Fernando Perez, then a physics graduate student, who wanted an interactive Python prompt as capable as the consoles he had used in Mathematica and IDL. The standard Python REPL was spartan: no tab completion, no command history worth the name, no easy way to inspect objects or rerun shell commands inline. IPython set out to make Python itself a comfortable place to do exploratory scientific work, an “enhanced interactive Python shell.” Its own site still describes the project as offering “a rich architecture for interactive computing with a powerful shell, Jupyter kernel support, and flexible tools for parallel and distributed computing” (https://ipython.org/).

The shell layered conveniences on top of the language: object introspection with a trailing question mark, tab completion, persistent history, and a system of “magics,” built-in commands for profiling, debugging, timing, and running external code, invoked with a percent sign such as %timeit, %debug, and %run (https://ipython.org/). These magics gave the interactive session capabilities that plain Python statements could not express cleanly, blurring the line between a programming language prompt and a workbench.

The deeper contribution was architectural. Fernando Perez and Brian Granger described the design in “IPython: A System for Interactive Scientific Computing,” published in Computing in Science and Engineering in 2007 (DOI 10.1109/MCSE.2007.53). They separated the thing that executes code, the kernel, from the thing a person types into, the frontend, communicating over a defined protocol. That split is the load-bearing idea: a kernel could run in one process while a terminal, a Qt console, or eventually a browser served as the interface, and the same kernel could even drive parallel and distributed computation.

When Project Jupyter spun out of IPython in 2014, this kernel design was what it carried forward. The IPython kernel became the default Python kernel “that powers the Jupyter Notebook and JupyterLab, enabling interactive computing in web-based environments” (https://ipython.org/), while the kernel protocol let dozens of other languages plug into the same notebook frontend. The name Jupyter itself nods to Julia, Python, and R, but the machinery underneath was IPython’s.

IPython is a clear case of dev tooling shaping a field. Long before “notebook” became shorthand for data science and machine learning experimentation, a graduate student’s frustration with a bare interactive prompt produced an architecture that decoupled execution from interface. That decoupling is why a model can be trained from a browser tab today, and why the unglamorous REPL is one of the most consequential pieces of scientific software infrastructure.

Sources

Last verified June 8, 2026