diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift
new file mode 100644
index 0000000000000000000000000000000000000000..f1d711908c3cdcf4dee9a4b558541f7f96ccea5a
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerIsFileTransferRunning.swift
@@ -0,0 +1,21 @@
+import XCTestDynamicOverlay
+
+public struct MessengerIsFileTransferRunning {
+  public var run: () -> Bool
+
+  public func callAsFunction() -> Bool {
+    run()
+  }
+}
+
+extension MessengerIsFileTransferRunning {
+  public static func live(_ env: MessengerEnvironment) -> MessengerIsFileTransferRunning {
+    MessengerIsFileTransferRunning { env.fileTransfer.get() != nil }
+  }
+}
+
+extension MessengerIsFileTransferRunning {
+  public static let unimplemented = MessengerIsFileTransferRunning(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index d565ebb2b6515f00bacd776be88f83f7bcd7401c..f8d982e4d89d2ee9450ada011d5ede5c86eab877 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -41,6 +41,7 @@ public struct Messenger {
   public var setLogLevel: MessengerSetLogLevel
   public var startLogging: MessengerStartLogging
   public var registerReceiveFileCallback: MessengerRegisterReceiveFileCallback
+  public var isFileTransferRunning: MessengerIsFileTransferRunning
   public var startFileTransfer: MessengerStartFileTransfer
   public var sendFile: MessengerSendFile
   public var receiveFile: MessengerReceiveFile
@@ -89,6 +90,7 @@ extension Messenger {
       setLogLevel: .live(env),
       startLogging: .live(env),
       registerReceiveFileCallback: .live(env),
+      isFileTransferRunning: .live(env),
       startFileTransfer: .live(env),
       sendFile: .live(env),
       receiveFile: .live(env)
@@ -138,6 +140,7 @@ extension Messenger {
     setLogLevel: .unimplemented,
     startLogging: .unimplemented,
     registerReceiveFileCallback: .unimplemented,
+    isFileTransferRunning: .unimplemented,
     startFileTransfer: .unimplemented,
     sendFile: .unimplemented,
     receiveFile: .unimplemented
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..3ac1fd3008b4f3c0dec329a49351c0f540d67c4f
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerIsFileTransferRunningTests.swift
@@ -0,0 +1,20 @@
+import XCTest
+@testable import XXMessengerClient
+
+final class MessengerIsFileTransferRunningTests: XCTestCase {
+  func testIsRunning() {
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = { .unimplemented }
+    let isRunning: MessengerIsFileTransferRunning = .live(env)
+
+    XCTAssertTrue(isRunning())
+  }
+
+  func testIsNotRunning() {
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = { nil }
+    let isRunning: MessengerIsFileTransferRunning = .live(env)
+
+    XCTAssertFalse(isRunning())
+  }
+}