Skip to content

v3.0.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 12:53
· 5 commits to master since this release
9212862

Major Changes

  • #12 b5493b4 Thanks @longphung! - Rewrote the Android native module in Kotlin using the Expo Modules API, replacing the classic ReactPackage/ReactContextBaseJavaModule registration. JSch remains the underlying SSH/SFTP library and the public JS API is unchanged. One incidental fix: connectSFTP no longer marks the stream active on a failed connect.

    Breaking: the Android toolchain was bumped to what the Expo Modules Gradle plugin requires, and the library now depends on expo-modules-core for autolinking (see the iOS changeset in this same release for the full peer dependency change). Consumers need expo installed (as an optional dependency purely for autolinking infrastructure if not already using Expo) and their Android toolchain updated accordingly.

  • #12 b5493b4 Thanks @longphung! - Rewrote the iOS native module in Swift using the Expo Modules API, replacing NMSSH with Citadel (a pure-Swift SSH/SFTP library built on swift-nio-ssh), vendored as a static XCFramework built at publish time. This fixes SSH connections dropping on a Wi-Fi/cellular network handover: the connection is now explicitly built on NIOTSEventLoopGroup (Apple's Network.framework), instead of a plain POSIX-socket event loop that doesn't observe network path changes. sftpChmod, getKeyDetails, and generateKeyPair are now implemented on iOS (previously Android-only or unimplemented); generateKeyPair currently supports Ed25519 only.

    Breaking:

    • iOS 18.0+ is now required (up from iOS 11) - needed for Swift's Task Executor Preference (SE-0417), which the Citadel-based connection handling relies on for the network-handover fix above.
    • tvOS support is dropped.
    • No more manual Podfile edit for iOS - resolution is now automatic via the podspec's vendored XCFramework and Expo autolinking. Remove any existing pod 'NMSSH', ... line from your Podfile.
    • expo-modules-core is now a required peer dependency on both platforms (both native modules are Expo Modules now); expo itself remains an optional peer dependency, needed only for its autolinking infrastructure in bare React Native apps.

    The public JS API (SSHClient's methods, event names/shapes) is unchanged.