tailscale 0.4.0

A work-in-progress Tailscale implementation
Documentation
# Changelog

Record breaking or significant changes here. All dates are UTC.

## Unreleased - August 2026

Put changes for the upcoming release here!

## [0.4.0]https://github.com/tailscale/tailscale-rs/releases/tag/v0.4.0 - 2026-07-08

- Added (Rust API): Experimental support for user-defined tailnet SSH servers using
  [`russh`]https://docs.rs/russh/latest/russh/ and (optionally)
  [`ratatui`]https://docs.rs/ratatui/latest/ratatui/.
  [#178]https://github.com/tailscale/tailscale-rs/pull/178.
- Added (ts_netmon): Monitor network interface changes across Linux and Windows (macOS coming in a
  future release).
  [#214]https://github.com/tailscale/tailscale-rs/pull/214.
- Added (ts_kv_store): Transactional KV store for future use by multiple components (peer tracker,
  control client, etc.).
  [#208]https://github.com/tailscale/tailscale-rs/pull/208.
  [#223]https://github.com/tailscale/tailscale-rs/pull/223.
  [#228]https://github.com/tailscale/tailscale-rs/pull/228.
  [#241]https://github.com/tailscale/tailscale-rs/pull/241.
  [#252]https://github.com/tailscale/tailscale-rs/pull/252.
  [#263]https://github.com/tailscale/tailscale-rs/pull/263.
  [#265]https://github.com/tailscale/tailscale-rs/pull/265.
- Added (ts_control*, ts_derp, ts_runtime): Handling of various peer change messages from the
  control plane.
  [#185]https://github.com/tailscale/tailscale-rs/pull/185.
  [#248]https://github.com/tailscale/tailscale-rs/pull/248.
- Added (ts_runtime): STUN protocol support and periodic STUN checks.
  [#234]https://github.com/tailscale/tailscale-rs/pull/234.
  [#244]https://github.com/tailscale/tailscale-rs/pull/244.
- Added (ts_tunnel): Cleanup of expired sessions that no longer receive traffic.
  [#264]https://github.com/tailscale/tailscale-rs/pull/264.
- Added (ts_python): Type stubs for the `tailscale-py` package, along with minor improvements to
  documentation.
  [#211]https://github.com/tailscale/tailscale-rs/pull/211.
  [#247]https://github.com/tailscale/tailscale-rs/pull/247.
- Fixed (ts_keys, ts_noise): Private key types are properly zeroized on drop and are now passed by
  reference rather than Copy.
  [#221]https://github.com/tailscale/tailscale-rs/pull/221.
  [#245]https://github.com/tailscale/tailscale-rs/pull/245.
  [#249]https://github.com/tailscale/tailscale-rs/pull/249.
  [#251]https://github.com/tailscale/tailscale-rs/pull/251.
- Fixed (ts_packetfilter_serde): `IpRange::Wildcard.iter_prefixes()` now covers the full `::/0`
  IPv6 address space. Thanks to @immanuwell for the report!
  [#212]https://github.com/tailscale/tailscale-rs/pull/212.
- Fixed (ts_netstack_smoltcp{_core}): Overlay network stack now returns an error on IP version
  mismatch between local/remote endpoints instead of panicking.
  [#213]https://github.com/tailscale/tailscale-rs/pull/213.
- Fixed (ts_netstack_smoltcp_core): TCP accept loop now correctly handles CLOSE_WAIT transitions and
  half-open sockets that transition back to the LISTEN state.
  [#200]https://github.com/tailscale/tailscale-rs/pull/200.
  [#239]https://github.com/tailscale/tailscale-rs/pull/239.
- Fixed (ts_runtime): DERP connectivity is now re-established after a control client reconnect.
  [#242]https://github.com/tailscale/tailscale-rs/pull/242.

## [0.3.3]https://github.com/tailscale/tailscale-rs/releases/tag/v0.3.3 - 2026-05-20

- Fixed: don't generate `tailscale.h` on publish.
  [#196]https://github.com/tailscale/tailscale-rs/pull/196.
- Fixed: Elixir CI/CD publishing infrastructure.
  [#197]https://github.com/tailscale/tailscale-rs/pull/197.

## [0.3.2]https://github.com/tailscale/tailscale-rs/releases/tag/v0.3.2 - 2026-05-20

Partial release; this version is tagged and published to PyPI, but was not published to crates.io or hex.pm.

- Fixed: removed `std` dependency from `ts_netstack_smoltcp_core`.
  [#194]https://github.com/tailscale/tailscale-rs/pull/194.

## [0.3.1]https://github.com/tailscale/tailscale-rs/releases/tag/v0.3.1 - 2026-05-20

Partial release; this version is tagged and published to PyPI, but was not published to crates.io or hex.pm.

- Fixed: Python CI/CD publishing infrastructure.
  [#191]https://github.com/tailscale/tailscale-rs/pull/191.
- Fixed: Rust CI/CD publishing infrastructure.
  [#193]https://github.com/tailscale/tailscale-rs/pull/193.

## [0.3.0]https://github.com/tailscale/tailscale-rs/releases/tag/v0.3.0 - 2026-05-19

Internal release; this version is tagged, but was not published to any package repositories.

- **Breaking** (Rust API): exports `config`, `netstack`, and `keys` modules and moves some functionality
  from the crate root to these modules. Replaces `load_key_file` with `Config::default_with_key_file`.
  Exports a few more types so fewer users will have to depend on internal crates.
  [#105]https://github.com/tailscale/tailscale-rs/pull/105.
- **Breaking** (Rust API, ts_netstack_smoltcp, ts_control): errors have been refactored, some minor
  changes to APIs around errors.
  [#154]https://github.com/tailscale/tailscale-rs/pull/154.
- Added (Rust API): load configuration options from environment variables. Adds `config::auth_key_from_env`
  and `config::Config::default_from_env`.
  [#97]https://github.com/tailscale/tailscale-rs/pull/97.
- Added (Rust API, Python, Elixir): `Device::self_node`.
  [#147]https://github.com/tailscale/tailscale-rs/pull/147.
- Added (Python and Elixir bindings): optional configuration parameters.
  [#140]https://github.com/tailscale/tailscale-rs/pull/140
  and [#148]https://github.com/tailscale/tailscale-rs/pull/148.
- Fixed (ts_netstack_smoltcp): big improvement to TCP accept performance.
  [#141]https://github.com/tailscale/tailscale-rs/pull/141.
- Updated MSRV to 1.94.1.
  [#181]https://github.com/tailscale/tailscale-rs/pull/181.

## [0.2.0]https://github.com/tailscale/tailscale-rs/releases/tag/v0.2.0 - 2026-04-15

Initial public release.

## 0.1.0

Hello, world!