Skip to content

CameraK Documentation

Modern camera SDK for Kotlin Multiplatform — Android, iOS, and Desktop with a unified API.

Get Started in 60 Seconds

dependencies {
    implementation("io.github.kashif-mehmood-km:camerak:0.2.0")
}
@Composable
fun CameraScreen() {
    val permissions = providePermissions()
    val scope = rememberCoroutineScope()
    val cameraState by rememberCameraKState(permissions = permissions).cameraState.collectAsStateWithLifecycle()

    CameraKScreen(
        cameraState = cameraState,
        showPreview = true
    ) { readyState ->
        // Camera preview shown automatically
        FloatingActionButton(
            onClick = { 
                scope.launch {
                    readyState.controller.takePictureToFile()
                }
            }
        ) {
            Icon(Icons.Default.CameraAlt, "Capture")
        }
    }
}

That's it! CameraKScreen handles all state management automatically.

Features

  • Cross-Platform: Single API works on Android, iOS, and Desktop
  • Compose-First: Built for Jetpack Compose with reactive StateFlow
  • Plugin System: Add QR scanning, OCR, and custom processing
  • Performance: Direct file capture avoids memory overhead
  • Type-Safe: Sealed classes for errors, no runtime surprises

Installation

Start with installation and configuration:

Core Concepts

State Management

CameraK uses reactive state management via CameraKStateHolder:

sealed class CameraKState {
    object Initializing : CameraKState()
    data class Ready(val controller: CameraController) : CameraKState()
    data class Error(val exception: Exception) : CameraKState()
}

State flows automatically: InitializingReady → capture photos.

Camera Controller

Low-level camera operations exposed when state is Ready:

interface CameraController {
    suspend fun takePictureToFile(): ImageCaptureResult
    fun setZoom(zoom: Float)
    fun setFlashMode(mode: FlashMode)
    fun toggleCameraLens()
}

Plugins

Extend camera functionality modularly:

val stateHolder = rememberCameraKState(
    permissions = permissions,
    plugins = listOf(
        rememberQRScannerPlugin(),
        rememberOcrPlugin()
    )
)

// QR codes available automatically
val qrCodes by stateHolder.qrCodeFlow.collectAsStateWithLifecycle()

Getting Started - Installation - Quick Start - Configuration

Guides - Camera Capture - Flash and Torch - Zoom Control - Camera Switching - Plugins

API Reference - CameraKStateHolder - CameraController

Plugins - Plugin System — Using and creating plugins

Platform Requirements

Platform Minimum Version Backend
Android API 21 (5.0) CameraX
iOS 13.0 AVFoundation
Desktop JDK 11+ JavaCV

Support

License

Apache 2.0 — View License