Skip to content

Features

RecordKit provides a complete set of recording capabilities for macOS apps. Each feature works standalone or combined with others in a single recording session.

Permissions

macOS requires user authorization for recording. RecordKit provides consistent APIs to check and request permissions for Screen Recording, Camera, Microphone, and Input Monitoring.

swift
struct ContentView: View {
    @RKAuthorizationStatus(.camera) var camera

    var body: some View {
        if camera {
            Text("Camera authorized.")
        } else {
            Button("Enable camera") {
                $camera.requestCameraAccess()
            }
        }
    }
}
ts
const status = await recordkit.permissions.camera.status()
if (status !== 'authorized') {
    await recordkit.permissions.camera.request()
}

Discovery

Users have multiple displays, windows, cameras and microphones. RecordKit provides APIs to discover and list all available recording sources.

swift
struct ContentView: View {
    @RKSources(.microphones) var microphones

    var body: some View {
        Text("There are \(microphones.count) microphones")
    }
}
ts
const displays = await recordkit.sources.displays()
const cameras = await recordkit.sources.cameras()
const microphones = await recordkit.sources.microphones()

Pause & Resume

Pause and resume recordings while keeping hardware active. This allows users to skip unwanted sections without starting a new recording.

swift
try await recorder.pause()
// ... user skips a section
try await recorder.resume()
ts
await recorder.pause()
// ... user skips a section
await recorder.resume()

Screen Recording

Record displays, windows and system audio using Apple's ScreenCaptureKit. Supports multiple displays simultaneously.

swift
let recorder = RKRecorder([
    .display(displayID: display.id)
])
ts
const recorder = await recordkit.createRecorder({
    items: [
        { type: 'display', display: display }
    ]
})

You can also record a specific window instead of a full display.

swift
let recorder = RKRecorder([
    .desktopIndependentWindow(windowID: window.id)
])
ts
const recorder = await recordkit.createRecorder({
    items: [
        { type: 'window', window: window }
    ]
})

Camera & Microphone

Record camera and microphone into synchronized video files. RecordKit keeps all streams in sync, including with screen recordings.

swift
let recorder = RKRecorder([
    .webcam(microphoneID: microphone.id, cameraID: camera.id)
])
ts
const recorder = await recordkit.createRecorder({
    items: [
        { type: 'camera', camera: camera, microphone: microphone }
    ]
})

For audio-only recordings, you can record just the microphone.

swift
let recorder = RKRecorder([
    .microphone(microphoneID: microphone.id)
])
ts
const recorder = await recordkit.createRecorder({
    items: [
        { type: 'microphone', microphone: microphone }
    ]
})

Keyboard & Mouse

Record keyboard and mouse input to show key overlays or visualize clicks and cursor movement. Output as JSON for flexible rendering.

swift
let recorder = RKRecorder([
    .display(displayID: display.id, mouseEvents: true, keyboardEvents: true)
])
ts
const recorder = await recordkit.createRecorder({
    items: [
        { type: 'display', display: display, mouseEvents: true, keyboardEvents: true }
    ]
})

Input Monitoring Permission

Keyboard and mouse recording requires the Input Monitoring permission, which users must grant in System Settings.

iPhone & iPad

Record the screen of iPhones and iPads connected via USB cable. These devices appear in the discovery APIs alongside other sources.

swift
let devices = await RKAppleDevice.appleDevices
let recorder = RKRecorder([
    .appleDeviceStaticOrientation(deviceID: device.id)
])
ts
const devices = await recordkit.sources.iosDevices()
const recorder = await recordkit.createRecorder({
    items: [
        { type: 'iosDevice', device: device }
    ]
})

Cable Required

iOS device recording requires a USB connection. Wireless recording is not supported.

Questions? Feel free to contact us at [email protected]