Skip to main content
ember's start screen: the pixel EMBER: wordmark, version and environment info, the input bar and the key bar

✦ ember

A modern, beautiful interactive Python shell. IPython's power — magics, history, debugging, extensions — rebuilt around a calm terminal UI.

PyPI tests python license

See it in action

ember running in a terminal: cells with results and timing, %timeit, and a typed signature hint

Why ember

  • Readable sessions. Every cell is a block: your code, its output on a rail, and a footer with status, time, result type and Out[N].
  • Help while you type. Completions with type icons, and live signatures with declared and inferred types — greet(name: str, times: int = 1) -> str — even for functions without annotations.
  • Everything you use IPython for. 85 magics, obj?, !shell, session history in SQLite, %autoreload, %debug, %timeit, %prun, top-level await, GUI event loops…
  • Runs IPython code. get_ipython(), IPython.display, custom magics and IPython extensions like line_profiler work unchanged.
  • Feels good. Paste code straight from docs (>>> prompts are stripped), Shift+Enter for new lines, vi or emacs keys, three themes, two layouts.

Install

pipx install ember-shell     # the `ember` command everywhere, isolated from your projects
pip install ember-shell      # or into the current environment

The package is ember-shell on PyPI; the command is ember. To try the latest unreleased code: pip install git+https://github.com/arthurdaquinosilva/ember.git.

Then run ember. Requires Python 3.10+ on macOS or Linux.

Tip: ember runs code with the Python it's installed into. To work with a project's packages, install ember inside that project's virtual environment.

Quick tour

> import json
> data = {"name": "ember", "tags": ["repl", "python"]}
> data?                     # inspect any object (?? shows the source)
> json.*load*?              # wildcard name search
> files = !ls               # shell output as a list with .grep() / .fields()
> %timeit sorted(range(1000))
> %history -g json          # search history across sessions
> %xmode verbose            # tracebacks with local variables
> %debug                    # debugger on the last error (or breakpoint() in your code)
> %help                     # every key, syntax and magic
Enter run the cell (adds a newline while a block is unfinished)
Shift+Enter · Alt+Enter · Ctrl+J insert a newline
Tab / Shift+Tab complete · indent / dedent
→ accept the grey suggestion from history
↑ ↓ · Ctrl+R history · search history
Ctrl+O edit the cell in $EDITOR
Ctrl+C · Ctrl+D clear input / interrupt · exit

Shift+Enter needs a terminal that reports modified keys (iTerm2, WezTerm, Ghostty, kitty, xterm; inside tmux set extended-keys on). Alt+Enter and Ctrl+J work everywhere.

Documentation

Guide What's inside
Features The interface, input syntax, display, errors & debugging, history, shell, GUI and completion
Magic reference All 85 magics with options (generated from the code)
Configuration config.toml, layouts and themes, profiles, startup files, command-line options
IPython compatibility get_ipython(), custom magics, extensions, display protocol, what's different
Releasing How versions are published to PyPI

Command line

ember                        # interactive
ember script.py args…        # run a file (-i to stay interactive afterwards)
ember -m package.module      # run a module
ember -c "print('hi')"       # run a command
ember --profile work --vi --theme nebula --no-startup

Development

git clone https://github.com/arthurdaquinosilva/ember.git && cd ember
python -m venv .venv && .venv/bin/pip install -e '.[dev]'
.venv/bin/python -m pytest              # unit tests
.venv/bin/python scripts/gen_magic_docs.py   # regenerate docs/magics.md
.venv/bin/python scripts/screenshot.py       # re-record docs/assets/demo.svg

ember is built on prompt_toolkit (input and layout), Rich (output), Jedi (completion and signatures) and Pygments (highlighting).

Known limits

  • Terminal only — no Jupyter kernel; images (Image, SVG, %matplotlib inline) show a placeholder.
  • !cmd streams through a pipe, so fully interactive programs (vim, less) should run outside ember.
  • With the real IPython installed, ember leaves it untouched, so libraries calling IPython's own get_ipython() see no shell.

License

MIT © Arthur D'Aquino

Metadata

Release files for ember-shell 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ember-shell 0.2.3
File Size Uploaded
ember_shell-0.2.3.tar.gz 97.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ember-shell 0.2.3
File Interpreter ABI Platform
ember_shell-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 196.7 kB

Release files / ember_shell-0.2.3.tar.gz

Download URL ember_shell-0.2.3.tar.gz
Size 97.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c4ffdea284be36b71a5c0f65cb0695421d3338bfcea65553754a24706b33ee17
BLAKE2b-256 checksum
How to use checksums
eaaa7928a8cbb6477f45d4861cc0812e70e4e176f02f8d6f0f7115bf1d361cdc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / ember_shell-0.2.3-py3-none-any.whl

Download URL ember_shell-0.2.3-py3-none-any.whl
Size 99.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72d693e75bb2a4038b21abf7e3c043616e7294e3756eeed549ca03713e4240b1
BLAKE2b-256 checksum
How to use checksums
b5bcbd987999cf428762c7cb5c3e4568e4991bc9061e048b954e337eb32c538e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.4

2 release files

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page