All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased - ReleaseDate
0.7.0 - 2026-03-16
- Made fields private:
PtyReplSession,PtySession,StreamSession,Options - Made
non_exhaustive:Options,Error - Remove from the API:
find,process::wait,process::signal
0.6.4 - 2026-03-16
- Add builder methods to
Options - Add
PtySession::new - Add
PtySession::process - Add
PtyReplSession::new,PtyReplSession::echo_on,PtyReplSession::quit_command
- Make
process::wait::WaitStatusandprocess::signal::Signalavailable directly inprocess
- MSRV is 1.85
0.6.3 - 2026-01-15
- Don't pre-emptively escape values in
Error::Timeout
0.6.2 - 2025-06-18
- Ensure consistent behavior through
TERM=
0.6.1 - 2025-05-01
- MSRV updated to 1.70
- Update
nix,which,thiserror
0.6.0 - 2024-11-06
PtyProcess::get_file_handle()returns an error if dup() failsspawn_bash()returns error iftempfile::NamedTempFile::new()orwrite!()fails- Renamed
Error::SendContolErrortoError::SendControlError - MSRV updated to 1.65
- "which" functionality was added (feature gated)
- Option to skip ansi escape codes
- file descriptor leak was fixed in
PtyProcess::new() - Documentation cleanup
- Replace error-chain with thiserror
- Make any_exp return results deterministically
- Fix argument tokenization
- Update to nix 0.25
- Fix https link to pexpect docs
- Many clippy fixes
- Remove unnecessary closures
- Fix EOF detection on nightly
- Fix examples
- PtySession now works with any stream type, e.g. also tcp streams are supported now (thanks, thomasantony)
- breaking: PtyBashSession was renamed and generalized into PtyReplSession to allow an interface for other REPLs
- better error messages in case of timeout to help debug when you expect
strings which you think are there, but are e.g. intermixed with newlines
or ctrl characters: newlines are printed as
\n, carriage returns as\rand control characters as^ - new:
session::spawn_python, just as a proof of concept and documentation really, I don't think this will be used..
spawn()now parses single/doublequotes better. E.g.ed -p '> 'is now tokenized into["ed", "-p" "'> '"]
- breaking:
executetakes string to wait for as second argument (before it waited 10ms which was way too fragile) - if process doesn't end on SIGTERM a
kill -9is sent after timeout is elapsed
- ctrl-* used to consume one line. As it could be that the reader did not consume all
output data yet this could have been a not-yet-read line. Therefore
send_controlno longer consumes a line.
All exp_* methods now also return the yet unread string and/or the matched string:
exp_string: return the yet unread stringexp_regex: return a tuple of (yet unread string, matched string)exp_eofandexp_nbytes: return the yet unread string
- each execution of rexpect left a temporary file in /tmp/ this is now no longer the case
- try_read was blocking when there was no char ready (!) -> fixed