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:
- Installation -- Add CameraK to your project
- Quick Start -- Build your first camera app in 5 minutes
- Configuration -- Customize camera behavior
- Android Example -- Android-specific setup
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())
},
)
Quick Links¶
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¶
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Examples: Sample Projects
License¶
Apache 2.0 -- View License