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.3")
}
@Composable
fun CameraScreen() {
    val scope = rememberCoroutineScope()
    val cameraState by rememberCameraKState()

    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, val uiState: CameraUIState) : CameraKState()
    data class Error(val exception: Exception, val message: String, val isRetryable: Boolean) : CameraKState()
}

State flows automatically: Initializing -> Ready -> capture photos.

Camera Controller

Low-level camera operations exposed when state is Ready:

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

Plugins

Extend camera functionality modularly:

val cameraState by rememberCameraKState(
    config = CameraConfiguration(
        cameraLens = CameraLens.BACK,
    ),
    setupPlugins = { stateHolder ->
        stateHolder.attachPlugin(rememberQRScannerPlugin())
        stateHolder.attachPlugin(rememberOcrPlugin())
    },
)

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