Skip to content

Releases: xonsh/xonsh

v0.23.8

30 May 04:46
675a5c1

Choose a tag to compare

0.23.8 (2026-05-28)

Features

Fixes

Refactoring

v0.23.7

17 May 21:48
94350a4

Choose a tag to compare

0.23.7 (2026-05-17)

Features

Fixes

Documentation

Xonsh World

v0.23.6

11 May 14:26
1dbd723

Choose a tag to compare

0.23.6 (2026-05-11)

Shining Features

Allow comments in multiline commands (#6417)

Now you can comment line in a multiline command:

curl https://xon.sh \
  -fsSL \
  # --compressed \
  -H "User-Agent: curl"

Add xontrib info (#6407)

xontrib info output_search
Name: output_search
Source: xontrib.output_search at /Users/snail/.local/xonsh-env/lib/python3.14/site-packages/xontrib/output_search.py
Description: Get identifiers, paths, URLs and words from the previous command output and use them for the next command in xonsh shell.
Loaded: yes

Features

Fixes

v0.23.5

05 May 18:12
d1062a5

Choose a tag to compare

0.23.5 (2026-05-05)

Features

Fixes

Xonsh World

v0.23.4

03 May 13:46
4645eec

Choose a tag to compare

0.23.4 (2026-05-03)

Fixes

Xonsh World

v0.23.3

30 Apr 20:47
a02067e

Choose a tag to compare

0.23.3 (2026-04-30)

image

Features

  • Cross-platform: Better FreeBSD support: added defaults, fixed jail tests and found and fixed FreeBSD specific pipeline behavior (#6375) (ced252e), @anki-code (@nunotexbsd, @yonas)
  • Cross-platform: Better Android/Termux support: all tests are reviewed and fixed, added ON_ANDROID and ON_TERMUX variables, additional TERMUX support was implemented (#6382) (c3aefaf), @anki-code
  • Debug: Added frame to @.debug.breakpoint() (#6376) (8e17615), @anki-code (@goodboy)

Fixes

v0.23.2

26 Apr 19:28
7264d56

Choose a tag to compare

0.23.2 (2026-04-26)

This fix release focused on improving the completer and adding an instant debugging tool and GitHub Actions.

Features

Fixes

Documentation

v0.23.1

21 Apr 16:22
a3ec391

Choose a tag to compare

0.23.1 (2026-04-21)

Fix release.

Fixes

v0.23.0

20 Apr 14:43
e80995c

Choose a tag to compare

0.23.0 (2026-04-19)

Xonsh 0.23 REFORGED

Release Description

Overview

A major release focused on reliability and language capabilities. The process subsystem has been reworked with proper thread safety, file descriptor management, and pipe handling across all platforms. The parser now supports PEP 701 f-strings, the walrus operator for env variables, and positional-only arguments. Completions are smarter — sorted by substring match position with visual highlighting. Callable aliases gained a local env overlay, decorator-based configuration, and full help/superhelp support. Globbing is unified under $DOTGLOB with a new regex match glob m. Over 150 potential breaking cases were identified and resolved, making this the most stable release of xonsh to date.

Changes requiring attention

Process subsystem reworked (#6159)

Pipe file descriptor management, thread safety, and signal handling have been extensively investigated, rigorously tested, and corrected. The internal thread management mechanisms for callable aliases have been stabilized and thoroughly stress-tested. Terminal handshake has been added, along with additional OS signal handling to improve behavior when xonsh process groups run in the foreground, background, or as child processes. We ask you to report any issues related to I/O and file descriptors to the issue tracker, so we can catch potential edge cases.

Error handling for subprocess chains enabled by default (#6267)

Xonsh now treats subprocess commands like real code. Every subprocess chain raises an exception on non-zero exit by default ($XONSH_SUBPROC_RAISE_ERROR=True), so a failing command in a function or loop stops execution immediately instead of silently letting subsequent logic run on invalid state:

ls nofile                          # exception
ls nofile || echo fallback         # no exception — chain handled the error
echo ok && ls nofile ; echo done   # exception on the first chain

def func():
    echo Start
    ls nofile    # exception
    echo End
func()
# BEFORE: Start <stderr> End
# NOW: Start <stderr> <exception>

Captured subprocess !() does not raise — full control is on the user:

if !(ls nofile):    # no exception — user handles the result
    pass

For granular error handling, use command decorators and env swap:

@error_ignore ls nofile                        # suppress for this command
with @.env.swap(XONSH_SUBPROC_RAISE_ERROR=False):
    ls nofile                                  # suppress for this block
!(@error_raise ls nofile)                      # raise exception

The old $RAISE_SUBPROC_ERROR (raise exception on every command) is renamed to $XONSH_SUBPROC_CMD_RAISE_ERROR (default False).

Globbing: $DOTGLOB now controls all globs including regex (#6234)

Previously regex globs (r`\..*`) and backtick globs always matched dotfiles regardless of $DOTGLOB. Now all glob forms respect it uniformly. Since $DOTGLOB defaults to False, existing scripts that use regex globs to match hidden files will stop finding them. Set $DOTGLOB = True if you want to match hidden files.

Prompt: Completions match by substring, not just prefix (#6125)

Completions now match by substring, not just by prefix. Typing deploy will find dev-xonsh-deploy, and results are sorted by the position of the match — earlier occurrences rank higher.

Don’t forget about $COMPLETION_MODE = "menu-complete" if you want to select the first option immediately.

Shining Features

Substring Completions (#6125)

aliases |= {'dev-xonsh-deploy': 'echo'}
deploy<Tab>
# dev-xonsh-deploy    # matched by substring, sorted by position

PEP 701 f-strings (#6202)

echo f"{"$HOME"}"
# /home/snail
echo f"{'hello':>10}"
#      hello

Compile XSH Files, Xontribs and Imports (#6167)

# ~/.xonshrc compiled on first load
import mymod           # mymod.xsh compiled and cached
xontrib load gitinfo   # xontrib gitinfo.xsh compiled and cached

Non-blocking Prompt (#6183)

Syntax highlighting is now non-blocking — typing, completion and navigating through history feel instant regardless of $PATH size. Especially noticeable on Windows with slow directories. Slow $PATH directories can be cached using $XONSH_COMMANDS_CACHE_READ_DIR_ONCE.

Regex glob m with match groups and chain processing (#6235)

for parent, file in m`src/(.*)/(.*\.png)`:  # return match groups
    print(parent, file)

m`src/.*`.files().paths()  # chain processing
m`src/(.*)/(.*\.py)`.select(1).unique().sorted()  # group chain processing

Help and Superhelp for Environment Variables and Aliases (#6222, #6263)

$PATH?     # shows variable description

my-ls?               # shows alias, resolved alias and executable path
my-callable-alias??  # + shows source code and file location of callable alias

Instant Click CLI for Callable Aliases (#6265)

@aliases.register_click_command
@aliases.click.option('--name', default='World')
def _hello(ctx, name):
    """Greet someone."""
    print(f'Hello {name}!', file=ctx.stdout)
    print(f'Callable alias args like stdout are available in ctx.', file=ctx.stdout)
    ctx.click.echo('And click too.')

hello --name Snail    # Hello Snail
hello --help          # shows usage, options, description
hello??               # shows source code and file location if it was imported

Command Decorators List Extended (#6212)

Added @path, @paths, @error_ignore, @error_raise.

$(@path echo '/bin')                 # Path('/bin')
echo 1 && @error_ignore ls nonono    # no exception that stopped the script execution

Take a look at the documentation if you want to create your own.

Emoji and Symbols (#6246)

Activate completer:

$XONSH_COMPLETER_EMOJI_PREFIX = "::"     # disabled by default
$XONSH_COMPLETER_SYMBOLS_PREFIX = ":::"  # disabled by default

::<Tab>        # shows emoji picker: 🌓✨
::cat<Tab>     # shows 🐈 related emoji
::<Tab>        # shows symbols picker: ⚝
:::arr<Tab>    # shows arr symbols: →, ↔, ↗.

Take a look at the documentation if you want to add random emoji to prompt.

Prompt: Tab/Shift-Tab indent and Shift+Enter newline (#6213)

IDE-like experience in the prompt: select lines of a multiline command with Shift+Arrow, then Tab/Shift-Tab to indent/dedent the selection. Shift+Enter inserts a newline without submitting.

Cursor Position for Next Command (#6244)

$XONSH_PROMPT_NEXT_CMD = 'echo My name is @(<edit>)'

Windows Script Execution (#6180)

$PATHEXT = ['.xsh', '.py']
./myscript.xsh    # runs in xonsh
./myscript.py     # runs in python
./myscript        # resolved by PATHEXT

Xonsh Activator in virtualenv

Support for the xonsh activator will be restored in virtualenv soon.

Xonsh Packaging for Nix (#6288)

Now we have Nix Flake that builds xonsh from git source (thanks @SamLukeYes!):

nix build 'github:xonsh/xonsh'

Xonsh Installer for Windows

Experimental. Now we have Xonsh installers for Windows 8.1+.

Xonsh Nightly Build

We introduced continuous nightly build that has Xonsh AppImage, Windows Installers and experimental Flatpak and Linux Nuitka Binary.

Xonsh Documentation

Now xonsh documentation has much more information, examples and code.

Xonsh Merch

Our friends at HELLOTUX have created an awesome collection for us — including bags, backpacks, T-shirts, and hoodies. Check it out - https://www.hellotux.com/xonsh

Release Notes

Important changes

  • Error Handling: Raising exceptions for subprocess chains is enabled by default. Logical operations (||, &&) are handled correctly. $RAISE_SUBPROC_ERROR deprecated in favor of $XONSH_SUBPROC_CMD_RAISE_ERROR (#6267)
  • Processes: Major improvements to core logic for threads, pipes, file descriptors, and process output management across all platforms (#6159)
  • Parser: First version with support of PEP 701 f-strings (#6202)
  • Completer: Order completions by both prefix and substring matches, sort by substring position. Remove $CASE_SENSITIVE_COMPLETIONS (#6125)
  • Glob: $DOTGLOB now controls all forms of globbing uniformly (normal, regex) with a dedicated documentation page (#6234)
  • Performance: Compile xsh xontribs and imports (#6167)
  • ...
Read more

Nightly build

16 Apr 23:50

Choose a tag to compare

Nightly build Pre-release
Pre-release

xonsh 7b0d1a8 (2026-06-09 06:33:40 UTC)

  • xonsh-nightly.AppImage - xonsh 7b0d1a8
  • xonsh-nightly-inno5-setup.exe - xonsh 7b0d1a8
  • xonsh-nightly-inno6-setup.exe - xonsh 7b0d1a8
  • xonsh-nightly.flatpak - xonsh 7b0d1a8
  • xonsh-nightly-nuitka-linux.bin - xonsh 7b0d1a8
  • xonsh-nightly-nuitka-macos.bin - xonsh 7b0d1a8


image