Highlights
- Add overloads of DownloadFileAsync and UploadFileAsync taking an IProgress argument (#1771)
- Significantly reduced memory allocations in all scenarios. For SFTP:
| Operation | File size | Version | Allocated |
|---|---|---|---|
| SFTP Download | 1MB | 2025.1.0 | 3.2MB |
| SFTP Download | 1MB | 2026.0.0 | 0.1MB |
| SFTP Download | 8MB | 2025.1.0 | 24.8MB |
| SFTP Download | 8MB | 2026.0.0 | 0.7MB |
| SFTP Download | 64MB | 2025.1.0 | 197.8MB |
| SFTP Download | 64MB | 2026.0.0 | 4.8MB |
| SFTP Upload | 1MB | 2025.1.0 | 4.1MB |
| SFTP Upload | 1MB | 2026.0.0 | 0.0MB |
| SFTP Upload | 8MB | 2025.1.0 | 32.5MB |
| SFTP Upload | 8MB | 2026.0.0 | 0.3MB |
| SFTP Upload | 64MB | 2025.1.0 | 259.5MB |
| SFTP Upload | 64MB | 2026.0.0 | 1.9MB |
Breaking changes
- None known
What's Changed
- Set version to 2025.1.1-prerelease.{height} by @Rob-Hague in #1723
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #1727
- Bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #1726
- Use native AesGcm for .NET Framework from nuget by @scott-xu in #1619
- Update to MSTest 4 by @mus65 in #1721
- Add .NET 10 target and make use of C#14 extension members by @mus65 in #1672
- Enable nullable in ConnectionInfo by @Rob-Hague in #1728
- Truncate local file in ScpClient.Download by @Rob-Hague in #1729
- Rent buffers used in SFTP reads by @Rob-Hague in #1738
- Write into the underlying buffer in SshDataStream by @Rob-Hague in #1739
- Add a socket receive buffer by @Rob-Hague in #1733
- Migrate solution to slnx format by @mus65 in #1749
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in #1744
- Add UploadFileAsync override with canOverride by @mus65 in #1750
- Bump the dependencies group with 6 updates by @dependabot[bot] in #1743
- Bump alpine from 3.22 to 3.23 in /test/Renci.SshNet.IntegrationTests by @dependabot[bot] in #1755
- Bump actions/download-artifact from 6 to 7 by @dependabot[bot] in #1756
- Bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #1757
- Add a plaintext receive buffer by @Rob-Hague in #1752
- Replace custom TestMethodForPlatformAttribute with MSTest OSCondition by @Rob-Hague with @Copilot in #1766
- Bump the dependencies group with 6 updates by @dependabot[bot] in #1761
- Add GitHub Copilot instructions for SSH.NET by @WojciechNagorski with @Copilot in #1767
- fix Build with newer .NET 10 SDKs by @mus65 in #1772
- SftpClient: add IProgress to DownloadFileAsync and UploadFileAsync by @mus65 in #1771
- ScpClient: allow disabling the -d flag by @mus65 in #1751
- Harden actions by @Rob-Hague in #1784
- Add SECURITY.md by @Rob-Hague in #1785
- Encrypt packets in-place by @Rob-Hague in #1787
- Remove plaintext receive buffer by @Rob-Hague in #1788
- Serialise packets into a buffer by @Rob-Hague in #1792
- Bump alpine from 3.23 to 3.24 in /test/Renci.SshNet.IntegrationTests by @dependabot[bot] in #1806
- Bump actions/setup-dotnet from 5.2.0 to 5.3.0 by @dependabot[bot] in #1802
- Bump NuGet/login from 1.1.0 to 1.2.0 by @dependabot[bot] in #1790
- Bump actions/upload-pages-artifact from 4.0.0 to 5.0.0 by @dependabot[bot] in #1789
- Bump actions/checkout from 6.0.2 to 7.0.0 by @dependabot[bot] in #1807
- Bump the dependencies group with 11 updates by @dependabot[bot] in #1808
- Replace Assert.IsTrue with CollectionAssert.AreEqual for collection comparisons by @Rob-Hague with @Copilot in #1730
- Use the read buffer in UploadFile for the SFTP write packets by @Rob-Hague in #1798
- Keep APM and sync UploadFile/DownloadFile callbacks on the threadpool by @Rob-Hague in #1805
- Bump testcontainers to 4.13 by @Rob-Hague in #1809
- docs: add missing SftpPathNotFoundException exception documentation for ListDirectory, ListDirectoryAsync by @cmgchess in #1810
- Fix infinite loop in Channel.SendData when RemotePacketSize=0 by @Rob-Hague in 6ee878f (GHSA-vhpg-4g9v-rppq)
- Cap data received during the protocol version exchange by @Rob-Hague in 11e7a52 (GHSA-h5q6-2gr6-3g3m)
- Require an explicit IRemotePathTransformation for ScpClient by @Rob-Hague in c66b9f8 (GHSA-mggc-4xg6-vcxf)
- Reject unsafe server-supplied names in SCP recursive download by @Nadav0077 in 600be0d (GHSA-q939-rpr3-3284)
- Bump the dependencies group with 8 updates by @dependabot[bot] in #1818
New Contributors
- @cmgchess made their first contribution in #1810
- @Nadav0077 made their first contribution in 600be0d
Full Changelog: 2025.1.0...2026.0.0