# What changed in pywinpty

> 22 changes in pywinpty 2 to 3 from its official release notes, upgrade guides and advisories: 8 breaking, 1 new APIs and options. Each one cited. Sources checked 2026-10-29. HTML: https://unstale.sh/pypi/pywinpty/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## pywinpty 3

### Breaking changes

- PTY.iseof() now returns True once output is drained. Read loops that relied on it always returning False may behave differently and may need their condition inverted. (3.1.2) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.2)
- PTY.write() no longer returns 0 for payloads the child received in full. (3.1.1) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.1)
- Python 3.13t wheels are no longer built because PyO3 dropped support for that experimental version. (3.1.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.0)
- The supported Python requirement is now >=3.10; Python 3.9 is no longer supported. (3.0.4) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.4)
- read no longer accepts num_bytes and returns all available bytes in the stream, delegating buffering to downstream consumers. (3.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.0)

### New APIs and options

- pywinpty supports async compatibility on ConPTY through the latest winpty-rs release. (3.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.0)

### Performance

- Reading from a pseudoterminal now takes tenths of microseconds rather than 100ms as previously. (3.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.0)

### Tooling

- Wheels are now built for Python 3.15 and 3.15t on Windows x64 and ARM64. (3.1.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.0)
- ARM64 wheel publishing is introduced, making pywinpty wheels available for ARM64. (3.0.3) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.3)
- The outdated winpty.pyi issue is resolved, so the package's type stub is no longer outdated. (3.0.3) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.3)

### Fixes and other changes

- Closing a PTY no longer waits a fixed five seconds; a blocking read after child exit returns in about 175 ms, and teardown no longer cancels I/O owned by the host application. (3.1.2) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.2)
- Spawning an executable whose path contains a space now works across both backends, with argv[0] intact. (3.1.2) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.2)
- Large output is no longer truncated after the child exits; output drains in full and reaches EOF. (3.1.1) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.1)
- Closing a PTY no longer hangs or leaves the child process orphaned due to a teardown deadlock against ConPTY 1.25. (3.1.1) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.1)
- Arguments passed to the WinPTY backend are no longer lost. (3.1.1) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.1.1)
- The published wheels now include the required native binaries, making the x64 and arm64 releases usable. (3.0.5) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.5)
- Event-driven teardown fixes data loss when a child exits quickly and removes the Drop CPU-spin. (3.0.4) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v3.0.4)

## pywinpty 2

### Breaking changes

- C++ dependencies were dropped as the PTY implementation moved to winpty-rs, simplifying dependencies and the building environment. (2.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v2.0.0)
- PTY no longer accepts the encoding keyword argument. (2.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v2.0.0)
- PtyProcess no longer accepts the encoding keyword argument. (2.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v2.0.0)

### Performance

- The reading thread is now blocking and no longer consumes CPU unnecessarily. (2.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v2.0.0)

### Fixes and other changes

- The backend argument now works on PtyProcess. (2.0.0) — [release notes](https://github.com/andfoy/pywinpty/releases/tag/v2.0.0)
